f2fs: make gc_idle sysfs node readable

Message ID 20221021082657.26559-1-frank.li@vivo.com
State New
Headers
Series f2fs: make gc_idle sysfs node readable |

Commit Message

李扬韬 Oct. 21, 2022, 8:26 a.m. UTC
  Changed a way of showing values of them to use strings.

Signed-off-by: Yangtao Li <frank.li@vivo.com>
---
 fs/f2fs/sysfs.c | 4 ++++
 1 file changed, 4 insertions(+)
  

Comments

Chao Yu Oct. 25, 2022, 1:53 a.m. UTC | #1
On 2022/10/21 16:26, Yangtao Li wrote:
> Changed a way of showing values of them to use strings.

This change breaks forward compatibility of gc_idle interface.

Thanks,

> 
> Signed-off-by: Yangtao Li <frank.li@vivo.com>
> ---
>   fs/f2fs/sysfs.c | 4 ++++
>   1 file changed, 4 insertions(+)
> 
> diff --git a/fs/f2fs/sysfs.c b/fs/f2fs/sysfs.c
> index b4476adea776..555849d4c744 100644
> --- a/fs/f2fs/sysfs.c
> +++ b/fs/f2fs/sysfs.c
> @@ -332,6 +332,10 @@ static ssize_t f2fs_sbi_show(struct f2fs_attr *a,
>   		return sysfs_emit(buf, "%u\n", sbi->compr_new_inode);
>   #endif
>   
> +	if (!strcmp(a->attr.name, "gc_idle"))
> +		return sysfs_emit(buf, "%s\n",
> +				gc_mode_names[sbi->gc_mode]);
> +
>   	if (!strcmp(a->attr.name, "gc_urgent"))
>   		return sysfs_emit(buf, "%s\n",
>   				gc_mode_names[sbi->gc_mode]);
  
李扬韬 Oct. 25, 2022, 2:33 a.m. UTC | #2
Hi Chao,

What:       /sys/fs/f2fs/<disk>/gc_idle
Date:       July 2013
Contact:    "Namjae Jeon" <namjae.jeon@samsung.com>
Description:    Controls the victim selection policy for garbage collection.
        Setting gc_idle = 0(default) will disable this option. Setting:

        ===========  ===============================================
        gc_idle = 1  will select the Cost Benefit approach & setting
        gc_idle = 2  will select the greedy approach & setting
        gc_idle = 3  will select the age-threshold based approach.
        ===========  ===============================================

From the kernel documentation, this node only describes the writing of
the value, and does not describe the reading of the value.

Actually, this modification does the same thing as commit e60aeb2dee1a
("f2fs: make gc_urgent and gc_segment_mode sysfs node readabl").
I understand it is an addition to the omission of the patch above.

Why gc_urgent and gc_segment_mode can be modified to string, but gc_idle
breaks forward compatibility?

Thanks,
  
Chao Yu Oct. 25, 2022, 2:51 a.m. UTC | #3
On 2022/10/25 10:33, Yangtao Li wrote:
> Hi Chao,
> 
> What:       /sys/fs/f2fs/<disk>/gc_idle
> Date:       July 2013
> Contact:    "Namjae Jeon" <namjae.jeon@samsung.com>
> Description:    Controls the victim selection policy for garbage collection.
>          Setting gc_idle = 0(default) will disable this option. Setting:
> 
>          ===========  ===============================================
>          gc_idle = 1  will select the Cost Benefit approach & setting
>          gc_idle = 2  will select the greedy approach & setting
>          gc_idle = 3  will select the age-threshold based approach.
>          ===========  ===============================================
> 
>  From the kernel documentation, this node only describes the writing of
> the value, and does not describe the reading of the value.

  If the value is used by userspace program, after the change, it will break
userspace.

> 
> Actually, this modification does the same thing as commit e60aeb2dee1a
> ("f2fs: make gc_urgent and gc_segment_mode sysfs node readabl").
> I understand it is an addition to the omission of the patch above.
> 
> Why gc_urgent and gc_segment_mode can be modified to string, but gc_idle
> breaks forward compatibility?

Oops, I guess that patch may have caused a regression...if there is any
user..

> 
> Thanks,
  

Patch

diff --git a/fs/f2fs/sysfs.c b/fs/f2fs/sysfs.c
index b4476adea776..555849d4c744 100644
--- a/fs/f2fs/sysfs.c
+++ b/fs/f2fs/sysfs.c
@@ -332,6 +332,10 @@  static ssize_t f2fs_sbi_show(struct f2fs_attr *a,
 		return sysfs_emit(buf, "%u\n", sbi->compr_new_inode);
 #endif
 
+	if (!strcmp(a->attr.name, "gc_idle"))
+		return sysfs_emit(buf, "%s\n",
+				gc_mode_names[sbi->gc_mode]);
+
 	if (!strcmp(a->attr.name, "gc_urgent"))
 		return sysfs_emit(buf, "%s\n",
 				gc_mode_names[sbi->gc_mode]);