Эх сурвалжийг харах

[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>
NeilBrown 19 жил өмнө
parent
commit
d4dbd0250e

+ 5 - 0
Documentation/md.txt

@@ -200,6 +200,11 @@ All md devices contain:
      This can be written only while the array is being assembled, not
      This can be written only while the array is being assembled, not
      after it is started.
      after it is started.
 
 
+  layout
+     The "layout" for the array for the particular level.  This is
+     simply a number that is interpretted differently by different
+     levels.  It can be written while assembling an array.
+
    new_dev
    new_dev
      This file can be written but not read.  The value written should
      This file can be written but not read.  The value written should
      be a block device number as major:minor.  e.g. 8:0
      be a block device number as major:minor.  e.g. 8:0

+ 27 - 0
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 =
 static struct md_sysfs_entry md_level =
 __ATTR(level, 0644, level_show, level_store);
 __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
 static ssize_t
 raid_disks_show(mddev_t *mddev, char *page)
 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[] = {
 static struct attribute *md_default_attrs[] = {
 	&md_level.attr,
 	&md_level.attr,
+	&md_layout.attr,
 	&md_raid_disks.attr,
 	&md_raid_disks.attr,
 	&md_chunk_size.attr,
 	&md_chunk_size.attr,
 	&md_size.attr,
 	&md_size.attr,