Struktura request
Struktura request opisuje żądanie skierowane do urządzenia blokowego. Żądanie może dotyczyć operacji czytania lub pisania. Wszystkie żądania do urządzeń blokowych znajdują się w tablicy all_requests, której definicja znajduje się w pliku /drivers/block/ll_rw_blk.c:
NR_REQUEST 64
static struct request all_requests[NR_REQUEST]
Struktura request jest zdefiniowana w pliku /include/linux/blkdev.h
typ | nazwa pola | opis |
volatile int | rq_status | Flagi |
kdev_t | rq_dev | Numer urządzenia |
int | cmd | Polecenie do wykonania.
Może przyjmować wartości: READ 0 WRITE 1 oraz -1 w przypadku żądania plug |
int | errors | Licznik błędów, które zaszły podczas wykonywania operacji wejścia-wyjścia. |
unsigned long | sector | Numer sektora, od którego ma się rozpocząć operacja czytania lub pisania. |
unsigned long | nr_sectors | Liczba wszystkich sektorów, których dotyczy dane żądanie |
unsigned long | current_nr_sectors | Liczba sektorów, które zajmuje bieżący bufor.
Wskaźnik do nagłówka bieżącego bufora jest pamiętany w polu bh. Jeśli rozmiar bufora w podręcznej pamięci buforowej jest równy rozmiarowi sektora urządzenia blokowego (obecnie 512 bajtów), to pole current_nr_sectors jest zawsze inicjalizowane liczbą 1. |
char * | buffer | Wskaźnik do bieżącego bufora |
struct semaphore * | sem | Semafor |
struct buffer_head * | bh | Każde żądanie dotyczy pewnej ilości buforów. Dane z buforów tych zostaną przesłane do urządzenia lub też, dane z urządzenia zostaną zapisane w buforach. Nagłówki tych buforów znajdują się na liście, której początek pamiętany jest w polu bh, a koniec w polu bhtail. |
struct buffer_head * | bhtail | |
struct request * | next | Wskaźnik do następnego żądania w kolejce. |
flaga | kod | opis |
RQ_INACTIVE | (-1) | Żądanie nieaktywne |
RQ_ACTIVE | 1 | Żądanie aktywne. |
RQ_SCSI_BUSY | 0xffff | Flagi dotyczące urządzeń SCSI ( small computer system interface) |
RQ_SCSI_DONE | 0xfffe | |
RQ_SCSI_DISCONNECTING | 0xffe0 |