mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 12:28:41 +08:00
f2fs: fix to adjust appropirate defragment pg_end
A length that exceeds the real size of the inode may be specified from user, although these out-of-range areas are not mapped, but they still need to be check in while loop, which is unnecessary. Signed-off-by: Zhiguo Niu <zhiguo.niu@unisoc.com> Reviewed-by: Chao Yu <chao@kernel.org> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
This commit is contained in:
parent
ac5eecf481
commit
197080156f
@ -2626,12 +2626,13 @@ static int f2fs_defragment_range(struct f2fs_sb_info *sbi,
|
||||
bool fragmented = false;
|
||||
int err;
|
||||
|
||||
pg_start = range->start >> PAGE_SHIFT;
|
||||
pg_end = (range->start + range->len) >> PAGE_SHIFT;
|
||||
|
||||
f2fs_balance_fs(sbi, true);
|
||||
|
||||
inode_lock(inode);
|
||||
pg_start = range->start >> PAGE_SHIFT;
|
||||
pg_end = min_t(pgoff_t,
|
||||
(range->start + range->len) >> PAGE_SHIFT,
|
||||
DIV_ROUND_UP(i_size_read(inode), PAGE_SIZE));
|
||||
|
||||
if (is_inode_flag_set(inode, FI_COMPRESS_RELEASED)) {
|
||||
err = -EINVAL;
|
||||
@ -2646,8 +2647,9 @@ static int f2fs_defragment_range(struct f2fs_sb_info *sbi,
|
||||
}
|
||||
|
||||
/* writeback all dirty pages in the range */
|
||||
err = filemap_write_and_wait_range(inode->i_mapping, range->start,
|
||||
range->start + range->len - 1);
|
||||
err = filemap_write_and_wait_range(inode->i_mapping,
|
||||
pg_start << PAGE_SHIFT,
|
||||
(pg_end << PAGE_SHIFT) - 1);
|
||||
if (err)
|
||||
goto out;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user