next up previous contents index
Next: Informando al kernel de Up: Módulos para dispositivos de Previous: Módulos para dispositivos de   Índice General   Índice de Materias


Informando al kernel de nuestro consumidor de peticiones.

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.



Alberto Cortés 2001-03-26