Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4ce53776 authored by Jaegeuk Kim's avatar Jaegeuk Kim
Browse files

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: default avatarJaegeuk Kim <jaegeuk@kernel.org>
parent 8060656a
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -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;
		}
	}