[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20230504185238.19488-1-frank.li@vivo.com>
Date: Fri, 5 May 2023 02:52:38 +0800
From: Yangtao Li <frank.li@...o.com>
To: Jaegeuk Kim <jaegeuk@...nel.org>, Chao Yu <chao@...nel.org>
Cc: Yangtao Li <frank.li@...o.com>,
linux-f2fs-devel@...ts.sourceforge.net,
linux-kernel@...r.kernel.org
Subject: [PATCH] f2fs: fix to call invalidate_mapping_pages in f2fs_move_file_range
In the following scenario, after executing the move_range ioctl syscall,
the block size of the source file is 0, but data can still be read.
# stat test
File: test
Size: 6 Blocks: 8 IO Block: 4096 regular file
# ./new_f2fs_io move_range test test_move_range 0 0 0
move range ret=0
# stat test
File: test
Size: 6 Blocks: 0 IO Block: 4096 regular file
# cat test
nihao
Let's fix to call invalidate_mapping_pages() after __exchange_data_block()
success.
Fixes: 4dd6f977fc77 ("f2fs: support an ioctl to move a range of data blocks")
Signed-off-by: Yangtao Li <frank.li@...o.com>
---
fs/f2fs/file.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
index 78aa8cff4b41..ae7752c5cd0a 100644
--- a/fs/f2fs/file.c
+++ b/fs/f2fs/file.c
@@ -2870,6 +2870,9 @@ static int f2fs_move_file_range(struct file *file_in, loff_t pos_in,
f2fs_i_size_write(dst, dst_max_i_size);
else if (dst_osize != dst->i_size)
f2fs_i_size_write(dst, dst_osize);
+
+ invalidate_mapping_pages(src->i_mapping,
+ pos_out, pos_in + len);
}
f2fs_unlock_op(sbi);
--
2.39.0
Powered by blists - more mailing lists