Loading Documentation/filesystems/f2fs.txt +2 −1 Original line number Diff line number Diff line Loading @@ -102,7 +102,8 @@ background_gc=%s Turn on/off cleaning operations, namely garbage collection, triggered in background when I/O subsystem is idle. If background_gc=on, it will turn on the garbage collection and if background_gc=off, garbage collection will be truned off. will be truned off. If background_gc=sync, it will turn on synchronous garbage collection running in background. Default value for this option is on. So garbage collection is on by default. disable_roll_forward Disable the roll-forward recovery routine Loading fs/f2fs/f2fs.h +1 −0 Original line number Diff line number Diff line Loading @@ -53,6 +53,7 @@ #define F2FS_MOUNT_NOBARRIER 0x00000800 #define F2FS_MOUNT_FASTBOOT 0x00001000 #define F2FS_MOUNT_EXTENT_CACHE 0x00002000 #define F2FS_MOUNT_FORCE_FG_GC 0x00004000 #define clear_opt(sbi, option) (sbi->mount_opt.opt &= ~F2FS_MOUNT_##option) #define set_opt(sbi, option) (sbi->mount_opt.opt |= F2FS_MOUNT_##option) Loading fs/f2fs/gc.c +1 −1 Original line number Diff line number Diff line Loading @@ -78,7 +78,7 @@ static int gc_thread_func(void *data) stat_inc_bggc_count(sbi); /* if return value is not zero, no victim was selected */ if (f2fs_gc(sbi, false)) if (f2fs_gc(sbi, test_opt(sbi, FORCE_FG_GC))) wait_ms = gc_th->no_gc_sleep_time; /* balancing f2fs's metadata periodically */ Loading fs/f2fs/segment.h +3 −1 Original line number Diff line number Diff line Loading @@ -137,10 +137,12 @@ enum { /* * BG_GC means the background cleaning job. * FG_GC means the on-demand cleaning job. * FORCE_FG_GC means on-demand cleaning job in background. */ enum { BG_GC = 0, FG_GC FG_GC, FORCE_FG_GC, }; /* for a function parameter to select a victim segment */ Loading fs/f2fs/super.c +15 −6 Original line number Diff line number Diff line Loading @@ -292,11 +292,16 @@ static int parse_options(struct super_block *sb, char *options) if (!name) return -ENOMEM; if (strlen(name) == 2 && !strncmp(name, "on", 2)) if (strlen(name) == 2 && !strncmp(name, "on", 2)) { set_opt(sbi, BG_GC); else if (strlen(name) == 3 && !strncmp(name, "off", 3)) clear_opt(sbi, FORCE_FG_GC); } else if (strlen(name) == 3 && !strncmp(name, "off", 3)) { clear_opt(sbi, BG_GC); else { clear_opt(sbi, FORCE_FG_GC); } else if (strlen(name) == 4 && !strncmp(name, "sync", 4)) { set_opt(sbi, BG_GC); set_opt(sbi, FORCE_FG_GC); } else { kfree(name); return -EINVAL; } Loading Loading @@ -631,10 +636,14 @@ static int f2fs_show_options(struct seq_file *seq, struct dentry *root) { struct f2fs_sb_info *sbi = F2FS_SB(root->d_sb); if (!f2fs_readonly(sbi->sb) && test_opt(sbi, BG_GC)) seq_printf(seq, ",background_gc=%s", "on"); if (!f2fs_readonly(sbi->sb) && test_opt(sbi, BG_GC)) { if (test_opt(sbi, FORCE_FG_GC)) seq_printf(seq, ",background_gc=%s", "sync"); else seq_printf(seq, ",background_gc=%s", "on"); } else { seq_printf(seq, ",background_gc=%s", "off"); } if (test_opt(sbi, DISABLE_ROLL_FORWARD)) seq_puts(seq, ",disable_roll_forward"); if (test_opt(sbi, DISCARD)) Loading Loading
Documentation/filesystems/f2fs.txt +2 −1 Original line number Diff line number Diff line Loading @@ -102,7 +102,8 @@ background_gc=%s Turn on/off cleaning operations, namely garbage collection, triggered in background when I/O subsystem is idle. If background_gc=on, it will turn on the garbage collection and if background_gc=off, garbage collection will be truned off. will be truned off. If background_gc=sync, it will turn on synchronous garbage collection running in background. Default value for this option is on. So garbage collection is on by default. disable_roll_forward Disable the roll-forward recovery routine Loading
fs/f2fs/f2fs.h +1 −0 Original line number Diff line number Diff line Loading @@ -53,6 +53,7 @@ #define F2FS_MOUNT_NOBARRIER 0x00000800 #define F2FS_MOUNT_FASTBOOT 0x00001000 #define F2FS_MOUNT_EXTENT_CACHE 0x00002000 #define F2FS_MOUNT_FORCE_FG_GC 0x00004000 #define clear_opt(sbi, option) (sbi->mount_opt.opt &= ~F2FS_MOUNT_##option) #define set_opt(sbi, option) (sbi->mount_opt.opt |= F2FS_MOUNT_##option) Loading
fs/f2fs/gc.c +1 −1 Original line number Diff line number Diff line Loading @@ -78,7 +78,7 @@ static int gc_thread_func(void *data) stat_inc_bggc_count(sbi); /* if return value is not zero, no victim was selected */ if (f2fs_gc(sbi, false)) if (f2fs_gc(sbi, test_opt(sbi, FORCE_FG_GC))) wait_ms = gc_th->no_gc_sleep_time; /* balancing f2fs's metadata periodically */ Loading
fs/f2fs/segment.h +3 −1 Original line number Diff line number Diff line Loading @@ -137,10 +137,12 @@ enum { /* * BG_GC means the background cleaning job. * FG_GC means the on-demand cleaning job. * FORCE_FG_GC means on-demand cleaning job in background. */ enum { BG_GC = 0, FG_GC FG_GC, FORCE_FG_GC, }; /* for a function parameter to select a victim segment */ Loading
fs/f2fs/super.c +15 −6 Original line number Diff line number Diff line Loading @@ -292,11 +292,16 @@ static int parse_options(struct super_block *sb, char *options) if (!name) return -ENOMEM; if (strlen(name) == 2 && !strncmp(name, "on", 2)) if (strlen(name) == 2 && !strncmp(name, "on", 2)) { set_opt(sbi, BG_GC); else if (strlen(name) == 3 && !strncmp(name, "off", 3)) clear_opt(sbi, FORCE_FG_GC); } else if (strlen(name) == 3 && !strncmp(name, "off", 3)) { clear_opt(sbi, BG_GC); else { clear_opt(sbi, FORCE_FG_GC); } else if (strlen(name) == 4 && !strncmp(name, "sync", 4)) { set_opt(sbi, BG_GC); set_opt(sbi, FORCE_FG_GC); } else { kfree(name); return -EINVAL; } Loading Loading @@ -631,10 +636,14 @@ static int f2fs_show_options(struct seq_file *seq, struct dentry *root) { struct f2fs_sb_info *sbi = F2FS_SB(root->d_sb); if (!f2fs_readonly(sbi->sb) && test_opt(sbi, BG_GC)) seq_printf(seq, ",background_gc=%s", "on"); if (!f2fs_readonly(sbi->sb) && test_opt(sbi, BG_GC)) { if (test_opt(sbi, FORCE_FG_GC)) seq_printf(seq, ",background_gc=%s", "sync"); else seq_printf(seq, ",background_gc=%s", "on"); } else { seq_printf(seq, ",background_gc=%s", "off"); } if (test_opt(sbi, DISABLE_ROLL_FORWARD)) seq_puts(seq, ",disable_roll_forward"); if (test_opt(sbi, DISCARD)) Loading