A su vez, nuestro módulo ha de estar en contacto con esa cola de peticiones para ir atendiéndola, pero en la estructura file_operations, no tenemos ninguna operación dedicada a este menester. Por ello, la función de nuestro módulo que se dedica a atender las peticiones no se da de alta allí, si no que se anuncia a través de una estructura ligeramente diferente, exclusiva de los drivers de bloque, blk_dev .
struct blk_dev_struct {
request_fn_proc *request_fn;
/*
* queue_proc has to be atomic
*/
queue_proc *queue;
void *data;
struct request *current_request;
struct request plug;
struct tq_struct plug_tq;
elevator_t elevator;
} blk_dev[MAX_BLKDEV];
Cuando el kernel necesita que se atienda a una petición, se llama a la función blk_dev[mayor].request_fn. Por lo tanto en la función de inicialización de nuestro módulo, tenemos que hacer apuntar este putero a nuestra propia request_fn.
No es necesario que se rellenen el resto de los campos de esta estructura, pues no tendremos que usarlos en ningún momento.