2017-07-15 77 views
1

傳統的文件系統創建一個struct file_operations結構來實現VFS功能。例如,在ext4(Linux 4.0和之前)中,struct file_operations ext4_file_operations使讀指針指向new_sync_read。在較新的Linux中,哪些函數在ext4中負責讀取?

的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, 
    .... 
} 

然而,在Linux的4.1及更高版本,不存在這樣的分配爲讀指針,但增加了一個splice_read指針。

的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, 
    ... 
} 

但在 「/include/linux/fs.h」 定義的file_operations結構仍具有讀指針。那麼,ext4中的哪個函數現在負責傳統的讀取函數?

+0

我現在認爲傳統的讀取是由新版本的read_iter直接實現的,就像在舊版本中它是由read_iter間接實現的一樣。如果這是正確的,那麼VFS讀取更新版本的作用是什麼? – Akr

回答

1

我已經通過編寫一個新的文件系統進行了測試,發現如果我們初始化這兩個指針,然後.read被調用,如果我使用cat命令。如果我使用cat命令沒有初始化.read但初始化.read_iter.read_iter被調用。

相關問題