On 04/11, Chao Yu wrote: > Hi Jaegeuk, > > Could you please help to merge below cleanup diff into original patch? > or merge this separately if it is too late since it is near rc7.
I didn't review this tho, this gives an error in xfstests/083. > > From 5a342a8f332a1b3281ec0e2b4d41b5287689c8ed Mon Sep 17 00:00:00 2001 > From: Chao Yu <yuch...@huawei.com> > Date: Sun, 11 Apr 2021 14:29:34 +0800 > Subject: [PATCH] f2fs: avoid duplicated codes for cleanup > > f2fs_segment_has_free_slot() was copied from __next_free_blkoff(), > the main implementation of them is almost the same, clean up them to > reuse common code as much as possible. > > Signed-off-by: Chao Yu <yuch...@huawei.com> > --- > fs/f2fs/segment.c | 32 ++++++++++---------------------- > 1 file changed, 10 insertions(+), 22 deletions(-) > > diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c > index b33273aa5c22..bd9056165d62 100644 > --- a/fs/f2fs/segment.c > +++ b/fs/f2fs/segment.c > @@ -2627,22 +2627,20 @@ static void new_curseg(struct f2fs_sb_info *sbi, int > type, bool new_sec) > curseg->alloc_type = LFS; > } > > -static void __next_free_blkoff(struct f2fs_sb_info *sbi, > - struct curseg_info *seg, block_t start) > +static int __next_free_blkoff(struct f2fs_sb_info *sbi, > + int segno, block_t start) > { > - struct seg_entry *se = get_seg_entry(sbi, seg->segno); > + struct seg_entry *se = get_seg_entry(sbi, segno); > int entries = SIT_VBLOCK_MAP_SIZE / sizeof(unsigned long); > unsigned long *target_map = SIT_I(sbi)->tmp_map; > unsigned long *ckpt_map = (unsigned long *)se->ckpt_valid_map; > unsigned long *cur_map = (unsigned long *)se->cur_valid_map; > - int i, pos; > + int i; > > for (i = 0; i < entries; i++) > target_map[i] = ckpt_map[i] | cur_map[i]; > > - pos = __find_rev_next_zero_bit(target_map, sbi->blocks_per_seg, start); > - > - seg->next_blkoff = pos; > + return __find_rev_next_zero_bit(target_map, sbi->blocks_per_seg, start); > } > > /* > @@ -2654,26 +2652,16 @@ static void __refresh_next_blkoff(struct f2fs_sb_info > *sbi, > struct curseg_info *seg) > { > if (seg->alloc_type == SSR) > - __next_free_blkoff(sbi, seg, seg->next_blkoff + 1); > + seg->next_blkoff = > + __next_free_blkoff(sbi, seg->segno, > + seg->next_blkoff + 1); > else > seg->next_blkoff++; > } > > bool f2fs_segment_has_free_slot(struct f2fs_sb_info *sbi, int segno) > { > - struct seg_entry *se = get_seg_entry(sbi, segno); > - int entries = SIT_VBLOCK_MAP_SIZE / sizeof(unsigned long); > - unsigned long *target_map = SIT_I(sbi)->tmp_map; > - unsigned long *ckpt_map = (unsigned long *)se->ckpt_valid_map; > - unsigned long *cur_map = (unsigned long *)se->cur_valid_map; > - int i, pos; > - > - for (i = 0; i < entries; i++) > - target_map[i] = ckpt_map[i] | cur_map[i]; > - > - pos = __find_rev_next_zero_bit(target_map, sbi->blocks_per_seg, 0); > - > - return pos < sbi->blocks_per_seg; > + return __next_free_blkoff(sbi, segno, 0) < sbi->blocks_per_seg; > } > > /* > @@ -2701,7 +2689,7 @@ static void change_curseg(struct f2fs_sb_info *sbi, int > type, bool flush) > > reset_curseg(sbi, type, 1); > curseg->alloc_type = SSR; > - __next_free_blkoff(sbi, curseg, 0); > + __next_free_blkoff(sbi, curseg->segno, 0); > > sum_page = f2fs_get_sum_page(sbi, new_segno); > if (IS_ERR(sum_page)) { > -- > 2.22.1