Controlla sempre il primo errore:
Nel tuo caso sembra un problema con i file include, ad es. request_queue_t non è definito.
Poiché si tratta di un tipo deprecato, probabilmente stai utilizzando una versione di linux/blkdev.h più recente dell'esempio di codice.
Prova ad aggiungere typedef struct request_queue request_queue_t;
Non esiste un modo "ufficiale" per bloccare i driver nello spazio utente, tuttavia le persone spesso lo fanno (ab) utilizzando il driver NBD per parlare su una rete di loopback con un demone che ascolta su un normale socket e parla il protocollo NBD. Consulta i documenti NBD per maggiori informazioni.
Il tuo esempio è per un dispositivo a blocchi in modalità kernel, che dovrà essere compilato come modulo del kernel. E poiché gli interni del kernel cambiano continuamente, è presumibilmente ora incompatibile.
Seguendo il suggerimento di MarkR, è persino possibile comunicare il protocollo NBD tramite un AF_UNIX
coppia di socket, quindi non è necessario alcun demone locale aggiuntivo. Il programma che implementa questo protocollo dovrà impostare la coppia di socket e eseguire il fork di un figlio. Sia il genitore che il figlio chiudono un'estremità della coppia di socket. Uno di loro inizia a ricevere richieste alla sua estremità del socket mentre l'altro connette il driver NBD alla sua estremità del socket.