提交 3b34380a 编写于 作者: N NeilBrown 提交者: Linus Torvalds

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

... only before array is started of course.
Signed-off-by: NNeil Brown <neilb@suse.de>
Acked-by: NGreg KH <greg@kroah.com>
Signed-off-by: NAndrew Morton <akpm@osdl.org>
Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
上级 03c902e1
......@@ -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
......
......@@ -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,
};
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册