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.