浏览代码

[PATCH] md: export rdev->data_offset via sysfs

Signed-off-by: Neil Brown <neilb@suse.de>
Acked-by: Greg KH <greg@kroah.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
NeilBrown 19 年之前
父节点
当前提交
93c8cad03f
共有 2 个文件被更改,包括 29 次插入0 次删除
  1. 6 0
      Documentation/md.txt
  2. 23 0
      drivers/md/md.c

+ 6 - 0
Documentation/md.txt

@@ -244,6 +244,12 @@ Each directory contains:
 	it currently fills.  This can only be set while assembling an
 	it currently fills.  This can only be set while assembling an
 	array.  A device for which this is set is assumed to be working.
 	array.  A device for which this is set is assumed to be working.
 
 
+      offset
+        This gives the location in the device (in sectors from the
+        start) where data from the array will be stored.  Any part of
+        the device before this offset us not touched, unless it is
+        used for storing metadata (Formats 1.1 and 1.2).
+
 
 
 An active md device will also contain and entry for each active device
 An active md device will also contain and entry for each active device
 in the array.  These are named
 in the array.  These are named

+ 23 - 0
drivers/md/md.c

@@ -1664,11 +1664,34 @@ slot_store(mdk_rdev_t *rdev, const char *buf, size_t len)
 static struct rdev_sysfs_entry rdev_slot =
 static struct rdev_sysfs_entry rdev_slot =
 __ATTR(slot, 0644, slot_show, slot_store);
 __ATTR(slot, 0644, slot_show, slot_store);
 
 
+static ssize_t
+offset_show(mdk_rdev_t *rdev, char *page)
+{
+	return sprintf(page, "%llu\n", rdev->data_offset);
+}
+
+static ssize_t
+offset_store(mdk_rdev_t *rdev, const char *buf, size_t len)
+{
+	char *e;
+	unsigned long long offset = simple_strtoull(buf, &e, 10);
+	if (e==buf || (*e && *e != '\n'))
+		return -EINVAL;
+	if (rdev->mddev->pers)
+		return -EBUSY;
+	rdev->data_offset = offset;
+	return len;
+}
+
+static struct rdev_sysfs_entry rdev_offset =
+__ATTR(offset, 0644, offset_show, offset_store);
+
 static struct attribute *rdev_default_attrs[] = {
 static struct attribute *rdev_default_attrs[] = {
 	&rdev_state.attr,
 	&rdev_state.attr,
 	&rdev_super.attr,
 	&rdev_super.attr,
 	&rdev_errors.attr,
 	&rdev_errors.attr,
 	&rdev_slot.attr,
 	&rdev_slot.attr,
+	&rdev_offset.attr,
 	NULL,
 	NULL,
 };
 };
 static ssize_t
 static ssize_t