diff options
| author | Miklos Szeredi <mszeredi@redhat.com> | 2026-08-26 16:11:59 +0200 |
|---|---|---|
| committer | Miklos Szeredi <mszeredi@redhat.com> | 2026-09-02 09:36:08 +0200 |
| commit | 10bd6b32965265688fa277d166ab224de8e86eb2 (patch) | |
| tree | 2ce8d482733f485d9d8b351f1d8dec6e1748269b /tools/lib/python/kdoc | |
| parent | fc60668db85584da911e5d0a65c8698628f98bba (diff) | |
fuse: fall back to copy_splice_read() on FOPEN_DIRECT_IO
Yafang Shao reports:
"After upgrading the kernel from 6.1.y to 6.18.y on production servers,
some containers failed to read lxcfs data. The root cause is that our
lxcfs is still at the old v3.0.4, which does not include commit 25982f5
("Set the file size to 4k") [0].
Between 6.1.y and 6.18.y, the FUSE splice_read path was converted from
generic_file_splice_read() to filemap_splice_read() by commit
2cb1e08985e3 ("splice: Use filemap_splice_read() instead of
generic_file_splice_read()"). Unlike generic_file_splice_read(),
filemap_splice_read() strictly checks i_size and refuses to read from
zero-size files, which breaks virtual FUSE filesystems like the old
lxcfs."
Fix by using copy_splice_read() for the FOPEN_DIRECT_IO case, just like the
VFS does for DAX and O_DIRECT files.
Reported-by: Yafang Shao <laoar.shao@gmail.com>
Closes: https://lore.kernel.org/all/20260706025705.58301-1-laoar.shao@gmail.com/
Reported-by: Changyuan Lyu <changyuanl@google.com>
Closes: https://lore.kernel.org/all/20260901213412.1763253-1-changyuanl@google.com/
Fixes: 2cb1e08985e3 ("splice: Use filemap_splice_read() instead of generic_file_splice_read()")
Tested-and-acked-by: Yafang Shao <laoar.shao@gmail.com>
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
Diffstat (limited to 'tools/lib/python/kdoc')
0 files changed, 0 insertions, 0 deletions
