summaryrefslogtreecommitdiffstats
path: root/drivers/md
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2006-06-26 09:27:59 +0200
committerLinus Torvalds <torvalds@g5.osdl.org>2006-06-26 18:58:39 +0200
commitd4dbd0250ea1d24bb3d2d13559432fa069d795e2 (patch)
tree060ec90679ea9d7a535146a35b0e9a8c9d940252 /drivers/md
parent[PATCH] md: Allow rdev state to be set via sysfs (diff)
downloadlinux-d4dbd0250ea1d24bb3d2d13559432fa069d795e2.tar.xz
linux-d4dbd0250ea1d24bb3d2d13559432fa069d795e2.zip
[PATCH] md: Allow raid 'layout' to be read and set via sysfs
Signed-off-by: Neil Brown <neilb@suse.de> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers/md')
-rw-r--r--drivers/md/md.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/drivers/md/md.c b/drivers/md/md.c
index 4b74c77213c3..e3261c438a65 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -2155,6 +2155,32 @@ level_store(mddev_t *mddev, const char *buf, size_t len)
static struct md_sysfs_entry md_level =
__ATTR(level, 0644, level_show, level_store);
+
+static ssize_t
+layout_show(mddev_t *mddev, char *page)
+{
+ /* just a number, not meaningful for all levels */
+ return sprintf(page, "%d\n", mddev->layout);
+}
+
+static ssize_t
+layout_store(mddev_t *mddev, const char *buf, size_t len)
+{
+ char *e;
+ unsigned long n = simple_strtoul(buf, &e, 10);
+ if (mddev->pers)
+ return -EBUSY;
+
+ if (!*buf || (*e && *e != '\n'))
+ return -EINVAL;
+
+ mddev->layout = n;
+ return len;
+}
+static struct md_sysfs_entry md_layout =
+__ATTR(layout, 0655, layout_show, layout_store);
+
+
static ssize_t
raid_disks_show(mddev_t *mddev, char *page)
{
@@ -2741,6 +2767,7 @@ __ATTR(suspend_hi, S_IRUGO|S_IWUSR, suspend_hi_show, suspend_hi_store);
static struct attribute *md_default_attrs[] = {
&md_level.attr,
+ &md_layout.attr,
&md_raid_disks.attr,
&md_chunk_size.attr,
&md_size.attr,