On 06/04, Sheng Yong wrote: > resize.f2fs (f2fs_defragment) tries to migrate blocks to new positions. > However, if a curseg is selected, and f2fs_defragment is broken by any > error, curseg->next_blkoff is left not updated. > > To avoid this, we skip cursegs when finding next free block.
Don't we update the curseg at the end of resize/defrag? > > Signed-off-by: Sheng Yong <shengyo...@huawei.com> > --- > fsck/f2fs.h | 5 +---- > fsck/fsck.c | 2 +- > fsck/mount.c | 8 +++----- > 3 files changed, 5 insertions(+), 10 deletions(-) > > diff --git a/fsck/f2fs.h b/fsck/f2fs.h > index d0e08aa..d216444 100644 > --- a/fsck/f2fs.h > +++ b/fsck/f2fs.h > @@ -380,16 +380,13 @@ static inline bool IS_VALID_BLK_ADDR(struct > f2fs_sb_info *sbi, u32 addr) > return 1; > } > > -static inline int IS_CUR_SEGNO(struct f2fs_sb_info *sbi, u32 segno, int type) > +static inline int IS_CUR_SEGNO(struct f2fs_sb_info *sbi, u32 segno) > { > int i; > > for (i = 0; i < NO_CHECK_TYPE; i++) { > struct curseg_info *curseg = CURSEG_I(sbi, i); > > - if (type == i) > - continue; > - > if (segno == curseg->segno) > return 1; > } > diff --git a/fsck/fsck.c b/fsck/fsck.c > index 5b6dbc8..8145199 100644 > --- a/fsck/fsck.c > +++ b/fsck/fsck.c > @@ -1741,7 +1741,7 @@ int fsck_chk_meta(struct f2fs_sb_info *sbi) > se = get_seg_entry(sbi, i); > if (se->valid_blocks != 0) > sit_valid_segs++; > - else if (IS_CUR_SEGNO(sbi, i, NO_CHECK_TYPE)) { > + else if (IS_CUR_SEGNO(sbi, i)) { > /* curseg has not been written back to device */ > MSG(1, "\tInfo: curseg %u is counted in valid segs\n", > i); > sit_valid_segs++; > diff --git a/fsck/mount.c b/fsck/mount.c > index 0a30adb..8d4704e 100644 > --- a/fsck/mount.c > +++ b/fsck/mount.c > @@ -35,8 +35,7 @@ u32 get_free_segments(struct f2fs_sb_info *sbi) > for (i = 0; i < TOTAL_SEGS(sbi); i++) { > struct seg_entry *se = get_seg_entry(sbi, i); > > - if (se->valid_blocks == 0x0 && > - !IS_CUR_SEGNO(sbi, i, NO_CHECK_TYPE)) > + if (se->valid_blocks == 0x0 && !IS_CUR_SEGNO(sbi, i)) > free_segs++; > } > return free_segs; > @@ -1891,8 +1890,7 @@ void flush_sit_entries(struct f2fs_sb_info *sbi) > se->valid_blocks); > rewrite_current_sit_page(sbi, segno, sit_blk); > > - if (se->valid_blocks == 0x0 && > - !IS_CUR_SEGNO(sbi, segno, NO_CHECK_TYPE)) > + if (se->valid_blocks == 0x0 && !IS_CUR_SEGNO(sbi, segno)) > free_segs++; > } > > @@ -1922,7 +1920,7 @@ int find_next_free_block(struct f2fs_sb_info *sbi, u64 > *to, int left, int type) > se = get_seg_entry(sbi, segno); > > if (se->valid_blocks == sbi->blocks_per_seg || > - IS_CUR_SEGNO(sbi, segno, type)) { > + IS_CUR_SEGNO(sbi, segno)) { > *to = left ? START_BLOCK(sbi, segno) - 1: > START_BLOCK(sbi, segno + 1); > continue; > -- > 2.17.0 ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ Linux-f2fs-devel mailing list Linux-f2fs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel