Siempre mira el primer error:
En su caso, parece un problema con los archivos de inclusión, p. request_queue_t no está definido.
Dado que este es un tipo obsoleto, probablemente esté usando una versión de linux/blkdev.h que es más nueva que el ejemplo de código.
Intenta agregar typedef struct request_queue request_queue_t;
No existe una forma "oficial" de bloquear controladores en el espacio de usuario, sin embargo, las personas a menudo lo hacen (abusando) del controlador NBD para hablar a través de una red de bucle invertido con un demonio que escucha en un enchufe normal y habla el protocolo NBD. Consulte los documentos NBD para obtener más información.
Su ejemplo es para un dispositivo de bloque en modo kernel, que deberá construirse como un módulo kernel. Y como las partes internas del núcleo siempre están cambiando, presumiblemente ahora es incompatible.
Siguiendo la sugerencia de MarkR, incluso es posible hablar el protocolo NBD sobre un AF_UNIX
par de sockets, por lo que no se necesita ningún demonio local adicional. El programa que implemente este protocolo deberá configurar el par de sockets y bifurcar un hijo. Tanto el padre como el hijo cierran un extremo del par de enchufes. Uno de ellos comienza a recibir solicitudes en su extremo del zócalo mientras que el otro conecta el controlador NBD a su extremo del zócalo.