diff options
-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, |