在较新的Linux中,哪些函数在ext4中负责读取?

问题描述:

传统的文件系统创建一个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

我已经通过编写一个新的文件系统进行了测试,发现如果我们初始化这两个指针,然后.read被调用,如果我使用cat命令。如果我使用cat命令没有初始化.read但初始化.read_iter.read_iter被调用。