Use kobject_is_added() instead of local `s_sysfs_registered` variables. BTW kill kobject_del() directly, because kobject_put() actually covers kobject removal automatically. Signed-off-by: Yangtao Li <frank.li@xxxxxxxx> --- fs/zonefs/sysfs.c | 11 +++++------ fs/zonefs/zonefs.h | 1 - 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/fs/zonefs/sysfs.c b/fs/zonefs/sysfs.c index 8ccb65c2b419..f0783bf7a25c 100644 --- a/fs/zonefs/sysfs.c +++ b/fs/zonefs/sysfs.c @@ -101,8 +101,6 @@ int zonefs_sysfs_register(struct super_block *sb) return ret; } - sbi->s_sysfs_registered = true; - return 0; } @@ -110,12 +108,13 @@ void zonefs_sysfs_unregister(struct super_block *sb) { struct zonefs_sb_info *sbi = ZONEFS_SB(sb); - if (!sbi || !sbi->s_sysfs_registered) + if (!sbi) return; - kobject_del(&sbi->s_kobj); - kobject_put(&sbi->s_kobj); - wait_for_completion(&sbi->s_kobj_unregister); + if (kobject_is_added(&sbi->s_kobj)) { + kobject_put(&sbi->s_kobj); + wait_for_completion(&sbi->s_kobj_unregister); + } } int __init zonefs_sysfs_init(void) diff --git a/fs/zonefs/zonefs.h b/fs/zonefs/zonefs.h index 8175652241b5..4db0ea173220 100644 --- a/fs/zonefs/zonefs.h +++ b/fs/zonefs/zonefs.h @@ -238,7 +238,6 @@ struct zonefs_sb_info { unsigned int s_max_active_seq_files; atomic_t s_active_seq_files; - bool s_sysfs_registered; struct kobject s_kobj; struct completion s_kobj_unregister; }; -- 2.35.1