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?
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