Commit 3b34380a authored by NeilBrown's avatar NeilBrown Committed by Linus Torvalds

[PATCH] md: allow chunk_size to be settable through sysfs

... only before array is started of course.
Signed-off-by: default avatarNeil Brown <neilb@suse.de>
Acked-by: default avatarGreg KH <greg@kroah.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 03c902e1
...@@ -166,6 +166,14 @@ All md devices contain: ...@@ -166,6 +166,14 @@ All md devices contain:
will be empty. If an array is being resized (not currently will be empty. If an array is being resized (not currently
possible) this will contain the larger of the old and new sizes. possible) this will contain the larger of the old and new sizes.
chunk_size
This is the size if bytes for 'chunks' and is only relevant to
raid levels that involve striping (1,4,5,6,10). The address space
of the array is conceptually divided into chunks and consecutive
chunks are striped onto neighbouring devices.
The size should be atleast PAGE_SIZE (4k) and should be a power
of 2. This can only be set while assembling an array
As component devices are added to an md array, they appear in the 'md' As component devices are added to an md array, they appear in the 'md'
directory as new directories named directory as new directories named
dev-XXX dev-XXX
......
...@@ -1794,6 +1794,31 @@ raid_disks_show(mddev_t *mddev, char *page) ...@@ -1794,6 +1794,31 @@ raid_disks_show(mddev_t *mddev, char *page)
static struct md_sysfs_entry md_raid_disks = __ATTR_RO(raid_disks); static struct md_sysfs_entry md_raid_disks = __ATTR_RO(raid_disks);
static ssize_t
chunk_size_show(mddev_t *mddev, char *page)
{
return sprintf(page, "%d\n", mddev->chunk_size);
}
static ssize_t
chunk_size_store(mddev_t *mddev, const char *buf, size_t len)
{
/* can only set chunk_size if array is not yet active */
char *e;
unsigned long n = simple_strtoul(buf, &e, 10);
if (mddev->pers)
return -EBUSY;
if (!*buf || (*e && *e != '\n'))
return -EINVAL;
mddev->chunk_size = n;
return len;
}
static struct md_sysfs_entry md_chunk_size =
__ATTR(chunk_size, 0644, chunk_size_show, chunk_size_store);
static ssize_t static ssize_t
action_show(mddev_t *mddev, char *page) action_show(mddev_t *mddev, char *page)
{ {
...@@ -1861,6 +1886,7 @@ md_mismatches = __ATTR_RO(mismatch_cnt); ...@@ -1861,6 +1886,7 @@ md_mismatches = __ATTR_RO(mismatch_cnt);
static struct attribute *md_default_attrs[] = { static struct attribute *md_default_attrs[] = {
&md_level.attr, &md_level.attr,
&md_raid_disks.attr, &md_raid_disks.attr,
&md_chunk_size.attr,
NULL, NULL,
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment