mirror of
https://github.com/torvalds/linux.git
synced 2026-06-03 03:53:37 +02:00
f2fs:Fix incomplete search range in f2fs_get_victim when f2fs_need_rand_seg is enabled
During the f2fs_get_victim process, when the f2fs_need_rand_seg is enabled in select_policy, p->offset is a random value, and the search range is from p->offset to MAIN_SECS. When segno >= last_segment, the loop breaks and exits directly without searching the range from 0 to p->offset.This results in an incomplete search when the random offset is not zero. Signed-off-by: liujinbao1 <liujinbao1@xiaomi.com> Reviewed-by: Chao Yu <chao@kernel.org> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
This commit is contained in:
parent
3cf11e6f36
commit
5604129b65
|
|
@ -316,10 +316,11 @@ static void select_policy(struct f2fs_sb_info *sbi, int gc_type,
|
|||
p->max_search = sbi->max_victim_search;
|
||||
|
||||
/* let's select beginning hot/small space first. */
|
||||
if (f2fs_need_rand_seg(sbi))
|
||||
if (f2fs_need_rand_seg(sbi)) {
|
||||
p->offset = get_random_u32_below(MAIN_SECS(sbi) *
|
||||
SEGS_PER_SEC(sbi));
|
||||
else if (type == CURSEG_HOT_DATA || IS_NODESEG(type))
|
||||
SIT_I(sbi)->last_victim[p->gc_mode] = p->offset;
|
||||
} else if (type == CURSEG_HOT_DATA || IS_NODESEG(type))
|
||||
p->offset = 0;
|
||||
else
|
||||
p->offset = SIT_I(sbi)->last_victim[p->gc_mode];
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user