SCSI-Einheit schließen
Wenn ein SCSI-Einheitentreiber das Schließen einer Einheit über den Einheitentreiber des SCSI-Adapters vorbereitet, muss er sicherstellen, dass alle Transaktionen abgeschlossen sind.
Wenn der Einheitentreiber des SCSI-Adapters eine SCIOSTOP ioctl-Operation empfängt und E/A-Anforderungen anstehen, kehrt die ioctl-Operation erst zurück, wenn alle abgeschlossen sind. Neue Anforderungen, die während dieses Zeitraums empfangen werden, werden von der Routine Datendefinitionsstrategie des Adaptereinheitentreibers zurückgewiesen.
Wenn der Einheitentreiber des SCSI-Adapters eine SCIOSTOPTGZ ioctl-Operation empfängt, muss er die Freigabe aller Empfangsdatenpuffer erzwingen, die für diese Einheit in die Warteschlange des SCSI-Einheitentreibers eingereiht und nicht über die Pufferfreigaberoutine an den Einheitentreiber des SCSI-Adapters zurückgegeben wurden. Der SCSI-Einheitentreiber muss sicherstellen, dass alle Empfangsdatenpuffer freigegeben werden, bevor die SCIOSTOPTGZ ioctl-Operation aufgerufen wird. Der Einheitentreiber des SCSI-Adapters muss jedoch überprüfen, ob dies geschieht, und, falls erforderlich, die Freigabe der Puffer erzwingen. Die Puffer müssen freigegeben werden, da diese nicht freigegeben dazu führen, dass Speicherbereiche permanent für das System verloren gehen (bis zum nächsten Booten).
Damit der Einheitentreiber des SCSI-Adapters Puffer freigeben kann, die an den SCSI-Einheitentreiber gesendet, aber nie zurückgegeben werden, muss er verfolgen, welche tm_bufs derzeit in die Warteschlange für den SCSI-Einheitentreiber eingereiht sind. Für die Verfolgung von tm_bufs muss der Einheitentreiber des SCSI-Adapters gegen die allgemeine SCSI-Regel verstoßen, die besagt, dass der Einheitentreiber des SCSI-Adapters die tm_bufs -Struktur nicht ändern sollte, während sie in die Warteschlange des SCSI-Einheitentreibers eingereiht wird. Diese Ausnahme von der Regel ist erforderlich, da es nie akzeptabel ist, keinen vom System zugeordneten Speicher freizugeben.