瀏覽代碼

[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 年之前
父節點
當前提交
d4dbd0250e
共有 2 個文件被更改,包括 32 次插入0 次删除
  1. 5 0
      Documentation/md.txt
  2. 27 0
      drivers/md/md.c

+ 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,