Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4625d6aa authored by Changman Lee's avatar Changman Lee Committed by Jaegeuk Kim
Browse files

f2fs: remove unnecessary segment bitmap updates



Only one dirty type is set in __locate_dirty_segment and we can know
dirty type of segment. So we don't need to check other dirty types.

Signed-off-by: default avatarChangman Lee <cm224.lee@samsung.com>
Signed-off-by: default avatarJaegeuk Kim <jaegeuk.kim@samsung.com>
parent e943a10d
Loading
Loading
Loading
Loading
+8 −23
Original line number Diff line number Diff line
@@ -58,20 +58,10 @@ static void __locate_dirty_segment(struct f2fs_sb_info *sbi, unsigned int segno,

	if (dirty_type == DIRTY) {
		struct seg_entry *sentry = get_seg_entry(sbi, segno);
		enum dirty_type t = DIRTY_HOT_DATA;
		enum dirty_type t = sentry->type;

		dirty_type = sentry->type;

		if (!test_and_set_bit(segno, dirty_i->dirty_segmap[dirty_type]))
			dirty_i->nr_dirty[dirty_type]++;

		/* Only one bitmap should be set */
		for (; t <= DIRTY_COLD_NODE; t++) {
			if (t == dirty_type)
				continue;
			if (test_and_clear_bit(segno, dirty_i->dirty_segmap[t]))
				dirty_i->nr_dirty[t]--;
		}
		if (!test_and_set_bit(segno, dirty_i->dirty_segmap[t]))
			dirty_i->nr_dirty[t]++;
	}
}

@@ -84,16 +74,11 @@ static void __remove_dirty_segment(struct f2fs_sb_info *sbi, unsigned int segno,
		dirty_i->nr_dirty[dirty_type]--;

	if (dirty_type == DIRTY) {
		enum dirty_type t = DIRTY_HOT_DATA;
		struct seg_entry *sentry = get_seg_entry(sbi, segno);
		enum dirty_type t = sentry->type;

		/* clear its dirty bitmap */
		for (; t <= DIRTY_COLD_NODE; t++) {
			if (test_and_clear_bit(segno,
						dirty_i->dirty_segmap[t])) {
		if (test_and_clear_bit(segno, dirty_i->dirty_segmap[t]))
			dirty_i->nr_dirty[t]--;
				break;
			}
		}

		if (get_valid_blocks(sbi, segno, sbi->segs_per_sec) == 0)
			clear_bit(GET_SECNO(sbi, segno),