Conventional filesystems create a struct file_operations structure to implement the VFS functions. For example, in the ext4 (Linux 4.0 and before) the struct file_operations ext4_file_operations make the read pointer point to new_sync_read.
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,
....
}
However, in Linux 4.1 and later, there is no such assignment for the read pointer, but a splice_read pointer is added.
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,
...
}
But the struct file_operations defined in "/include/linux/fs.h" still has the read pointer. So, which function in ext4 now is responsible for the conventional read function?