diff options
author | NeilBrown <neilb@suse.de> | 2006-06-26 09:27:59 +0200 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-06-26 18:58:39 +0200 |
commit | d4dbd0250ea1d24bb3d2d13559432fa069d795e2 (patch) | |
tree | 060ec90679ea9d7a535146a35b0e9a8c9d940252 /drivers/md | |
parent | [PATCH] md: Allow rdev state to be set via sysfs (diff) | |
download | linux-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.c | 27 |
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, |