פתרון פרויקט התקן תוכנה ולקוח¶
הפתרון מגדיר header קטן עם version, size וkind. הdriver בודק access, אורך וערכים לפני שימוש, ומעתיק או נועל נתונים לפי buffering method שהוגדר. הוא אינו שומר pointer של user mode לשימוש מאוחר בלי חוזה החזקה מתאים.
הrequest שייך בכל רגע למסלול אחד: handler, queue, worker או completion. הביטול והworker מתחרים על מעבר בעלות מוגדר, ולא כל אחד קורא לcomplete מתוך ההנחה שהשני בטח ויתר. כל תוצאה סופית עוברת דרך נקודה שמונעת השלמה כפולה.
הclose של file handle מטפל בעבודות ששייכות לפתיחה הזאת. הסרה של device מטפלת גם בעבודה משותפת ובמקורות חדשים. מונה של requests אינו מספיק אם work item פרטי עדיין שומר context של device שכבר נפרק.
הגרסה הישנה של הלקוח ממשיכה לשלוח header ישן. הdriver החדש מקבל אותו רק אם חוזה התאימות נשמר, ומחזיר תשובה בגודל שהclient יודע לקבל. גרסה לא נתמכת נדחית לפני פענוח payload חדש.
הבדיקות מכריחות כשל בכל נקודת allocation ובכל מעבר queue. בVerifier בוחרים בדיקות שמתאימות לdriver ולסביבה, ומצרפים dump וסמלים כשמתגלה כשל. היעדר crash בהרצה אחת אינו הוכחת quiescence; ההגנה כוללת גם תרשים context וניתוח של סדר הפריקה.
הלקוח מציג שגיאת device unavailable כשאירעה הסרה, ושומר מזהה ניסיון כדי לא לייחס completion ישן לבקשה חדשה. השירות סוגר את המסלול מול הdriver לפני שחרור state שתלוי בו, וממשיך להבחין בין cancel שנדרש לבין cancel שהוכרע.