Btrfs: sysfs: let default_attrs be separate from the kset
authorAnand Jain <Anand.Jain@oracle.com>
Mon, 9 Mar 2015 22:38:27 +0000 (06:38 +0800)
committerDavid Sterba <dsterba@suse.cz>
Wed, 27 May 2015 10:27:20 +0000 (12:27 +0200)
As of now btrfs_attrs are provided using the default_attrs through
the kset. Separate them and create the default_attrs using the
sysfs_create_files instead. By doing this we will have the
flexibility that device discovery thread could create fsid
kobject.

Signed-off-by: Anand Jain <anand.jain@oracle.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
fs/btrfs/sysfs.c

index 83c0c5d5368bcfd7d75b8c40d943dec12c73e542..11fa8e6c533c3178dce7ed553e71ece0d2d50285 100644 (file)
@@ -428,7 +428,7 @@ static ssize_t btrfs_clone_alignment_show(struct kobject *kobj,
 
 BTRFS_ATTR(clone_alignment, btrfs_clone_alignment_show);
 
-static struct attribute *btrfs_attrs[] = {
+static const struct attribute *btrfs_attrs[] = {
        BTRFS_ATTR_PTR(label),
        BTRFS_ATTR_PTR(nodesize),
        BTRFS_ATTR_PTR(sectorsize),
@@ -447,7 +447,6 @@ static void btrfs_release_super_kobj(struct kobject *kobj)
 static struct kobj_type btrfs_ktype = {
        .sysfs_ops      = &kobj_sysfs_ops,
        .release        = btrfs_release_super_kobj,
-       .default_attrs  = btrfs_attrs,
 };
 
 static inline struct btrfs_fs_info *to_fs_info(struct kobject *kobj)
@@ -531,6 +530,7 @@ void btrfs_sysfs_remove_one(struct btrfs_fs_info *fs_info)
        }
        addrm_unknown_feature_attrs(fs_info, false);
        sysfs_remove_group(&fs_info->super_kobj, &btrfs_feature_attr_group);
+       sysfs_remove_files(&fs_info->super_kobj, btrfs_attrs);
        btrfs_sysfs_remove_fsid(fs_info);
 }
 
@@ -720,13 +720,17 @@ int btrfs_sysfs_add_one(struct btrfs_fs_info *fs_info)
                return error;
        }
 
-       error = sysfs_create_group(&fs_info->super_kobj,
-                                  &btrfs_feature_attr_group);
+       error = sysfs_create_files(&fs_info->super_kobj, btrfs_attrs);
        if (error) {
                btrfs_sysfs_remove_fsid(fs_info);
                return error;
        }
 
+       error = sysfs_create_group(&fs_info->super_kobj,
+                                  &btrfs_feature_attr_group);
+       if (error)
+               goto failure;
+
        error = addrm_unknown_feature_attrs(fs_info, true);
        if (error)
                goto failure;