Browse Source

f2fs: skip searching dirty map if dirty segment is not exist

When searching victim during gc, if there are no dirty segments in
filesystem, we will still take the time to search the whole dirty segment
map, it's not needed, it's better to skip in this condition.

Signed-off-by: Chao Yu <chao2.yu@samsung.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Chao Yu 9 years ago
parent
commit
3342bb303b
1 changed files with 4 additions and 0 deletions
  1. 4 0
      fs/f2fs/gc.c

+ 4 - 0
fs/f2fs/gc.c

@@ -268,6 +268,9 @@ static int get_victim_by_default(struct f2fs_sb_info *sbi,
 	p.min_segno = NULL_SEGNO;
 	p.min_segno = NULL_SEGNO;
 	p.min_cost = max_cost = get_max_cost(sbi, &p);
 	p.min_cost = max_cost = get_max_cost(sbi, &p);
 
 
+	if (p.max_search == 0)
+		goto out;
+
 	if (p.alloc_mode == LFS && gc_type == FG_GC) {
 	if (p.alloc_mode == LFS && gc_type == FG_GC) {
 		p.min_segno = check_bg_victims(sbi);
 		p.min_segno = check_bg_victims(sbi);
 		if (p.min_segno != NULL_SEGNO)
 		if (p.min_segno != NULL_SEGNO)
@@ -329,6 +332,7 @@ got_it:
 				sbi->cur_victim_sec,
 				sbi->cur_victim_sec,
 				prefree_segments(sbi), free_segments(sbi));
 				prefree_segments(sbi), free_segments(sbi));
 	}
 	}
+out:
 	mutex_unlock(&dirty_i->seglist_lock);
 	mutex_unlock(&dirty_i->seglist_lock);
 
 
 	return (p.min_segno == NULL_SEGNO) ? 0 : 1;
 	return (p.min_segno == NULL_SEGNO) ? 0 : 1;