在较新的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中的哪个函数现在负责传统的读取函数?
答
我已经通过编写一个新的文件系统进行了测试,发现如果我们初始化这两个指针,然后.read
被调用,如果我使用cat命令。如果我使用cat命令没有初始化.read
但初始化.read_iter
.read_iter
被调用。
我现在认为传统的读取是由新版本的read_iter直接实现的,就像在旧版本中它是由read_iter间接实现的一样。如果这是正确的,那么VFS读取更新版本的作用是什么? – Akr