Commit b65ee148 authored by Chao Yu's avatar Chao Yu Committed by Jaegeuk Kim

f2fs: use for_each_set_bit to simplify the code

This patch uses for_each_set_bit to simplify some codes in f2fs.
Signed-off-by: default avatarChao Yu <chao2.yu@samsung.com>
Signed-off-by: default avatarJaegeuk Kim <jaegeuk@kernel.org>
parent 497a0930
...@@ -186,7 +186,6 @@ static unsigned int get_max_cost(struct f2fs_sb_info *sbi, ...@@ -186,7 +186,6 @@ static unsigned int get_max_cost(struct f2fs_sb_info *sbi,
static unsigned int check_bg_victims(struct f2fs_sb_info *sbi) static unsigned int check_bg_victims(struct f2fs_sb_info *sbi)
{ {
struct dirty_seglist_info *dirty_i = DIRTY_I(sbi); struct dirty_seglist_info *dirty_i = DIRTY_I(sbi);
unsigned int hint = 0;
unsigned int secno; unsigned int secno;
/* /*
...@@ -194,11 +193,9 @@ static unsigned int check_bg_victims(struct f2fs_sb_info *sbi) ...@@ -194,11 +193,9 @@ static unsigned int check_bg_victims(struct f2fs_sb_info *sbi)
* selected by background GC before. * selected by background GC before.
* Those segments guarantee they have small valid blocks. * Those segments guarantee they have small valid blocks.
*/ */
next: for_each_set_bit(secno, dirty_i->victim_secmap, TOTAL_SECS(sbi)) {
secno = find_next_bit(dirty_i->victim_secmap, TOTAL_SECS(sbi), hint++);
if (secno < TOTAL_SECS(sbi)) {
if (sec_usage_check(sbi, secno)) if (sec_usage_check(sbi, secno))
goto next; continue;
clear_bit(secno, dirty_i->victim_secmap); clear_bit(secno, dirty_i->victim_secmap);
return secno * sbi->segs_per_sec; return secno * sbi->segs_per_sec;
} }
......
...@@ -439,17 +439,12 @@ static void add_discard_addrs(struct f2fs_sb_info *sbi, ...@@ -439,17 +439,12 @@ static void add_discard_addrs(struct f2fs_sb_info *sbi,
static void set_prefree_as_free_segments(struct f2fs_sb_info *sbi) static void set_prefree_as_free_segments(struct f2fs_sb_info *sbi)
{ {
struct dirty_seglist_info *dirty_i = DIRTY_I(sbi); struct dirty_seglist_info *dirty_i = DIRTY_I(sbi);
unsigned int segno = -1; unsigned int segno;
unsigned int total_segs = TOTAL_SEGS(sbi); unsigned int total_segs = TOTAL_SEGS(sbi);
mutex_lock(&dirty_i->seglist_lock); mutex_lock(&dirty_i->seglist_lock);
while (1) { for_each_set_bit(segno, dirty_i->dirty_segmap[PRE], total_segs)
segno = find_next_bit(dirty_i->dirty_segmap[PRE], total_segs,
segno + 1);
if (segno >= total_segs)
break;
__set_test_and_free(sbi, segno); __set_test_and_free(sbi, segno);
}
mutex_unlock(&dirty_i->seglist_lock); mutex_unlock(&dirty_i->seglist_lock);
} }
...@@ -1531,7 +1526,7 @@ void flush_sit_entries(struct f2fs_sb_info *sbi) ...@@ -1531,7 +1526,7 @@ void flush_sit_entries(struct f2fs_sb_info *sbi)
struct page *page = NULL; struct page *page = NULL;
struct f2fs_sit_block *raw_sit = NULL; struct f2fs_sit_block *raw_sit = NULL;
unsigned int start = 0, end = 0; unsigned int start = 0, end = 0;
unsigned int segno = -1; unsigned int segno;
bool flushed; bool flushed;
mutex_lock(&curseg->curseg_mutex); mutex_lock(&curseg->curseg_mutex);
...@@ -1543,7 +1538,7 @@ void flush_sit_entries(struct f2fs_sb_info *sbi) ...@@ -1543,7 +1538,7 @@ void flush_sit_entries(struct f2fs_sb_info *sbi)
*/ */
flushed = flush_sits_in_journal(sbi); flushed = flush_sits_in_journal(sbi);
while ((segno = find_next_bit(bitmap, nsegs, segno + 1)) < nsegs) { for_each_set_bit(segno, bitmap, nsegs) {
struct seg_entry *se = get_seg_entry(sbi, segno); struct seg_entry *se = get_seg_entry(sbi, segno);
int sit_offset, offset; int sit_offset, offset;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment