Loading fs/f2fs/gc.c +12 −6 Original line number Diff line number Diff line Loading @@ -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 */ Loading Loading @@ -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; Loading @@ -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; 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); Loading Loading @@ -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 Loading
fs/f2fs/gc.c +12 −6 Original line number Diff line number Diff line Loading @@ -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 */ Loading Loading @@ -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; Loading @@ -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; 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); Loading Loading @@ -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