-
struktura "blk_dev_struct" - opisująca dane urządzenie blokowe.
Struktura ta jest zdefiniowana dla każdego urządzenia blokowego. Jest przechowywana w tablicy blk_dev indeksowanej numerem głównym urządzenia. tablica ta jest zdefiniowana w pliku ll_rw_blk.c i inicjalizowana funkcją __init blk_dev_init. Funkcja ta oprócz inicjalizowania tablicy blk_dev ustala również zmienne określające maksymalną ilość buforów jakie mogą być zablokowane oraz ilość struktur request przypadających na każdą kolejkę żądań. Wartości te określane są na podstawie ilośći dostępnej pamięci w systemie.
W strukturze blk_dev_struct istotne są dwa pola:
- request_queue - czyli kolejka żądań związana z tym urządzeniem (opisana dalej).
- queue - czyli wskaźnik do funkcji zwracającej kolejkę( domyślnie pole to ma wartość null).
-
struktura "request" - opisująca pojedyńcze żądanie operacji wejścia/wyjścia na urządzeniu.
Istotne pola:
- Status żądania: rq_status, określający między innymi czy dana struktura jest używana (RQ_ACTIVE) czy jest wolna (RQ_INACTIV).
- Użądzenie którego dotyczy dane żądanie: rq_dev.
- Komenda cmd czyli czy czytamy czy piszemy (READ / WRITE).
- początkowy sektor żądania sector oraz długość żądania nr_sectors.
- liczba sektorów które pozostały do wczytania/zapisania current_nr_sectors.
- Wskaźnik na początek bh i koniec bhtail listy buforów odpowiadających fragmentowi urządzenia.
- licznik błędów errors.
|