2017-07-15 3 views
1

Herkömmliche Dateisysteme erstellen eine Struktur struct file_operations, um die VFS-Funktionen zu implementieren. Zum Beispiel in der ext4 (Linux 4.0 und vorher) die struct file_operations ext4_file_operations machen den Lesezeiger auf new_sync_read.Im neueren Linux, welche Funktion in ext4 ist verantwortlich für das Lesen?

Linux 4,0 /fs/ext4/file.c

const struct file_operations ext4_dax_file_operations = { 
    .read  = new_sync_read, 
    .read_iter = generic_file_read_iter, 
    .... 
} 

jedoch in Linux 4.1 und höher, gibt es keine solche Zuordnung für den Lesezeiger, sondern ein splice_read Zeiger hinzugefügt wird.

Linux 4,1 /fs/ext4/file.c

const struct file_operations ext4_file_operations = { 
    .read_iter = generic_file_read_iter, 
    .splice_read = generic_file_splice_read, 
    ... 
} 

Aber die struct file_operations in "/include/linux/fs.h" definiert hat immer noch den Lesezeiger. Welche Funktion in ext4 ist nun für die konventionelle Lesefunktion zuständig?

+0

Ich denke jetzt das konventionelle Lesen wird direkt von der read_iter in neueren Versionen implementiert, wie in alten Versionen ist es indirekt durch read_iter implementiert. Wenn dies richtig ist, welche Rolle spielt der Lese-Pinter von VFS in neueren Versionen? – Akr

Antwort

1

Ich habe getestet, indem Sie ein neues Dateisystem geschrieben und gefunden, wenn wir beide Zeiger initialisieren, dann .read wird aufgerufen, wenn ich cat Befehl verwenden. Wenn ich cat Befehl ohne Initialisierung .read aber Initialisierung .read_iter.read_iter verwenden, wird aufgerufen.

Verwandte Themen