mirror of
https://github.com/torvalds/linux.git
synced 2026-05-31 10:33:41 +02:00
f2fs: ignore valid ratio when free section count is low
Otherwise F2FS will not do GC in background in low free section. Signed-off-by: Daeho Jeong <daehojeong@google.com> Reviewed-by: Chao Yu <chao@kernel.org> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
This commit is contained in:
parent
f0a7adfedc
commit
e6d5e789c3
18
fs/f2fs/gc.c
18
fs/f2fs/gc.c
|
|
@ -384,14 +384,15 @@ static unsigned int get_cb_cost(struct f2fs_sb_info *sbi, unsigned int segno)
|
|||
}
|
||||
|
||||
static inline unsigned int get_gc_cost(struct f2fs_sb_info *sbi,
|
||||
unsigned int segno, struct victim_sel_policy *p)
|
||||
unsigned int segno, struct victim_sel_policy *p,
|
||||
unsigned int valid_thresh_ratio)
|
||||
{
|
||||
if (p->alloc_mode == SSR)
|
||||
return get_seg_entry(sbi, segno)->ckpt_valid_blocks;
|
||||
|
||||
if (p->one_time_gc && (get_valid_blocks(sbi, segno, true) >=
|
||||
CAP_BLKS_PER_SEC(sbi) * sbi->gc_thread->valid_thresh_ratio /
|
||||
100))
|
||||
if (p->one_time_gc && (valid_thresh_ratio < 100) &&
|
||||
(get_valid_blocks(sbi, segno, true) >=
|
||||
CAP_BLKS_PER_SEC(sbi) * valid_thresh_ratio / 100))
|
||||
return UINT_MAX;
|
||||
|
||||
/* alloc_mode == LFS */
|
||||
|
|
@ -772,6 +773,7 @@ int f2fs_get_victim(struct f2fs_sb_info *sbi, unsigned int *result,
|
|||
unsigned int secno, last_victim;
|
||||
unsigned int last_segment;
|
||||
unsigned int nsearched;
|
||||
unsigned int valid_thresh_ratio = 100;
|
||||
bool is_atgc;
|
||||
int ret = 0;
|
||||
|
||||
|
|
@ -781,7 +783,11 @@ int f2fs_get_victim(struct f2fs_sb_info *sbi, unsigned int *result,
|
|||
p.alloc_mode = alloc_mode;
|
||||
p.age = age;
|
||||
p.age_threshold = sbi->am.age_threshold;
|
||||
p.one_time_gc = one_time;
|
||||
if (one_time) {
|
||||
p.one_time_gc = one_time;
|
||||
if (has_enough_free_secs(sbi, 0, NR_PERSISTENT_LOG))
|
||||
valid_thresh_ratio = sbi->gc_thread->valid_thresh_ratio;
|
||||
}
|
||||
|
||||
retry:
|
||||
select_policy(sbi, gc_type, type, &p);
|
||||
|
|
@ -907,7 +913,7 @@ int f2fs_get_victim(struct f2fs_sb_info *sbi, unsigned int *result,
|
|||
goto next;
|
||||
}
|
||||
|
||||
cost = get_gc_cost(sbi, segno, &p);
|
||||
cost = get_gc_cost(sbi, segno, &p, valid_thresh_ratio);
|
||||
|
||||
if (p.min_cost > cost) {
|
||||
p.min_segno = segno;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user