From: Chao Yu <chao@xxxxxxxxxx> commit 5c8764f8679e659c5cb295af7d32279002d13735 upstream. It will return all zero data when DIO reading from inline_data inode, it is because f2fs_iomap_begin() assign iomap->type w/ IOMAP_HOLE incorrectly for this case. We can let iomap framework handle inline data via assigning iomap->type and iomap->inline_data correctly, however, it will be a little bit complicated when handling race case in between direct IO and buffered IO. So, let's force to use buffered IO to fix this issue. Cc: stable@xxxxxxxxxxxxxxx Reported-by: Barry Song <v-songbaohua@xxxxxxxx> Signed-off-by: Chao Yu <chao@xxxxxxxxxx> Signed-off-by: Jaegeuk Kim <jaegeuk@xxxxxxxxxx> Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> --- fs/f2fs/file.c | 2 ++ 1 file changed, 2 insertions(+) --- a/fs/f2fs/file.c +++ b/fs/f2fs/file.c @@ -825,6 +825,8 @@ static bool f2fs_force_buffered_io(struc return true; if (f2fs_compressed_file(inode)) return true; + if (f2fs_has_inline_data(inode)) + return true; /* disallow direct IO if any of devices has unaligned blksize */ if (f2fs_is_multi_device(sbi) && !sbi->aligned_blksize) Patches currently in stable-queue which might be from chao@xxxxxxxxxx are queue-6.10/f2fs-fix-to-don-t-dirty-inode-for-readonly-filesystem.patch queue-6.10/erofs-fix-race-in-z_erofs_get_gbuf.patch queue-6.10/f2fs-fix-to-force-buffered-io-on-inline_data-inode.patch queue-6.10/f2fs-use-meta-inode-for-gc-of-cow-file.patch queue-6.10/hfs-fix-to-initialize-fields-of-hfs_inode_info-after-hfs_alloc_inode.patch queue-6.10/hfsplus-fix-to-avoid-false-alarm-of-circular-locking.patch queue-6.10/f2fs-fix-return-value-of-f2fs_convert_inline_inode.patch queue-6.10/f2fs-use-meta-inode-for-gc-of-atomic-file.patch