Servicio de kernel devstrat

Finalidad

Llama a una rutina de estrategia del controlador de dispositivo de bloques.

Sintaxis

#include <sys/types.h>
#include <sys/errno.h>
int devstrat ( bp)
struct buf *bp;

Parámetro

Elemento Descripción
BP Apunta a la estructura buf especificando los parámetros de transferencia de bloques.

Descripción

La extensión de kernel o kernel llama al servicio de kernel de devstrat para solicitar una transferencia de datos de bloque a o desde el dispositivo con el número de dispositivo especificado. Este número de dispositivo se encuentra en la estructura buf . El servicio devstrat sólo se puede utilizar para la clase de bloque de controladores de dispositivo.

El servicio devstrat llama a la rutina ddestrategia del controlador de dispositivo. Esta rutina se encuentra en la tabla de conmutación de dispositivo para el controlador de dispositivo asociado con el número de dispositivo especificado en elb_dev:NONE. Los 2 b_devse encuentra en la estructura buf al que apunta el parámetro bp . El llamante del servicio devstrat debe tener una rutina iodone especificada en elb_iodonede la estructura buf . Tras el retorno de la rutina ddestrategia del controlador de dispositivo, el servicio de devstrat vuelve sin esperar a que se realice la E/S.

En sistemas de varios procesadores, todas las rutinas iodone se ejecutan de forma predeterminada en el primer procesador iniciado cuando se arrancó el sistema. Esto garantiza la compatibilidad con los controladores de dispositivo de uniprocesador. Si la rutina iodone se ha diseñado para que sea seguro multiprocesador, establezca el distintivo B_MPSAFE en elb_flagsde la estructura buf pasada al servicio de kernel de devstrat . A continuación, la rutina iodone se ejecutará en cualquier procesador disponible.

Si el número mayor de dispositivo no es válido o el dispositivo especificado no es un controlador de dispositivo de bloque, el servicio devstrat devuelve el código de retorno de ENDEV . Si el número de dispositivo es válido, la rutina ddestrategia del controlador de dispositivo se llama con el puntero a la estructura buf (especificada por el parámetro bp ).

Entorno de ejecución

El servicio de kernel de devstrat se puede llamar desde el entorno de proceso o de interrupción.

Nota: El servicio de kernel de devstrat se puede llamar en el entorno de interrupción sólo si su nivel de prioridad es INTIODONA o inferior.

Valores de retorno

Elemento Descripción
0 Indica una operación satisfactoria.
ENDEV Indica que el número de dispositivo no es válido o que no se ha registrado ninguna rutina de ddestrategia . Este valor también se devuelve cuando el dispositivo especificado no es un controlador de dispositivo de bloque. Si se produce este error, el servicio devstrat puede provocar un error de página.