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