Do tematu: Podsystem wejścia-wyjścia
Do tematu: Struktury danych

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.

Flagi

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


Autor: Maciej Kaczmarek