f2fs: introduce CP_TRIMMED_FLAG to avoid unneeded discard
Introduce CP_TRIMMED_FLAG to indicate all invalid block were trimmed before umount, so once we do mount with image which contain the flag, we don't record invalid blocks as undiscard one, when fstrim is being triggered, we can avoid issuing redundant discard commands. Signed-off-by: Chao Yu <yuchao0@huawei.com> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
This commit is contained in:
@@ -3005,10 +3005,17 @@ static void build_sit_entries(struct f2fs_sb_info *sbi)
|
||||
|
||||
/* build discard map only one time */
|
||||
if (f2fs_discard_en(sbi)) {
|
||||
memcpy(se->discard_map, se->cur_valid_map,
|
||||
SIT_VBLOCK_MAP_SIZE);
|
||||
sbi->discard_blks += sbi->blocks_per_seg -
|
||||
se->valid_blocks;
|
||||
if (is_set_ckpt_flags(sbi, CP_TRIMMED_FLAG)) {
|
||||
memset(se->discard_map, 0xff,
|
||||
SIT_VBLOCK_MAP_SIZE);
|
||||
} else {
|
||||
memcpy(se->discard_map,
|
||||
se->cur_valid_map,
|
||||
SIT_VBLOCK_MAP_SIZE);
|
||||
sbi->discard_blks +=
|
||||
sbi->blocks_per_seg -
|
||||
se->valid_blocks;
|
||||
}
|
||||
}
|
||||
|
||||
if (sbi->segs_per_sec > 1)
|
||||
@@ -3032,10 +3039,15 @@ static void build_sit_entries(struct f2fs_sb_info *sbi)
|
||||
seg_info_from_raw_sit(se, &sit);
|
||||
|
||||
if (f2fs_discard_en(sbi)) {
|
||||
memcpy(se->discard_map, se->cur_valid_map,
|
||||
SIT_VBLOCK_MAP_SIZE);
|
||||
sbi->discard_blks += old_valid_blocks -
|
||||
se->valid_blocks;
|
||||
if (is_set_ckpt_flags(sbi, CP_TRIMMED_FLAG)) {
|
||||
memset(se->discard_map, 0xff,
|
||||
SIT_VBLOCK_MAP_SIZE);
|
||||
} else {
|
||||
memcpy(se->discard_map, se->cur_valid_map,
|
||||
SIT_VBLOCK_MAP_SIZE);
|
||||
sbi->discard_blks += old_valid_blocks -
|
||||
se->valid_blocks;
|
||||
}
|
||||
}
|
||||
|
||||
if (sbi->segs_per_sec > 1)
|
||||
|
Reference in New Issue
Block a user