next up previous contents
Next: Schemat wywołań Up: Otwieranie urządzeń Previous: Otwieranie urządzenia znakowego   Spis tresci

Otwieranie urządzenia blokowego

Podczas czytania inode'a dla urządzenia blokowego, do pola i_fops->open wpisana jest funkcja blkdev_open. Pod koniec procesu otwierania ona właśnie jest uruchamiana.

int blkdev_open(struct inode * inode, struct file * filp)

Funkcja blkdev_open na początku wywołuje funkcje get_blkfops w celu znalezienia właściwych procedur obsługi urządzenia blokowego. Niezbędne do tego dane znajdują się w tablicy blkdevs. Jeśli w tablicy nie zostaną znalezione odpowiednie dane następuja próba załadowania modułu block-major-nr, gdzie nr oznacza numer główny, i ponowne sprawdzenie danych w tablicy.

Jeśli w znalezionej strukturze struct block_device_operations pole open jest ustawione na NULL, to funkcja blkdev_open kończy się sukcesem, w przeciwnym przypadku uruchamiana jest właściwa procedura otwarcia ->open i w przypadku jej pomyślnego zakończenia zwiększany jest licznik pomyślnych otwarć urządzenia ->bd_openers.

Uwaga: dla urządzeń blokowych procedury obsługi urządzenia znajdują się w strukturze struct block_device_operations, a nie tak jak w przypadku urządzeń znakowych w strukturze struct file_operations inode'u.



2001-12-18