f2fs: introduce gc_mode sysfs node
Revert "f2fs: make gc_urgent and gc_segment_mode sysfs node readable". Add a gc_mode sysfs node to show the current gc_mode as a string. Signed-off-by: Yangtao Li <frank.li@vivo.com> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
This commit is contained in:
parent
7b02b22018
commit
a3951cd199
|
@ -640,3 +640,9 @@ Date: July 2022
|
||||||
Contact: "Daeho Jeong" <daehojeong@google.com>
|
Contact: "Daeho Jeong" <daehojeong@google.com>
|
||||||
Description: Show the accumulated total revoked atomic write block count after boot.
|
Description: Show the accumulated total revoked atomic write block count after boot.
|
||||||
If you write "0" here, you can initialize to "0".
|
If you write "0" here, you can initialize to "0".
|
||||||
|
|
||||||
|
What: /sys/fs/f2fs/<disk>/gc_mode
|
||||||
|
Date: October 2022
|
||||||
|
Contact: "Yangtao Li" <frank.li@vivo.com>
|
||||||
|
Description: Show the current gc_mode as a string.
|
||||||
|
This is a read-only entry.
|
||||||
|
|
|
@ -1319,6 +1319,7 @@ enum {
|
||||||
MAX_TIME,
|
MAX_TIME,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Note that you need to keep synchronization with this gc_mode_names array */
|
||||||
enum {
|
enum {
|
||||||
GC_NORMAL,
|
GC_NORMAL,
|
||||||
GC_IDLE_CB,
|
GC_IDLE_CB,
|
||||||
|
|
|
@ -143,6 +143,12 @@ static ssize_t pending_discard_show(struct f2fs_attr *a,
|
||||||
&SM_I(sbi)->dcc_info->discard_cmd_cnt));
|
&SM_I(sbi)->dcc_info->discard_cmd_cnt));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static ssize_t gc_mode_show(struct f2fs_attr *a,
|
||||||
|
struct f2fs_sb_info *sbi, char *buf)
|
||||||
|
{
|
||||||
|
return sysfs_emit(buf, "%s\n", gc_mode_names[sbi->gc_mode]);
|
||||||
|
}
|
||||||
|
|
||||||
static ssize_t features_show(struct f2fs_attr *a,
|
static ssize_t features_show(struct f2fs_attr *a,
|
||||||
struct f2fs_sb_info *sbi, char *buf)
|
struct f2fs_sb_info *sbi, char *buf)
|
||||||
{
|
{
|
||||||
|
@ -332,13 +338,8 @@ static ssize_t f2fs_sbi_show(struct f2fs_attr *a,
|
||||||
return sysfs_emit(buf, "%u\n", sbi->compr_new_inode);
|
return sysfs_emit(buf, "%u\n", sbi->compr_new_inode);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (!strcmp(a->attr.name, "gc_urgent"))
|
|
||||||
return sysfs_emit(buf, "%s\n",
|
|
||||||
gc_mode_names[sbi->gc_mode]);
|
|
||||||
|
|
||||||
if (!strcmp(a->attr.name, "gc_segment_mode"))
|
if (!strcmp(a->attr.name, "gc_segment_mode"))
|
||||||
return sysfs_emit(buf, "%s\n",
|
return sysfs_emit(buf, "%u\n", sbi->gc_segment_mode);
|
||||||
gc_mode_names[sbi->gc_segment_mode]);
|
|
||||||
|
|
||||||
if (!strcmp(a->attr.name, "gc_reclaimed_segments")) {
|
if (!strcmp(a->attr.name, "gc_reclaimed_segments")) {
|
||||||
return sysfs_emit(buf, "%u\n",
|
return sysfs_emit(buf, "%u\n",
|
||||||
|
@ -844,6 +845,7 @@ F2FS_GENERAL_RO_ATTR(encoding);
|
||||||
F2FS_GENERAL_RO_ATTR(mounted_time_sec);
|
F2FS_GENERAL_RO_ATTR(mounted_time_sec);
|
||||||
F2FS_GENERAL_RO_ATTR(main_blkaddr);
|
F2FS_GENERAL_RO_ATTR(main_blkaddr);
|
||||||
F2FS_GENERAL_RO_ATTR(pending_discard);
|
F2FS_GENERAL_RO_ATTR(pending_discard);
|
||||||
|
F2FS_GENERAL_RO_ATTR(gc_mode);
|
||||||
#ifdef CONFIG_F2FS_STAT_FS
|
#ifdef CONFIG_F2FS_STAT_FS
|
||||||
F2FS_STAT_ATTR(STAT_INFO, f2fs_stat_info, cp_foreground_calls, cp_count);
|
F2FS_STAT_ATTR(STAT_INFO, f2fs_stat_info, cp_foreground_calls, cp_count);
|
||||||
F2FS_STAT_ATTR(STAT_INFO, f2fs_stat_info, cp_background_calls, bg_cp_count);
|
F2FS_STAT_ATTR(STAT_INFO, f2fs_stat_info, cp_background_calls, bg_cp_count);
|
||||||
|
@ -926,6 +928,7 @@ static struct attribute *f2fs_attrs[] = {
|
||||||
ATTR_LIST(discard_granularity),
|
ATTR_LIST(discard_granularity),
|
||||||
ATTR_LIST(max_ordered_discard),
|
ATTR_LIST(max_ordered_discard),
|
||||||
ATTR_LIST(pending_discard),
|
ATTR_LIST(pending_discard),
|
||||||
|
ATTR_LIST(gc_mode),
|
||||||
ATTR_LIST(ipu_policy),
|
ATTR_LIST(ipu_policy),
|
||||||
ATTR_LIST(min_ipu_util),
|
ATTR_LIST(min_ipu_util),
|
||||||
ATTR_LIST(min_fsync_blocks),
|
ATTR_LIST(min_fsync_blocks),
|
||||||
|
|
Loading…
Reference in New Issue