Skip to content

Commit

Permalink
[PATCH] md: allow chunk_size to be settable through sysfs
Browse files Browse the repository at this point in the history
... 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>
  • Loading branch information
NeilBrown authored and Linus Torvalds committed Jan 6, 2006
1 parent 03c902e commit 3b34380
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 0 deletions.
8 changes: 8 additions & 0 deletions Documentation/md.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
26 changes: 26 additions & 0 deletions drivers/md/md.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand Down Expand Up @@ -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,
};

Expand Down

0 comments on commit 3b34380

Please sign in to comment.