f2fs: fix to migrate blocks correctly during defragment
During defragment, we missed to trigger fragmented blocks migration for below condition: In defragment region: - total number of valid blocks is smaller than 512; - the tail part of the region are all holes; In addtion, return zero to user via range->len if there is no fragmented blocks. Signed-off-by: Chao Yu <yuchao0@huawei.com> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
This commit is contained in:
parent
33ac18a15c
commit
d3a1a0e1bf
|
@ -2383,8 +2383,10 @@ static int f2fs_defragment_range(struct f2fs_sb_info *sbi,
|
|||
map.m_lblk += map.m_len;
|
||||
}
|
||||
|
||||
if (!fragmented)
|
||||
if (!fragmented) {
|
||||
total = 0;
|
||||
goto out;
|
||||
}
|
||||
|
||||
sec_num = DIV_ROUND_UP(total, BLKS_PER_SEC(sbi));
|
||||
|
||||
|
@ -2414,7 +2416,7 @@ do_map:
|
|||
|
||||
if (!(map.m_flags & F2FS_MAP_FLAGS)) {
|
||||
map.m_lblk = next_pgofs;
|
||||
continue;
|
||||
goto check;
|
||||
}
|
||||
|
||||
set_inode_flag(inode, FI_DO_DEFRAG);
|
||||
|
@ -2438,8 +2440,8 @@ do_map:
|
|||
}
|
||||
|
||||
map.m_lblk = idx;
|
||||
|
||||
if (idx < pg_end && cnt < blk_per_seg)
|
||||
check:
|
||||
if (map.m_lblk < pg_end && cnt < blk_per_seg)
|
||||
goto do_map;
|
||||
|
||||
clear_inode_flag(inode, FI_DO_DEFRAG);
|
||||
|
|
Loading…
Reference in New Issue