|
@@ -242,6 +242,16 @@ static unsigned int get_cb_cost(struct f2fs_sb_info *sbi, unsigned int segno)
|
|
|
return UINT_MAX - ((100 * (100 - u) * age) / (100 + u));
|
|
|
}
|
|
|
|
|
|
+static unsigned int get_greedy_cost(struct f2fs_sb_info *sbi,
|
|
|
+ unsigned int segno)
|
|
|
+{
|
|
|
+ unsigned int valid_blocks =
|
|
|
+ get_valid_blocks(sbi, segno, sbi->segs_per_sec);
|
|
|
+
|
|
|
+ return IS_DATASEG(get_seg_entry(sbi, segno)->type) ?
|
|
|
+ valid_blocks * 2 : valid_blocks;
|
|
|
+}
|
|
|
+
|
|
|
static inline unsigned int get_gc_cost(struct f2fs_sb_info *sbi,
|
|
|
unsigned int segno, struct victim_sel_policy *p)
|
|
|
{
|
|
@@ -250,7 +260,7 @@ static inline unsigned int get_gc_cost(struct f2fs_sb_info *sbi,
|
|
|
|
|
|
/* alloc_mode == LFS */
|
|
|
if (p->gc_mode == GC_GREEDY)
|
|
|
- return get_valid_blocks(sbi, segno, sbi->segs_per_sec);
|
|
|
+ return get_greedy_cost(sbi, segno);
|
|
|
else
|
|
|
return get_cb_cost(sbi, segno);
|
|
|
}
|