From: NeilBrown Signed-off-by: Neil Brown Cc: Greg KH Signed-off-by: Andrew Morton --- Documentation/md.txt | 6 ++++++ drivers/md/md.c | 23 +++++++++++++++++++++++ 2 files changed, 29 insertions(+) diff -puN Documentation/md.txt~md-export-rdev-data_offset-via-sysfs Documentation/md.txt --- devel/Documentation/md.txt~md-export-rdev-data_offset-via-sysfs 2005-12-12 02:04:35.000000000 -0800 +++ devel-akpm/Documentation/md.txt 2005-12-12 02:04:36.000000000 -0800 @@ -244,6 +244,12 @@ Each directory contains: it currently fills. This can only be set while assembling an 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 in the array. These are named diff -puN drivers/md/md.c~md-export-rdev-data_offset-via-sysfs drivers/md/md.c --- devel/drivers/md/md.c~md-export-rdev-data_offset-via-sysfs 2005-12-12 02:04:35.000000000 -0800 +++ devel-akpm/drivers/md/md.c 2005-12-12 02:04:36.000000000 -0800 @@ -1664,11 +1664,34 @@ slot_store(mdk_rdev_t *rdev, const char static struct rdev_sysfs_entry rdev_slot = __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[] = { &rdev_state.attr, &rdev_super.attr, &rdev_errors.attr, &rdev_slot.attr, + &rdev_offset.attr, NULL, }; static ssize_t _