Message ID | 20230406191629.63024-1-frank.li@vivo.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 33560f8020c2bf12bb5b598a03fa0a708cab3283 |
Headers | show |
Series | [f2fs-dev] f2fs: remove bulk remove_proc_entry() and unnecessary kobject_del() | expand |
On 2023/4/7 3:16, Yangtao Li wrote: > Convert to use remove_proc_subtree() and kill kobject_del() directly. > kobject_put() actually covers kobject removal automatically, which is > single stage removal. > > Signed-off-by: Yangtao Li <frank.li@vivo.com> > --- > fs/f2fs/sysfs.c | 15 ++------------- > 1 file changed, 2 insertions(+), 13 deletions(-) > > diff --git a/fs/f2fs/sysfs.c b/fs/f2fs/sysfs.c > index dfbd17802549..3aad3500a701 100644 > --- a/fs/f2fs/sysfs.c > +++ b/fs/f2fs/sysfs.c > @@ -1461,25 +1461,14 @@ int f2fs_register_sysfs(struct f2fs_sb_info *sbi) > > void f2fs_unregister_sysfs(struct f2fs_sb_info *sbi) > { > - if (sbi->s_proc) { > -#ifdef CONFIG_F2FS_IOSTAT > - remove_proc_entry("iostat_info", sbi->s_proc); > -#endif > - remove_proc_entry("segment_info", sbi->s_proc); > - remove_proc_entry("segment_bits", sbi->s_proc); > - remove_proc_entry("victim_bits", sbi->s_proc); > - remove_proc_entry("discard_plist_info", sbi->s_proc); > - remove_proc_entry(sbi->sb->s_id, f2fs_proc_root); > - } > + if (sbi->s_proc) > + remove_proc_subtree(sbi->sb->s_id, f2fs_proc_root); > > - kobject_del(&sbi->s_stat_kobj); - f2fs_register_sysfs - kobject_init_and_add(&sbi->s_stat_kobj, ..) /** * kobject_init_and_add() - Initialize a kobject structure and add it to * the kobject hierarchy. ... * * This function combines the call to kobject_init() and kobject_add(). ... */ /** * kobject_del() - Unlink kobject from hierarchy. * @kobj: object. * * This is the function that should be called to delete an object * successfully added via kobject_add(). */ Am I missing something? Thanks, > kobject_put(&sbi->s_stat_kobj); > wait_for_completion(&sbi->s_stat_kobj_unregister); > - kobject_del(&sbi->s_feature_list_kobj); > kobject_put(&sbi->s_feature_list_kobj); > wait_for_completion(&sbi->s_feature_list_kobj_unregister); > > - kobject_del(&sbi->s_kobj); > kobject_put(&sbi->s_kobj); > wait_for_completion(&sbi->s_kobj_unregister); > }
On 04/13, Chao Yu wrote: > On 2023/4/7 3:16, Yangtao Li wrote: > > Convert to use remove_proc_subtree() and kill kobject_del() directly. > > kobject_put() actually covers kobject removal automatically, which is > > single stage removal. > > > > Signed-off-by: Yangtao Li <frank.li@vivo.com> > > --- > > fs/f2fs/sysfs.c | 15 ++------------- > > 1 file changed, 2 insertions(+), 13 deletions(-) > > > > diff --git a/fs/f2fs/sysfs.c b/fs/f2fs/sysfs.c > > index dfbd17802549..3aad3500a701 100644 > > --- a/fs/f2fs/sysfs.c > > +++ b/fs/f2fs/sysfs.c > > @@ -1461,25 +1461,14 @@ int f2fs_register_sysfs(struct f2fs_sb_info *sbi) > > void f2fs_unregister_sysfs(struct f2fs_sb_info *sbi) > > { > > - if (sbi->s_proc) { > > -#ifdef CONFIG_F2FS_IOSTAT > > - remove_proc_entry("iostat_info", sbi->s_proc); > > -#endif > > - remove_proc_entry("segment_info", sbi->s_proc); > > - remove_proc_entry("segment_bits", sbi->s_proc); > > - remove_proc_entry("victim_bits", sbi->s_proc); > > - remove_proc_entry("discard_plist_info", sbi->s_proc); > > - remove_proc_entry(sbi->sb->s_id, f2fs_proc_root); > > - } > > + if (sbi->s_proc) > > + remove_proc_subtree(sbi->sb->s_id, f2fs_proc_root); > > - kobject_del(&sbi->s_stat_kobj); > > - f2fs_register_sysfs > - kobject_init_and_add(&sbi->s_stat_kobj, ..) > > /** > * kobject_init_and_add() - Initialize a kobject structure and add it to > * the kobject hierarchy. > ... > * > * This function combines the call to kobject_init() and kobject_add(). > ... > */ > > /** > * kobject_del() - Unlink kobject from hierarchy. > * @kobj: object. > * > * This is the function that should be called to delete an object > * successfully added via kobject_add(). > */ > > Am I missing something? kobject_put -> kobject_cleanup was supposed to do it? > > Thanks, > > > kobject_put(&sbi->s_stat_kobj); > > wait_for_completion(&sbi->s_stat_kobj_unregister); > > - kobject_del(&sbi->s_feature_list_kobj); > > kobject_put(&sbi->s_feature_list_kobj); > > wait_for_completion(&sbi->s_feature_list_kobj_unregister); > > - kobject_del(&sbi->s_kobj); > > kobject_put(&sbi->s_kobj); > > wait_for_completion(&sbi->s_kobj_unregister); > > }
On 2023/4/13 23:54, Jaegeuk Kim wrote: > On 04/13, Chao Yu wrote: >> On 2023/4/7 3:16, Yangtao Li wrote: >>> Convert to use remove_proc_subtree() and kill kobject_del() directly. >>> kobject_put() actually covers kobject removal automatically, which is >>> single stage removal. >>> >>> Signed-off-by: Yangtao Li <frank.li@vivo.com> >>> --- >>> fs/f2fs/sysfs.c | 15 ++------------- >>> 1 file changed, 2 insertions(+), 13 deletions(-) >>> >>> diff --git a/fs/f2fs/sysfs.c b/fs/f2fs/sysfs.c >>> index dfbd17802549..3aad3500a701 100644 >>> --- a/fs/f2fs/sysfs.c >>> +++ b/fs/f2fs/sysfs.c >>> @@ -1461,25 +1461,14 @@ int f2fs_register_sysfs(struct f2fs_sb_info *sbi) >>> void f2fs_unregister_sysfs(struct f2fs_sb_info *sbi) >>> { >>> - if (sbi->s_proc) { >>> -#ifdef CONFIG_F2FS_IOSTAT >>> - remove_proc_entry("iostat_info", sbi->s_proc); >>> -#endif >>> - remove_proc_entry("segment_info", sbi->s_proc); >>> - remove_proc_entry("segment_bits", sbi->s_proc); >>> - remove_proc_entry("victim_bits", sbi->s_proc); >>> - remove_proc_entry("discard_plist_info", sbi->s_proc); >>> - remove_proc_entry(sbi->sb->s_id, f2fs_proc_root); >>> - } >>> + if (sbi->s_proc) >>> + remove_proc_subtree(sbi->sb->s_id, f2fs_proc_root); >>> - kobject_del(&sbi->s_stat_kobj); >> >> - f2fs_register_sysfs >> - kobject_init_and_add(&sbi->s_stat_kobj, ..) >> >> /** >> * kobject_init_and_add() - Initialize a kobject structure and add it to >> * the kobject hierarchy. >> ... >> * >> * This function combines the call to kobject_init() and kobject_add(). >> ... >> */ >> >> /** >> * kobject_del() - Unlink kobject from hierarchy. >> * @kobj: object. >> * >> * This is the function that should be called to delete an object >> * successfully added via kobject_add(). >> */ >> >> Am I missing something? > > kobject_put -> kobject_cleanup was supposed to do it? Yes, it seems so. Reviewed-by: Chao Yu <chao@kernel.org> Thanks, > >> >> Thanks, >> >>> kobject_put(&sbi->s_stat_kobj); >>> wait_for_completion(&sbi->s_stat_kobj_unregister); >>> - kobject_del(&sbi->s_feature_list_kobj); >>> kobject_put(&sbi->s_feature_list_kobj); >>> wait_for_completion(&sbi->s_feature_list_kobj_unregister); >>> - kobject_del(&sbi->s_kobj); >>> kobject_put(&sbi->s_kobj); >>> wait_for_completion(&sbi->s_kobj_unregister); >>> }
Hello: This patch was applied to jaegeuk/f2fs.git (dev) by Jaegeuk Kim <jaegeuk@kernel.org>: On Fri, 7 Apr 2023 03:16:29 +0800 you wrote: > Convert to use remove_proc_subtree() and kill kobject_del() directly. > kobject_put() actually covers kobject removal automatically, which is > single stage removal. > > Signed-off-by: Yangtao Li <frank.li@vivo.com> > --- > fs/f2fs/sysfs.c | 15 ++------------- > 1 file changed, 2 insertions(+), 13 deletions(-) Here is the summary with links: - [f2fs-dev] f2fs: remove bulk remove_proc_entry() and unnecessary kobject_del() https://git.kernel.org/jaegeuk/f2fs/c/33560f8020c2 You are awesome, thank you!
diff --git a/fs/f2fs/sysfs.c b/fs/f2fs/sysfs.c index dfbd17802549..3aad3500a701 100644 --- a/fs/f2fs/sysfs.c +++ b/fs/f2fs/sysfs.c @@ -1461,25 +1461,14 @@ int f2fs_register_sysfs(struct f2fs_sb_info *sbi) void f2fs_unregister_sysfs(struct f2fs_sb_info *sbi) { - if (sbi->s_proc) { -#ifdef CONFIG_F2FS_IOSTAT - remove_proc_entry("iostat_info", sbi->s_proc); -#endif - remove_proc_entry("segment_info", sbi->s_proc); - remove_proc_entry("segment_bits", sbi->s_proc); - remove_proc_entry("victim_bits", sbi->s_proc); - remove_proc_entry("discard_plist_info", sbi->s_proc); - remove_proc_entry(sbi->sb->s_id, f2fs_proc_root); - } + if (sbi->s_proc) + remove_proc_subtree(sbi->sb->s_id, f2fs_proc_root); - kobject_del(&sbi->s_stat_kobj); kobject_put(&sbi->s_stat_kobj); wait_for_completion(&sbi->s_stat_kobj_unregister); - kobject_del(&sbi->s_feature_list_kobj); kobject_put(&sbi->s_feature_list_kobj); wait_for_completion(&sbi->s_feature_list_kobj_unregister); - kobject_del(&sbi->s_kobj); kobject_put(&sbi->s_kobj); wait_for_completion(&sbi->s_kobj_unregister); }
Convert to use remove_proc_subtree() and kill kobject_del() directly. kobject_put() actually covers kobject removal automatically, which is single stage removal. Signed-off-by: Yangtao Li <frank.li@vivo.com> --- fs/f2fs/sysfs.c | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-)