diff options
author | NeilBrown <neilb@suse.de> | 2006-06-26 03:27:59 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-06-26 12:58:39 -0400 |
commit | d4dbd0250ea1d24bb3d2d13559432fa069d795e2 (patch) | |
tree | 060ec90679ea9d7a535146a35b0e9a8c9d940252 | |
parent | 45dc2de1e53a29f898b81326b8a16e6192d52e4e (diff) |
[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>
-rw-r--r-- | Documentation/md.txt | 5 | ||||
-rw-r--r-- | drivers/md/md.c | 27 |
2 files changed, 32 insertions, 0 deletions
diff --git a/Documentation/md.txt b/Documentation/md.txt index 4cf5972821a9..80f158745ca5 100644 --- a/Documentation/md.txt +++ b/Documentation/md.txt | |||
@@ -200,6 +200,11 @@ All md devices contain: | |||
200 | This can be written only while the array is being assembled, not | 200 | This can be written only while the array is being assembled, not |
201 | after it is started. | 201 | after it is started. |
202 | 202 | ||
203 | layout | ||
204 | The "layout" for the array for the particular level. This is | ||
205 | simply a number that is interpretted differently by different | ||
206 | levels. It can be written while assembling an array. | ||
207 | |||
203 | new_dev | 208 | new_dev |
204 | This file can be written but not read. The value written should | 209 | This file can be written but not read. The value written should |
205 | be a block device number as major:minor. e.g. 8:0 | 210 | be a block device number as major:minor. e.g. 8:0 |
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) | |||
2155 | static struct md_sysfs_entry md_level = | 2155 | static struct md_sysfs_entry md_level = |
2156 | __ATTR(level, 0644, level_show, level_store); | 2156 | __ATTR(level, 0644, level_show, level_store); |
2157 | 2157 | ||
2158 | |||
2159 | static ssize_t | ||
2160 | layout_show(mddev_t *mddev, char *page) | ||
2161 | { | ||
2162 | /* just a number, not meaningful for all levels */ | ||
2163 | return sprintf(page, "%d\n", mddev->layout); | ||
2164 | } | ||
2165 | |||
2166 | static ssize_t | ||
2167 | layout_store(mddev_t *mddev, const char *buf, size_t len) | ||
2168 | { | ||
2169 | char *e; | ||
2170 | unsigned long n = simple_strtoul(buf, &e, 10); | ||
2171 | if (mddev->pers) | ||
2172 | return -EBUSY; | ||
2173 | |||
2174 | if (!*buf || (*e && *e != '\n')) | ||
2175 | return -EINVAL; | ||
2176 | |||
2177 | mddev->layout = n; | ||
2178 | return len; | ||
2179 | } | ||
2180 | static struct md_sysfs_entry md_layout = | ||
2181 | __ATTR(layout, 0655, layout_show, layout_store); | ||
2182 | |||
2183 | |||
2158 | static ssize_t | 2184 | static ssize_t |
2159 | raid_disks_show(mddev_t *mddev, char *page) | 2185 | raid_disks_show(mddev_t *mddev, char *page) |
2160 | { | 2186 | { |
@@ -2741,6 +2767,7 @@ __ATTR(suspend_hi, S_IRUGO|S_IWUSR, suspend_hi_show, suspend_hi_store); | |||
2741 | 2767 | ||
2742 | static struct attribute *md_default_attrs[] = { | 2768 | static struct attribute *md_default_attrs[] = { |
2743 | &md_level.attr, | 2769 | &md_level.attr, |
2770 | &md_layout.attr, | ||
2744 | &md_raid_disks.attr, | 2771 | &md_raid_disks.attr, |
2745 | &md_chunk_size.attr, | 2772 | &md_chunk_size.attr, |
2746 | &md_size.attr, | 2773 | &md_size.attr, |