2016-04-15 20 views
6

Sto scrivendo un driver di dispositivo a blocchi Linux che riceve richieste tramite una funzione registrata con blk_init_queue().Ordinamento richiesta driver dispositivo blocco Linux - RaW?

Il mio dispositivo hardware riordina le richieste e, come tale, per evitare conflitti di lettura dopo scrittura, è necessario attendere il completamento di write(lba x) prima di emettere read(lba x).

La mia domanda: Ha lo strato di blocco di Linux tenere traccia dei conflitti grezzo e sarà non problema read(lba x) fino a quando non ha ricevuto un completamento richiesta (tramite __blk_end_request_all(req r)) per un precedente write(lba x), o devo farlo nel mio autista?

risposta

0

In base all'articolo in basso, i driver di dispositivo di blocco di Linux sono ora liberi di riordinare le richieste in modo arbitrario, il livello del filesystem è responsabile per evitare i rischi e l'implementazione delle barriere. https://lwn.net/Articles/400541/

L'unica eccezione sono le richieste REQ_FLUSH e REQ_FUA per dispositivi che implementano cache di write-back. Nel caso in cui questi flag siano impostati, alcuni requisiti di ordinamento devono essere applicati dal driver del dispositivo blk. https://www.kernel.org/doc/Documentation/block/writeback_cache_control.txt

In particolare, i seguenti requisiti di ordinazione esistere:

  • Nessun dati di scrittura, REQ_FLUSH - non ha alcun vincolo ordinamento fatto salvo il requisito FLUSH intrinseco (scrive precedentemente completato dovrebbe essere su i media sul completamento di FLUSH).

  • Scrittura dati, REQ_FLUSH - FLUSH deve essere completato prima della scrittura dei dati è emesso. vale a dire. i dati di scrittura non devono essere scritti sul supporto prima che tutte le scritture precedenti siano presenti sul supporto .

  • Scrittura dati, REQ_FUA - La scrittura deve essere completata prima che FLUSH sia emesso - es. i dati di scrittura dovrebbero essere sul piatto insieme alle precedenti scritture completate sul bio-completamento.

  • Scrittura dati, REQ_FLUSH | REQ_FUA - I dati di scrittura non devono essere scritti su il supporto prima che tutte le scritture precedenti siano sul supporto & & i dati di scrittura devono essere presenti sul supporto al completamento bio. Di solito è in sequenza come FLUSH FLUSH.

[dalla mailing list linux-fsdevel: http://www.spinics.net/lists/linux-fsdevel/msg45616.html]

Problemi correlati