summaryrefslogtreecommitdiffstats
path: root/fs/f2fs/segment.c
diff options
context:
space:
mode:
authorChao Yu <chao2.yu@samsung.com>2016-01-22 10:42:06 +0100
committerJaegeuk Kim <jaegeuk@kernel.org>2016-02-23 01:07:23 +0100
commit0ab143563198055bd45bbb511bb41f5968fdd8bd (patch)
tree42e889554c310fcd9da114845aaa0b972ea94d0e /fs/f2fs/segment.c
parentf2fs: export dirty_nats_ratio in sysfs (diff)
downloadlinux-0ab143563198055bd45bbb511bb41f5968fdd8bd.tar.xz
linux-0ab143563198055bd45bbb511bb41f5968fdd8bd.zip
f2fs: correct search area in get_new_segment
get_new_segment starts from current segment position, tries to search a free segment among its right neighbors locate in same section. But previously our search area was set as [current segment, max segment], which means we have to search to more bits in free_segmap bitmap for some worse cases. So here we correct the search area to [current segment, last segment in section] to avoid unnecessary searching. Signed-off-by: Chao Yu <chao2.yu@samsung.com> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Diffstat (limited to 'fs/f2fs/segment.c')
-rw-r--r--fs/f2fs/segment.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
index 53baf4a420dc..9e3276067526 100644
--- a/fs/f2fs/segment.c
+++ b/fs/f2fs/segment.c
@@ -874,9 +874,8 @@ static void get_new_segment(struct f2fs_sb_info *sbi,
if (!new_sec && ((*newseg + 1) % sbi->segs_per_sec)) {
segno = find_next_zero_bit(free_i->free_segmap,
- MAIN_SEGS(sbi), *newseg + 1);
- if (segno - *newseg < sbi->segs_per_sec -
- (*newseg % sbi->segs_per_sec))
+ (hint + 1) * sbi->segs_per_sec, *newseg + 1);
+ if (segno < (hint + 1) * sbi->segs_per_sec)
goto got_it;
}
find_other_zone: