The current pending_discard attr just only shows the discard_cmd_cnt
information. More discard status can be shown so that we can check
them through sysfs when needed.
Signed-off-by: Zhiguo Niu <[email protected]>
---
changes of v2: Improve the patch according to Chao's suggestions.
changes of v3: Add a blank line for easy reading.
changes of v4: Split to three entries
---
---
Documentation/ABI/testing/sysfs-fs-f2fs | 15 +++++++++++++++
fs/f2fs/sysfs.c | 33 +++++++++++++++++++++++++++++++++
2 files changed, 48 insertions(+)
diff --git a/Documentation/ABI/testing/sysfs-fs-f2fs b/Documentation/ABI/testing/sysfs-fs-f2fs
index 4f1d4e6..606a298 100644
--- a/Documentation/ABI/testing/sysfs-fs-f2fs
+++ b/Documentation/ABI/testing/sysfs-fs-f2fs
@@ -159,6 +159,21 @@ Date: November 2021
Contact: "Jaegeuk Kim" <[email protected]>
Description: Shows the number of pending discard commands in the queue.
+What: /sys/fs/f2fs/<disk>/issued_discard
+Date: December 2023
+Contact: "Zhiguo Niu" <[email protected]>
+Description: Shows the number of issued discard.
+
+What: /sys/fs/f2fs/<disk>/queued_discard
+Date: December 2023
+Contact: "Zhiguo Niu" <[email protected]>
+Description: Shows the number of queued discard.
+
+What: /sys/fs/f2fs/<disk>/undiscard_blks
+Date: December 2023
+Contact: "Zhiguo Niu" <[email protected]>
+Description: Shows the total number of undiscard blocks.
+
What: /sys/fs/f2fs/<disk>/max_victim_search
Date: January 2014
Contact: "Jaegeuk Kim" <[email protected]>
diff --git a/fs/f2fs/sysfs.c b/fs/f2fs/sysfs.c
index 7099ffa..666efdd 100644
--- a/fs/f2fs/sysfs.c
+++ b/fs/f2fs/sysfs.c
@@ -143,6 +143,33 @@ static ssize_t pending_discard_show(struct f2fs_attr *a,
&SM_I(sbi)->dcc_info->discard_cmd_cnt));
}
+static ssize_t issued_discard_show(struct f2fs_attr *a,
+ struct f2fs_sb_info *sbi, char *buf)
+{
+ if (!SM_I(sbi)->dcc_info)
+ return -EINVAL;
+ return sysfs_emit(buf, "%llu\n", (unsigned long long)atomic_read(
+ &SM_I(sbi)->dcc_info->issued_discard));
+}
+
+static ssize_t queued_discard_show(struct f2fs_attr *a,
+ struct f2fs_sb_info *sbi, char *buf)
+{
+ if (!SM_I(sbi)->dcc_info)
+ return -EINVAL;
+ return sysfs_emit(buf, "%llu\n", (unsigned long long)atomic_read(
+ &SM_I(sbi)->dcc_info->queued_discard));
+}
+
+static ssize_t undiscard_blks_show(struct f2fs_attr *a,
+ struct f2fs_sb_info *sbi, char *buf)
+{
+ if (!SM_I(sbi)->dcc_info)
+ return -EINVAL;
+ return sysfs_emit(buf, "%u\n",
+ SM_I(sbi)->dcc_info->undiscard_blks);
+}
+
static ssize_t gc_mode_show(struct f2fs_attr *a,
struct f2fs_sb_info *sbi, char *buf)
{
@@ -1025,6 +1052,9 @@ static ssize_t f2fs_sb_feature_show(struct f2fs_attr *a,
F2FS_GENERAL_RO_ATTR(mounted_time_sec);
F2FS_GENERAL_RO_ATTR(main_blkaddr);
F2FS_GENERAL_RO_ATTR(pending_discard);
+F2FS_GENERAL_RO_ATTR(issued_discard);
+F2FS_GENERAL_RO_ATTR(queued_discard);
+F2FS_GENERAL_RO_ATTR(undiscard_blks);
F2FS_GENERAL_RO_ATTR(gc_mode);
#ifdef CONFIG_F2FS_STAT_FS
F2FS_GENERAL_RO_ATTR(moved_blocks_background);
@@ -1084,6 +1114,9 @@ static ssize_t f2fs_sb_feature_show(struct f2fs_attr *a,
ATTR_LIST(max_ordered_discard),
ATTR_LIST(discard_io_aware),
ATTR_LIST(pending_discard),
+ ATTR_LIST(issued_discard),
+ ATTR_LIST(queued_discard),
+ ATTR_LIST(undiscard_blks),
ATTR_LIST(gc_mode),
ATTR_LIST(ipu_policy),
ATTR_LIST(min_ipu_util),
--
1.9.1
On 2023/12/19 10:21, Zhiguo Niu wrote:
> The current pending_discard attr just only shows the discard_cmd_cnt
> information. More discard status can be shown so that we can check
> them through sysfs when needed.
>
> Signed-off-by: Zhiguo Niu <[email protected]>
> ---
> changes of v2: Improve the patch according to Chao's suggestions.
> changes of v3: Add a blank line for easy reading.
> changes of v4: Split to three entries
> ---
> ---
> Documentation/ABI/testing/sysfs-fs-f2fs | 15 +++++++++++++++
> fs/f2fs/sysfs.c | 33 +++++++++++++++++++++++++++++++++
> 2 files changed, 48 insertions(+)
>
> diff --git a/Documentation/ABI/testing/sysfs-fs-f2fs b/Documentation/ABI/testing/sysfs-fs-f2fs
> index 4f1d4e6..606a298 100644
> --- a/Documentation/ABI/testing/sysfs-fs-f2fs
> +++ b/Documentation/ABI/testing/sysfs-fs-f2fs
> @@ -159,6 +159,21 @@ Date: November 2021
> Contact: "Jaegeuk Kim" <[email protected]>
> Description: Shows the number of pending discard commands in the queue.
>
> +What: /sys/fs/f2fs/<disk>/issued_discard
Add them to /sys/fs/f2fs/<disk>/stat/?
Thanks,
> +Date: December 2023
> +Contact: "Zhiguo Niu" <[email protected]>
> +Description: Shows the number of issued discard.
> +
> +What: /sys/fs/f2fs/<disk>/queued_discard
> +Date: December 2023
> +Contact: "Zhiguo Niu" <[email protected]>
> +Description: Shows the number of queued discard.
> +
> +What: /sys/fs/f2fs/<disk>/undiscard_blks
> +Date: December 2023
> +Contact: "Zhiguo Niu" <[email protected]>
> +Description: Shows the total number of undiscard blocks.
> +
> What: /sys/fs/f2fs/<disk>/max_victim_search
> Date: January 2014
> Contact: "Jaegeuk Kim" <[email protected]>
> diff --git a/fs/f2fs/sysfs.c b/fs/f2fs/sysfs.c
> index 7099ffa..666efdd 100644
> --- a/fs/f2fs/sysfs.c
> +++ b/fs/f2fs/sysfs.c
> @@ -143,6 +143,33 @@ static ssize_t pending_discard_show(struct f2fs_attr *a,
> &SM_I(sbi)->dcc_info->discard_cmd_cnt));
> }
>
> +static ssize_t issued_discard_show(struct f2fs_attr *a,
> + struct f2fs_sb_info *sbi, char *buf)
> +{
> + if (!SM_I(sbi)->dcc_info)
> + return -EINVAL;
> + return sysfs_emit(buf, "%llu\n", (unsigned long long)atomic_read(
> + &SM_I(sbi)->dcc_info->issued_discard));
> +}
> +
> +static ssize_t queued_discard_show(struct f2fs_attr *a,
> + struct f2fs_sb_info *sbi, char *buf)
> +{
> + if (!SM_I(sbi)->dcc_info)
> + return -EINVAL;
> + return sysfs_emit(buf, "%llu\n", (unsigned long long)atomic_read(
> + &SM_I(sbi)->dcc_info->queued_discard));
> +}
> +
> +static ssize_t undiscard_blks_show(struct f2fs_attr *a,
> + struct f2fs_sb_info *sbi, char *buf)
> +{
> + if (!SM_I(sbi)->dcc_info)
> + return -EINVAL;
> + return sysfs_emit(buf, "%u\n",
> + SM_I(sbi)->dcc_info->undiscard_blks);
> +}
> +
> static ssize_t gc_mode_show(struct f2fs_attr *a,
> struct f2fs_sb_info *sbi, char *buf)
> {
> @@ -1025,6 +1052,9 @@ static ssize_t f2fs_sb_feature_show(struct f2fs_attr *a,
> F2FS_GENERAL_RO_ATTR(mounted_time_sec);
> F2FS_GENERAL_RO_ATTR(main_blkaddr);
> F2FS_GENERAL_RO_ATTR(pending_discard);
> +F2FS_GENERAL_RO_ATTR(issued_discard);
> +F2FS_GENERAL_RO_ATTR(queued_discard);
> +F2FS_GENERAL_RO_ATTR(undiscard_blks);
> F2FS_GENERAL_RO_ATTR(gc_mode);
> #ifdef CONFIG_F2FS_STAT_FS
> F2FS_GENERAL_RO_ATTR(moved_blocks_background);
> @@ -1084,6 +1114,9 @@ static ssize_t f2fs_sb_feature_show(struct f2fs_attr *a,
> ATTR_LIST(max_ordered_discard),
> ATTR_LIST(discard_io_aware),
> ATTR_LIST(pending_discard),
> + ATTR_LIST(issued_discard),
> + ATTR_LIST(queued_discard),
> + ATTR_LIST(undiscard_blks),
> ATTR_LIST(gc_mode),
> ATTR_LIST(ipu_policy),
> ATTR_LIST(min_ipu_util),
On Tue, Dec 19, 2023 at 12:00 PM Chao Yu <[email protected]> wrote:
>
> On 2023/12/19 10:21, Zhiguo Niu wrote:
> > The current pending_discard attr just only shows the discard_cmd_cnt
> > information. More discard status can be shown so that we can check
> > them through sysfs when needed.
> >
> > Signed-off-by: Zhiguo Niu <[email protected]>
> > ---
> > changes of v2: Improve the patch according to Chao's suggestions.
> > changes of v3: Add a blank line for easy reading.
> > changes of v4: Split to three entries
> > ---
> > ---
> > Documentation/ABI/testing/sysfs-fs-f2fs | 15 +++++++++++++++
> > fs/f2fs/sysfs.c | 33 +++++++++++++++++++++++++++++++++
> > 2 files changed, 48 insertions(+)
> >
> > diff --git a/Documentation/ABI/testing/sysfs-fs-f2fs b/Documentation/ABI/testing/sysfs-fs-f2fs
> > index 4f1d4e6..606a298 100644
> > --- a/Documentation/ABI/testing/sysfs-fs-f2fs
> > +++ b/Documentation/ABI/testing/sysfs-fs-f2fs
> > @@ -159,6 +159,21 @@ Date: November 2021
> > Contact: "Jaegeuk Kim" <[email protected]>
> > Description: Shows the number of pending discard commands in the queue.
> >
> > +What: /sys/fs/f2fs/<disk>/issued_discard
>
> Add them to /sys/fs/f2fs/<disk>/stat/?
I just want to keep them consistent with the entry "pending_discard"
if they are split to 3 entries.
they are all discard related infos.
Thanks
>
> Thanks,
>
> > +Date: December 2023
> > +Contact: "Zhiguo Niu" <[email protected]>
> > +Description: Shows the number of issued discard.
> > +
> > +What: /sys/fs/f2fs/<disk>/queued_discard
> > +Date: December 2023
> > +Contact: "Zhiguo Niu" <[email protected]>
> > +Description: Shows the number of queued discard.
> > +
> > +What: /sys/fs/f2fs/<disk>/undiscard_blks
> > +Date: December 2023
> > +Contact: "Zhiguo Niu" <[email protected]>
> > +Description: Shows the total number of undiscard blocks.
> > +
> > What: /sys/fs/f2fs/<disk>/max_victim_search
> > Date: January 2014
> > Contact: "Jaegeuk Kim" <[email protected]>
> > diff --git a/fs/f2fs/sysfs.c b/fs/f2fs/sysfs.c
> > index 7099ffa..666efdd 100644
> > --- a/fs/f2fs/sysfs.c
> > +++ b/fs/f2fs/sysfs.c
> > @@ -143,6 +143,33 @@ static ssize_t pending_discard_show(struct f2fs_attr *a,
> > &SM_I(sbi)->dcc_info->discard_cmd_cnt));
> > }
> >
> > +static ssize_t issued_discard_show(struct f2fs_attr *a,
> > + struct f2fs_sb_info *sbi, char *buf)
> > +{
> > + if (!SM_I(sbi)->dcc_info)
> > + return -EINVAL;
> > + return sysfs_emit(buf, "%llu\n", (unsigned long long)atomic_read(
> > + &SM_I(sbi)->dcc_info->issued_discard));
> > +}
> > +
> > +static ssize_t queued_discard_show(struct f2fs_attr *a,
> > + struct f2fs_sb_info *sbi, char *buf)
> > +{
> > + if (!SM_I(sbi)->dcc_info)
> > + return -EINVAL;
> > + return sysfs_emit(buf, "%llu\n", (unsigned long long)atomic_read(
> > + &SM_I(sbi)->dcc_info->queued_discard));
> > +}
> > +
> > +static ssize_t undiscard_blks_show(struct f2fs_attr *a,
> > + struct f2fs_sb_info *sbi, char *buf)
> > +{
> > + if (!SM_I(sbi)->dcc_info)
> > + return -EINVAL;
> > + return sysfs_emit(buf, "%u\n",
> > + SM_I(sbi)->dcc_info->undiscard_blks);
> > +}
> > +
> > static ssize_t gc_mode_show(struct f2fs_attr *a,
> > struct f2fs_sb_info *sbi, char *buf)
> > {
> > @@ -1025,6 +1052,9 @@ static ssize_t f2fs_sb_feature_show(struct f2fs_attr *a,
> > F2FS_GENERAL_RO_ATTR(mounted_time_sec);
> > F2FS_GENERAL_RO_ATTR(main_blkaddr);
> > F2FS_GENERAL_RO_ATTR(pending_discard);
> > +F2FS_GENERAL_RO_ATTR(issued_discard);
> > +F2FS_GENERAL_RO_ATTR(queued_discard);
> > +F2FS_GENERAL_RO_ATTR(undiscard_blks);
> > F2FS_GENERAL_RO_ATTR(gc_mode);
> > #ifdef CONFIG_F2FS_STAT_FS
> > F2FS_GENERAL_RO_ATTR(moved_blocks_background);
> > @@ -1084,6 +1114,9 @@ static ssize_t f2fs_sb_feature_show(struct f2fs_attr *a,
> > ATTR_LIST(max_ordered_discard),
> > ATTR_LIST(discard_io_aware),
> > ATTR_LIST(pending_discard),
> > + ATTR_LIST(issued_discard),
> > + ATTR_LIST(queued_discard),
> > + ATTR_LIST(undiscard_blks),
> > ATTR_LIST(gc_mode),
> > ATTR_LIST(ipu_policy),
> > ATTR_LIST(min_ipu_util),
On 2023/12/19 12:09, Zhiguo Niu wrote:
> On Tue, Dec 19, 2023 at 12:00 PM Chao Yu <[email protected]> wrote:
>>
>> On 2023/12/19 10:21, Zhiguo Niu wrote:
>>> The current pending_discard attr just only shows the discard_cmd_cnt
>>> information. More discard status can be shown so that we can check
>>> them through sysfs when needed.
>>>
>>> Signed-off-by: Zhiguo Niu <[email protected]>
>>> ---
>>> changes of v2: Improve the patch according to Chao's suggestions.
>>> changes of v3: Add a blank line for easy reading.
>>> changes of v4: Split to three entries
>>> ---
>>> ---
>>> Documentation/ABI/testing/sysfs-fs-f2fs | 15 +++++++++++++++
>>> fs/f2fs/sysfs.c | 33 +++++++++++++++++++++++++++++++++
>>> 2 files changed, 48 insertions(+)
>>>
>>> diff --git a/Documentation/ABI/testing/sysfs-fs-f2fs b/Documentation/ABI/testing/sysfs-fs-f2fs
>>> index 4f1d4e6..606a298 100644
>>> --- a/Documentation/ABI/testing/sysfs-fs-f2fs
>>> +++ b/Documentation/ABI/testing/sysfs-fs-f2fs
>>> @@ -159,6 +159,21 @@ Date: November 2021
>>> Contact: "Jaegeuk Kim" <[email protected]>
>>> Description: Shows the number of pending discard commands in the queue.
>>>
>>> +What: /sys/fs/f2fs/<disk>/issued_discard
>>
>> Add them to /sys/fs/f2fs/<disk>/stat/?
> I just want to keep them consistent with the entry "pending_discard"
There are too many entries in root directory of f2fs sysfs entry, so I
created the 'stat' sub-directory for later all read-only stat-related
entry. I think it's fine to create new discard stat entries there.
Thanks,
> if they are split to 3 entries.
> they are all discard related infos.
> Thanks
>>
>> Thanks,
>>
>>> +Date: December 2023
>>> +Contact: "Zhiguo Niu" <[email protected]>
>>> +Description: Shows the number of issued discard.
>>> +
>>> +What: /sys/fs/f2fs/<disk>/queued_discard
>>> +Date: December 2023
>>> +Contact: "Zhiguo Niu" <[email protected]>
>>> +Description: Shows the number of queued discard.
>>> +
>>> +What: /sys/fs/f2fs/<disk>/undiscard_blks
>>> +Date: December 2023
>>> +Contact: "Zhiguo Niu" <[email protected]>
>>> +Description: Shows the total number of undiscard blocks.
>>> +
>>> What: /sys/fs/f2fs/<disk>/max_victim_search
>>> Date: January 2014
>>> Contact: "Jaegeuk Kim" <[email protected]>
>>> diff --git a/fs/f2fs/sysfs.c b/fs/f2fs/sysfs.c
>>> index 7099ffa..666efdd 100644
>>> --- a/fs/f2fs/sysfs.c
>>> +++ b/fs/f2fs/sysfs.c
>>> @@ -143,6 +143,33 @@ static ssize_t pending_discard_show(struct f2fs_attr *a,
>>> &SM_I(sbi)->dcc_info->discard_cmd_cnt));
>>> }
>>>
>>> +static ssize_t issued_discard_show(struct f2fs_attr *a,
>>> + struct f2fs_sb_info *sbi, char *buf)
>>> +{
>>> + if (!SM_I(sbi)->dcc_info)
>>> + return -EINVAL;
>>> + return sysfs_emit(buf, "%llu\n", (unsigned long long)atomic_read(
>>> + &SM_I(sbi)->dcc_info->issued_discard));
>>> +}
>>> +
>>> +static ssize_t queued_discard_show(struct f2fs_attr *a,
>>> + struct f2fs_sb_info *sbi, char *buf)
>>> +{
>>> + if (!SM_I(sbi)->dcc_info)
>>> + return -EINVAL;
>>> + return sysfs_emit(buf, "%llu\n", (unsigned long long)atomic_read(
>>> + &SM_I(sbi)->dcc_info->queued_discard));
>>> +}
>>> +
>>> +static ssize_t undiscard_blks_show(struct f2fs_attr *a,
>>> + struct f2fs_sb_info *sbi, char *buf)
>>> +{
>>> + if (!SM_I(sbi)->dcc_info)
>>> + return -EINVAL;
>>> + return sysfs_emit(buf, "%u\n",
>>> + SM_I(sbi)->dcc_info->undiscard_blks);
>>> +}
>>> +
>>> static ssize_t gc_mode_show(struct f2fs_attr *a,
>>> struct f2fs_sb_info *sbi, char *buf)
>>> {
>>> @@ -1025,6 +1052,9 @@ static ssize_t f2fs_sb_feature_show(struct f2fs_attr *a,
>>> F2FS_GENERAL_RO_ATTR(mounted_time_sec);
>>> F2FS_GENERAL_RO_ATTR(main_blkaddr);
>>> F2FS_GENERAL_RO_ATTR(pending_discard);
>>> +F2FS_GENERAL_RO_ATTR(issued_discard);
>>> +F2FS_GENERAL_RO_ATTR(queued_discard);
>>> +F2FS_GENERAL_RO_ATTR(undiscard_blks);
>>> F2FS_GENERAL_RO_ATTR(gc_mode);
>>> #ifdef CONFIG_F2FS_STAT_FS
>>> F2FS_GENERAL_RO_ATTR(moved_blocks_background);
>>> @@ -1084,6 +1114,9 @@ static ssize_t f2fs_sb_feature_show(struct f2fs_attr *a,
>>> ATTR_LIST(max_ordered_discard),
>>> ATTR_LIST(discard_io_aware),
>>> ATTR_LIST(pending_discard),
>>> + ATTR_LIST(issued_discard),
>>> + ATTR_LIST(queued_discard),
>>> + ATTR_LIST(undiscard_blks),
>>> ATTR_LIST(gc_mode),
>>> ATTR_LIST(ipu_policy),
>>> ATTR_LIST(min_ipu_util),
On Tue, Dec 19, 2023 at 11:24 PM Chao Yu <[email protected]> wrote:
>
> On 2023/12/19 12:09, Zhiguo Niu wrote:
> > On Tue, Dec 19, 2023 at 12:00 PM Chao Yu <[email protected]> wrote:
> >>
> >> On 2023/12/19 10:21, Zhiguo Niu wrote:
> >>> The current pending_discard attr just only shows the discard_cmd_cnt
> >>> information. More discard status can be shown so that we can check
> >>> them through sysfs when needed.
> >>>
> >>> Signed-off-by: Zhiguo Niu <[email protected]>
> >>> ---
> >>> changes of v2: Improve the patch according to Chao's suggestions.
> >>> changes of v3: Add a blank line for easy reading.
> >>> changes of v4: Split to three entries
> >>> ---
> >>> ---
> >>> Documentation/ABI/testing/sysfs-fs-f2fs | 15 +++++++++++++++
> >>> fs/f2fs/sysfs.c | 33 +++++++++++++++++++++++++++++++++
> >>> 2 files changed, 48 insertions(+)
> >>>
> >>> diff --git a/Documentation/ABI/testing/sysfs-fs-f2fs b/Documentation/ABI/testing/sysfs-fs-f2fs
> >>> index 4f1d4e6..606a298 100644
> >>> --- a/Documentation/ABI/testing/sysfs-fs-f2fs
> >>> +++ b/Documentation/ABI/testing/sysfs-fs-f2fs
> >>> @@ -159,6 +159,21 @@ Date: November 2021
> >>> Contact: "Jaegeuk Kim" <[email protected]>
> >>> Description: Shows the number of pending discard commands in the queue.
> >>>
> >>> +What: /sys/fs/f2fs/<disk>/issued_discard
> >>
> >> Add them to /sys/fs/f2fs/<disk>/stat/?
> > I just want to keep them consistent with the entry "pending_discard"
>
> There are too many entries in root directory of f2fs sysfs entry, so I
> created the 'stat' sub-directory for later all read-only stat-related
> entry. I think it's fine to create new discard stat entries there.
I got it and will update the patch. thanks.
>
> Thanks,
>
> > if they are split to 3 entries.
> > they are all discard related infos.
> > Thanks
> >>
> >> Thanks,
> >>
> >>> +Date: December 2023
> >>> +Contact: "Zhiguo Niu" <[email protected]>
> >>> +Description: Shows the number of issued discard.
> >>> +
> >>> +What: /sys/fs/f2fs/<disk>/queued_discard
> >>> +Date: December 2023
> >>> +Contact: "Zhiguo Niu" <[email protected]>
> >>> +Description: Shows the number of queued discard.
> >>> +
> >>> +What: /sys/fs/f2fs/<disk>/undiscard_blks
> >>> +Date: December 2023
> >>> +Contact: "Zhiguo Niu" <[email protected]>
> >>> +Description: Shows the total number of undiscard blocks.
> >>> +
> >>> What: /sys/fs/f2fs/<disk>/max_victim_search
> >>> Date: January 2014
> >>> Contact: "Jaegeuk Kim" <[email protected]>
> >>> diff --git a/fs/f2fs/sysfs.c b/fs/f2fs/sysfs.c
> >>> index 7099ffa..666efdd 100644
> >>> --- a/fs/f2fs/sysfs.c
> >>> +++ b/fs/f2fs/sysfs.c
> >>> @@ -143,6 +143,33 @@ static ssize_t pending_discard_show(struct f2fs_attr *a,
> >>> &SM_I(sbi)->dcc_info->discard_cmd_cnt));
> >>> }
> >>>
> >>> +static ssize_t issued_discard_show(struct f2fs_attr *a,
> >>> + struct f2fs_sb_info *sbi, char *buf)
> >>> +{
> >>> + if (!SM_I(sbi)->dcc_info)
> >>> + return -EINVAL;
> >>> + return sysfs_emit(buf, "%llu\n", (unsigned long long)atomic_read(
> >>> + &SM_I(sbi)->dcc_info->issued_discard));
> >>> +}
> >>> +
> >>> +static ssize_t queued_discard_show(struct f2fs_attr *a,
> >>> + struct f2fs_sb_info *sbi, char *buf)
> >>> +{
> >>> + if (!SM_I(sbi)->dcc_info)
> >>> + return -EINVAL;
> >>> + return sysfs_emit(buf, "%llu\n", (unsigned long long)atomic_read(
> >>> + &SM_I(sbi)->dcc_info->queued_discard));
> >>> +}
> >>> +
> >>> +static ssize_t undiscard_blks_show(struct f2fs_attr *a,
> >>> + struct f2fs_sb_info *sbi, char *buf)
> >>> +{
> >>> + if (!SM_I(sbi)->dcc_info)
> >>> + return -EINVAL;
> >>> + return sysfs_emit(buf, "%u\n",
> >>> + SM_I(sbi)->dcc_info->undiscard_blks);
> >>> +}
> >>> +
> >>> static ssize_t gc_mode_show(struct f2fs_attr *a,
> >>> struct f2fs_sb_info *sbi, char *buf)
> >>> {
> >>> @@ -1025,6 +1052,9 @@ static ssize_t f2fs_sb_feature_show(struct f2fs_attr *a,
> >>> F2FS_GENERAL_RO_ATTR(mounted_time_sec);
> >>> F2FS_GENERAL_RO_ATTR(main_blkaddr);
> >>> F2FS_GENERAL_RO_ATTR(pending_discard);
> >>> +F2FS_GENERAL_RO_ATTR(issued_discard);
> >>> +F2FS_GENERAL_RO_ATTR(queued_discard);
> >>> +F2FS_GENERAL_RO_ATTR(undiscard_blks);
> >>> F2FS_GENERAL_RO_ATTR(gc_mode);
> >>> #ifdef CONFIG_F2FS_STAT_FS
> >>> F2FS_GENERAL_RO_ATTR(moved_blocks_background);
> >>> @@ -1084,6 +1114,9 @@ static ssize_t f2fs_sb_feature_show(struct f2fs_attr *a,
> >>> ATTR_LIST(max_ordered_discard),
> >>> ATTR_LIST(discard_io_aware),
> >>> ATTR_LIST(pending_discard),
> >>> + ATTR_LIST(issued_discard),
> >>> + ATTR_LIST(queued_discard),
> >>> + ATTR_LIST(undiscard_blks),
> >>> ATTR_LIST(gc_mode),
> >>> ATTR_LIST(ipu_policy),
> >>> ATTR_LIST(min_ipu_util),