[PATCH] md: change raid5 sysfs attribute to not create a new directory
authorNeilBrown <neilb@suse.de>
Wed, 9 Nov 2005 05:39:30 +0000 (21:39 -0800)
committerLinus Torvalds <torvalds@g5.osdl.org>
Wed, 9 Nov 2005 15:56:38 +0000 (07:56 -0800)
There isn't really a need for raid5 attributes to be an a subdirectory,
so this patch moves them from
  /sys/block/mdX/md/raid5/attribute
to
  /sys/block/mdX/md/attribute

This suggests that all md personalities should co-operate about
namespace usage, but that shouldn't be a problem.

Signed-off-by: Neil Brown <neilb@suse.de>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
drivers/md/md.c
drivers/md/raid5.c
include/linux/raid/md_k.h
include/linux/raid/raid5.h

index 013f2f27589c8f09599371d54f2a163be8277416..3db5c35130724ce14c5e8e2d1af5f0f61c642882 100644 (file)
@@ -1683,12 +1683,6 @@ static void analyze_sbs(mddev_t * mddev)
 
 }
 
-struct md_sysfs_entry {
-       struct attribute attr;
-       ssize_t (*show)(mddev_t *, char *);
-       ssize_t (*store)(mddev_t *, const char *, size_t);
-};
-
 static ssize_t
 md_show_level(mddev_t *mddev, char *page)
 {
index 246c9b1cc4a3ef377e0e307c2f7f24dc31d5d180..08a1620b9f8cb6d33050e4c444a13010cf9cb5fb 100644 (file)
@@ -1732,21 +1732,17 @@ static void raid5d (mddev_t *mddev)
        PRINTK("--- raid5d inactive\n");
 }
 
-struct raid5_sysfs_entry {
-       struct attribute attr;
-       ssize_t (*show)(raid5_conf_t *, char *);
-       ssize_t (*store)(raid5_conf_t *, const char *, ssize_t);
-};
-
 static ssize_t
-raid5_show_stripe_cache_size(raid5_conf_t *conf, char *page)
+raid5_show_stripe_cache_size(mddev_t *mddev, char *page)
 {
+       raid5_conf_t *conf = mddev_to_conf(mddev);
        return sprintf(page, "%d\n", conf->max_nr_stripes);
 }
 
 static ssize_t
-raid5_store_stripe_cache_size(raid5_conf_t *conf, const char *page, ssize_t len)
+raid5_store_stripe_cache_size(mddev_t *mddev, const char *page, size_t len)
 {
+       raid5_conf_t *conf = mddev_to_conf(mddev);
        char *end;
        int new;
        if (len >= PAGE_SIZE)
@@ -1770,68 +1766,33 @@ raid5_store_stripe_cache_size(raid5_conf_t *conf, const char *page, ssize_t len)
        }
        return len;
 }
-static struct raid5_sysfs_entry raid5_stripecache_size = {
+
+static struct md_sysfs_entry raid5_stripecache_size = {
        .attr = {.name = "stripe_cache_size", .mode = S_IRUGO | S_IWUSR },
        .show = raid5_show_stripe_cache_size,
        .store = raid5_store_stripe_cache_size,
 };
 
 static ssize_t
-raid5_show_stripe_cache_active(raid5_conf_t *conf, char *page)
+raid5_show_stripe_cache_active(mddev_t *mddev, char *page)
 {
+       raid5_conf_t *conf = mddev_to_conf(mddev);
        return sprintf(page, "%d\n", atomic_read(&conf->active_stripes));
 }
 
-static struct raid5_sysfs_entry raid5_stripecache_active = {
+static struct md_sysfs_entry raid5_stripecache_active = {
        .attr = {.name = "stripe_cache_active", .mode = S_IRUGO},
        .show = raid5_show_stripe_cache_active,
 };
 
-static struct attribute *raid5_default_attrs[] = {
+static struct attribute *raid5_attrs[] =  {
        &raid5_stripecache_size.attr,
        &raid5_stripecache_active.attr,
        NULL,
 };
-
-static ssize_t
-raid5_attr_show(struct kobject *kobj, struct attribute *attr, char *page)
-{
-       struct raid5_sysfs_entry *entry = container_of(attr, struct raid5_sysfs_entry, attr);
-       raid5_conf_t *conf = container_of(kobj, raid5_conf_t, kobj);
-
-       if (!entry->show)
-               return -EIO;
-       return entry->show(conf, page);
-}
-
-static ssize_t
-raid5_attr_store(struct kobject *kobj, struct attribute *attr,
-             const char *page, size_t length)
-{
-       struct raid5_sysfs_entry *entry = container_of(attr, struct raid5_sysfs_entry, attr);
-       raid5_conf_t *conf = container_of(kobj, raid5_conf_t, kobj);
-
-       if (!entry->store)
-               return -EIO;
-       return entry->store(conf, page, length);
-}
-
-static void raid5_free(struct kobject *ko)
-{
-       raid5_conf_t *conf = container_of(ko, raid5_conf_t, kobj);
-       kfree(conf);
-}
-
-
-static struct sysfs_ops raid5_sysfs_ops = {
-       .show           = raid5_attr_show,
-       .store          = raid5_attr_store,
-};
-
-static struct kobj_type raid5_ktype = {
-       .release        = raid5_free,
-       .sysfs_ops      = &raid5_sysfs_ops,
-       .default_attrs  = raid5_default_attrs,
+static struct attribute_group raid5_attrs_group = {
+       .name = NULL,
+       .attrs = raid5_attrs,
 };
 
 static int run(mddev_t *mddev)
@@ -1975,10 +1936,7 @@ memory = conf->max_nr_stripes * (sizeof(struct stripe_head) +
        }
 
        /* Ok, everything is just fine now */
-       conf->kobj.parent = &mddev->kobj;
-       strcpy(conf->kobj.name, "raid5");
-       conf->kobj.ktype = &raid5_ktype;
-       kobject_register(&conf->kobj);
+       sysfs_create_group(&mddev->kobj, &raid5_attrs_group);
 
        if (mddev->bitmap)
                mddev->thread->timeout = mddev->bitmap->daemon_sleep * HZ;
@@ -2012,7 +1970,7 @@ static int stop(mddev_t *mddev)
        shrink_stripes(conf);
        free_pages((unsigned long) conf->stripe_hashtbl, HASH_PAGES_ORDER);
        blk_sync_queue(mddev->queue); /* the unplug fn references 'conf'*/
-       kobject_unregister(&conf->kobj);
+       sysfs_remove_group(&mddev->kobj, &raid5_attrs_group);
        mddev->private = NULL;
        return 0;
 }
index cb8b44d1588ba7d89ab2fe3a35298f29d48574ee..4169c11e545181ad022599d5886ab446d546aecd 100644 (file)
@@ -282,6 +282,13 @@ struct mdk_personality_s
 };
 
 
+struct md_sysfs_entry {
+       struct attribute attr;
+       ssize_t (*show)(mddev_t *, char *);
+       ssize_t (*store)(mddev_t *, const char *, size_t);
+};
+
+
 static inline char * mdname (mddev_t * mddev)
 {
        return mddev->gendisk ? mddev->gendisk->disk_name : "mdX";
index 5f4e945c808342784aee81b4ed8cc1dca7a9c516..f025ba6fb14c10c3492e6dcf23d8703bb741d824 100644 (file)
@@ -228,7 +228,6 @@ struct raid5_private_data {
                                            * Cleared when a sync completes.
                                            */
 
-       struct kobject          kobj;
        /*
         * Free stripes pool
         */