|
|
@@ -2071,10 +2071,10 @@ static int f2fs_defragment_range(struct f2fs_sb_info *sbi,
|
|
|
struct f2fs_defragment *range)
|
|
|
{
|
|
|
struct inode *inode = file_inode(filp);
|
|
|
- struct f2fs_map_blocks map = { .m_next_pgofs = NULL,
|
|
|
- .m_next_extent = NULL, .m_seg_type = NO_CHECK_TYPE };
|
|
|
+ struct f2fs_map_blocks map = { .m_next_extent = NULL,
|
|
|
+ .m_seg_type = NO_CHECK_TYPE };
|
|
|
struct extent_info ei = {0,0,0};
|
|
|
- pgoff_t pg_start, pg_end;
|
|
|
+ pgoff_t pg_start, pg_end, next_pgofs;
|
|
|
unsigned int blk_per_seg = sbi->blocks_per_seg;
|
|
|
unsigned int total = 0, sec_num;
|
|
|
block_t blk_end = 0;
|
|
|
@@ -2108,6 +2108,7 @@ static int f2fs_defragment_range(struct f2fs_sb_info *sbi,
|
|
|
}
|
|
|
|
|
|
map.m_lblk = pg_start;
|
|
|
+ map.m_next_pgofs = &next_pgofs;
|
|
|
|
|
|
/*
|
|
|
* lookup mapping info in dnode page cache, skip defragmenting if all
|
|
|
@@ -2121,7 +2122,7 @@ static int f2fs_defragment_range(struct f2fs_sb_info *sbi,
|
|
|
goto out;
|
|
|
|
|
|
if (!(map.m_flags & F2FS_MAP_FLAGS)) {
|
|
|
- map.m_lblk++;
|
|
|
+ map.m_lblk = next_pgofs;
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
@@ -2166,7 +2167,7 @@ do_map:
|
|
|
goto clear_out;
|
|
|
|
|
|
if (!(map.m_flags & F2FS_MAP_FLAGS)) {
|
|
|
- map.m_lblk++;
|
|
|
+ map.m_lblk = next_pgofs;
|
|
|
continue;
|
|
|
}
|
|
|
|