mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-28 06:34:12 +08:00
f2fs: enable atgc dynamically if conditions are met
Now atgc can only be enabled when umounted->mounted device even related conditions have reached. If the device has not be umounted->mounted for a long time, atgc can not work. So enable atgc dynamically when atgc_age_threshold is less than elapsed_time and ATGC mount option is on. Signed-off-by: Chao Yu <chao@kernel.org> Signed-off-by: Zhiguo Niu <zhiguo.niu@unisoc.com> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
This commit is contained in:
parent
298b1e4182
commit
6efc3a05e6
@ -1718,6 +1718,7 @@ int f2fs_write_checkpoint(struct f2fs_sb_info *sbi, struct cp_control *cpc)
|
||||
}
|
||||
|
||||
f2fs_restore_inmem_curseg(sbi);
|
||||
f2fs_reinit_atgc_curseg(sbi);
|
||||
stat_inc_cp_count(sbi);
|
||||
stop:
|
||||
unblock_operations(sbi);
|
||||
|
@ -3693,6 +3693,7 @@ void f2fs_release_discard_addrs(struct f2fs_sb_info *sbi);
|
||||
int f2fs_npages_for_summary_flush(struct f2fs_sb_info *sbi, bool for_ra);
|
||||
bool f2fs_segment_has_free_slot(struct f2fs_sb_info *sbi, int segno);
|
||||
int f2fs_init_inmem_curseg(struct f2fs_sb_info *sbi);
|
||||
int f2fs_reinit_atgc_curseg(struct f2fs_sb_info *sbi);
|
||||
void f2fs_save_inmem_curseg(struct f2fs_sb_info *sbi);
|
||||
void f2fs_restore_inmem_curseg(struct f2fs_sb_info *sbi);
|
||||
int f2fs_allocate_segment_for_resize(struct f2fs_sb_info *sbi, int type,
|
||||
|
@ -2931,12 +2931,12 @@ static int get_atssr_segment(struct f2fs_sb_info *sbi, int type,
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int __f2fs_init_atgc_curseg(struct f2fs_sb_info *sbi)
|
||||
static int __f2fs_init_atgc_curseg(struct f2fs_sb_info *sbi, bool force)
|
||||
{
|
||||
struct curseg_info *curseg = CURSEG_I(sbi, CURSEG_ALL_DATA_ATGC);
|
||||
int ret = 0;
|
||||
|
||||
if (!sbi->am.atgc_enabled)
|
||||
if (!sbi->am.atgc_enabled && !force)
|
||||
return 0;
|
||||
|
||||
f2fs_down_read(&SM_I(sbi)->curseg_lock);
|
||||
@ -2953,9 +2953,30 @@ static int __f2fs_init_atgc_curseg(struct f2fs_sb_info *sbi)
|
||||
f2fs_up_read(&SM_I(sbi)->curseg_lock);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int f2fs_init_inmem_curseg(struct f2fs_sb_info *sbi)
|
||||
{
|
||||
return __f2fs_init_atgc_curseg(sbi);
|
||||
return __f2fs_init_atgc_curseg(sbi, false);
|
||||
}
|
||||
|
||||
int f2fs_reinit_atgc_curseg(struct f2fs_sb_info *sbi)
|
||||
{
|
||||
int ret;
|
||||
|
||||
if (!test_opt(sbi, ATGC))
|
||||
return 0;
|
||||
if (sbi->am.atgc_enabled)
|
||||
return 0;
|
||||
if (le64_to_cpu(F2FS_CKPT(sbi)->elapsed_time) <
|
||||
sbi->am.age_threshold)
|
||||
return 0;
|
||||
|
||||
ret = __f2fs_init_atgc_curseg(sbi, true);
|
||||
if (!ret) {
|
||||
sbi->am.atgc_enabled = true;
|
||||
f2fs_info(sbi, "reenabled age threshold GC");
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void __f2fs_save_inmem_curseg(struct f2fs_sb_info *sbi, int type)
|
||||
|
Loading…
Reference in New Issue
Block a user