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

... only before array is started of course.

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>
This commit is contained in:
NeilBrown 2006-01-06 00:20:47 -08:00 committed by Linus Torvalds
parent 03c902e17f
commit 3b34380ae8
2 changed files with 34 additions and 0 deletions

View file

@ -166,6 +166,14 @@ All md devices contain:
will be empty. If an array is being resized (not currently
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'
directory as new directories named
dev-XXX

View file

@ -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 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
action_show(mddev_t *mddev, char *page)
{
@ -1861,6 +1886,7 @@ md_mismatches = __ATTR_RO(mismatch_cnt);
static struct attribute *md_default_attrs[] = {
&md_level.attr,
&md_raid_disks.attr,
&md_chunk_size.attr,
NULL,
};