From: Konstantin Khorenko <khore...@virtuozzo.com>

This reverts ms commit bc1420ae56266fa2c5a8e452d55f744ca98fe42f.

* we want ext4 to send udev events
* kobject_uevent_env() kobject->kset is defined
  => let's ext4 defines kobject->kset

https://jira.sw.ru/browse/PSBM-127422

Signed-off-by: Konstantin Khorenko <khore...@virtuozzo.com>
Signed-off-by: Kirill Tkhai <ktk...@virtuozzo.com>
---
 fs/ext4/sysfs.c |   43 ++++++++++++++++++++++++++++++++-----------
 1 file changed, 32 insertions(+), 11 deletions(-)

diff --git a/fs/ext4/sysfs.c b/fs/ext4/sysfs.c
index 2314f7446592..7af925442a61 100644
--- a/fs/ext4/sysfs.c
+++ b/fs/ext4/sysfs.c
@@ -489,6 +489,13 @@ static void ext4_sb_release(struct kobject *kobj)
        complete(&sbi->s_kobj_unregister);
 }
 
+static void ext4_kset_release(struct kobject *kobj)
+{
+       struct kset *kset = container_of(kobj, struct kset, kobj);
+
+       kfree(kset);
+}
+
 static const struct sysfs_ops ext4_attr_ops = {
        .show   = ext4_attr_show,
        .store  = ext4_attr_store,
@@ -511,7 +518,12 @@ void ext4_notify_error_sysfs(struct ext4_sb_info *sbi)
        sysfs_notify(&sbi->s_kobj, NULL, "errors_count");
 }
 
-static struct kobject *ext4_root;
+static struct kobj_type ext4_ktype = {
+       .sysfs_ops      = &ext4_attr_ops,
+       .release        = ext4_kset_release,
+};
+
+static struct kset *ext4_kset;
 
 static struct kobject *ext4_feat;
 
@@ -520,8 +532,9 @@ int ext4_register_sysfs(struct super_block *sb)
        struct ext4_sb_info *sbi = EXT4_SB(sb);
        int err;
 
+       sbi->s_kobj.kset = ext4_kset;
        init_completion(&sbi->s_kobj_unregister);
-       err = kobject_init_and_add(&sbi->s_kobj, &ext4_sb_ktype, ext4_root,
+       err = kobject_init_and_add(&sbi->s_kobj, &ext4_sb_ktype, NULL,
                                   "%s", sb->s_id);
        if (err) {
                kobject_put(&sbi->s_kobj);
@@ -562,18 +575,26 @@ int __init ext4_init_sysfs(void)
 {
        int ret;
 
-       ext4_root = kobject_create_and_add("ext4", fs_kobj);
-       if (!ext4_root)
+       ext4_kset = kzalloc(sizeof(*ext4_kset), GFP_KERNEL);
+       if (!ext4_kset)
                return -ENOMEM;
 
+       kobject_set_name(&ext4_kset->kobj, "ext4");
+       ext4_kset->kobj.parent = fs_kobj;
+       ext4_kset->kobj.ktype = &ext4_ktype;
+       ret = kset_register(ext4_kset);
+       if (ret)
+               goto kset_err;
+
        ext4_feat = kzalloc(sizeof(*ext4_feat), GFP_KERNEL);
        if (!ext4_feat) {
                ret = -ENOMEM;
-               goto root_err;
+               goto kset_err;
        }
 
+       ext4_feat->kset = ext4_kset;
        ret = kobject_init_and_add(ext4_feat, &ext4_feat_ktype,
-                                  ext4_root, "features");
+                                  NULL, "features");
        if (ret)
                goto feat_err;
 
@@ -583,9 +604,9 @@ int __init ext4_init_sysfs(void)
 feat_err:
        kobject_put(ext4_feat);
        ext4_feat = NULL;
-root_err:
-       kobject_put(ext4_root);
-       ext4_root = NULL;
+kset_err:
+       kset_unregister(ext4_kset);
+       ext4_kset = NULL;
        return ret;
 }
 
@@ -593,8 +614,8 @@ void ext4_exit_sysfs(void)
 {
        kobject_put(ext4_feat);
        ext4_feat = NULL;
-       kobject_put(ext4_root);
-       ext4_root = NULL;
+       kset_unregister(ext4_kset);
+       ext4_kset = NULL;
        remove_proc_entry(proc_dirname, NULL);
        ext4_proc_root = NULL;
 }


_______________________________________________
Devel mailing list
Devel@openvz.org
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to