forked from Minki/linux
f2fs: remain last victim segment number ascending order
This patch avoids to remain inefficient victim segment number selected by a victim. For example, if all the dirty segments has same valid blocks, we can get the victim segments descending order due to keeping wrong last segment number. Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
This commit is contained in:
parent
8060656aa3
commit
4ce537763e
@ -270,7 +270,7 @@ static int get_victim_by_default(struct f2fs_sb_info *sbi,
|
||||
{
|
||||
struct dirty_seglist_info *dirty_i = DIRTY_I(sbi);
|
||||
struct victim_sel_policy p;
|
||||
unsigned int secno, max_cost;
|
||||
unsigned int secno, max_cost, last_victim;
|
||||
unsigned int last_segment = MAIN_SEGS(sbi);
|
||||
unsigned int nsearched = 0;
|
||||
|
||||
@ -285,6 +285,7 @@ static int get_victim_by_default(struct f2fs_sb_info *sbi,
|
||||
if (p.max_search == 0)
|
||||
goto out;
|
||||
|
||||
last_victim = sbi->last_victim[p.gc_mode];
|
||||
if (p.alloc_mode == LFS && gc_type == FG_GC) {
|
||||
p.min_segno = check_bg_victims(sbi);
|
||||
if (p.min_segno != NULL_SEGNO)
|
||||
@ -332,7 +333,10 @@ static int get_victim_by_default(struct f2fs_sb_info *sbi,
|
||||
}
|
||||
next:
|
||||
if (nsearched >= p.max_search) {
|
||||
sbi->last_victim[p.gc_mode] = segno;
|
||||
if (!sbi->last_victim[p.gc_mode] && segno <= last_victim)
|
||||
sbi->last_victim[p.gc_mode] = last_victim + 1;
|
||||
else
|
||||
sbi->last_victim[p.gc_mode] = segno + 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user