aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2005-11-09 00:39:40 -0500
committerLinus Torvalds <torvalds@g5.osdl.org>2005-11-09 10:56:39 -0500
commit411036fa1924f5e5b0f7f9d04ae5d8cdc72fb839 (patch)
treed63b4380ce3e6fc55a9ea272512ca430f840fe22
parent96de1e663cda65ba9275afb1bc007f34e5068ba1 (diff)
[PATCH] md: split off some md attributes in sysfs to a separate group
Some, but not all, md array support data redundancy and hence support checking and restoring that redundancy (resync, rebuild). Some attributes apply specifically to functions involving this redundancy, and so should only appear for md arrays for which they are meaningful. i.e. they should not appear for raid0, linear, multpath, faulty. This patch separates these into a distinct group and creates the group only if the personality supports sync_request. Signed-off-by: Neil Brown <neilb@suse.de> Acked-by: Greg Kroah-Hartman <gregkh@suse.de> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r--drivers/md/md.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/drivers/md/md.c b/drivers/md/md.c
index b2d8813ed716..292dad31d5e5 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -1807,10 +1807,19 @@ md_mismatches = __ATTR_RO(mismatch_cnt);
1807static struct attribute *md_default_attrs[] = { 1807static struct attribute *md_default_attrs[] = {
1808 &md_level.attr, 1808 &md_level.attr,
1809 &md_raid_disks.attr, 1809 &md_raid_disks.attr,
1810 NULL,
1811};
1812
1813static struct attribute *md_redundancy_attrs[] = {
1810 &md_scan_mode.attr, 1814 &md_scan_mode.attr,
1811 &md_mismatches.attr, 1815 &md_mismatches.attr,
1812 NULL, 1816 NULL,
1813}; 1817};
1818static struct attribute_group md_redundancy_group = {
1819 .name = NULL,
1820 .attrs = md_redundancy_attrs,
1821};
1822
1814 1823
1815static ssize_t 1824static ssize_t
1816md_attr_show(struct kobject *kobj, struct attribute *attr, char *page) 1825md_attr_show(struct kobject *kobj, struct attribute *attr, char *page)
@@ -2047,6 +2056,8 @@ static int do_md_run(mddev_t * mddev)
2047 bitmap_destroy(mddev); 2056 bitmap_destroy(mddev);
2048 return err; 2057 return err;
2049 } 2058 }
2059 if (mddev->pers->sync_request)
2060 sysfs_create_group(&mddev->kobj, &md_redundancy_group);
2050 atomic_set(&mddev->writes_pending,0); 2061 atomic_set(&mddev->writes_pending,0);
2051 mddev->safemode = 0; 2062 mddev->safemode = 0;
2052 mddev->safemode_timer.function = md_safemode_timeout; 2063 mddev->safemode_timer.function = md_safemode_timeout;
@@ -2155,6 +2166,9 @@ static int do_md_stop(mddev_t * mddev, int ro)
2155 set_disk_ro(disk, 0); 2166 set_disk_ro(disk, 0);
2156 blk_queue_make_request(mddev->queue, md_fail_request); 2167 blk_queue_make_request(mddev->queue, md_fail_request);
2157 mddev->pers->stop(mddev); 2168 mddev->pers->stop(mddev);
2169 if (mddev->pers->sync_request)
2170 sysfs_remove_group(&mddev->kobj, &md_redundancy_group);
2171
2158 module_put(mddev->pers->owner); 2172 module_put(mddev->pers->owner);
2159 mddev->pers = NULL; 2173 mddev->pers = NULL;
2160 if (mddev->ro) 2174 if (mddev->ro)