Commit f870229f authored by Neil Brown's avatar Neil Brown Committed by Linus Torvalds

[PATCH] md: make sure the size of a raid5/6 array is a multiple of the chunk size.

Normally the size is chosen as a multiple of the chunk size, but if the size
is explicitly chosen, it might not be.  So we force it.
Signed-off-by: default avatarNeil Brown <neilb@cse.unsw.edu.au>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent e0de9abb
...@@ -1577,6 +1577,9 @@ static int run (mddev_t *mddev) ...@@ -1577,6 +1577,9 @@ static int run (mddev_t *mddev)
conf->algorithm = mddev->layout; conf->algorithm = mddev->layout;
conf->max_nr_stripes = NR_STRIPES; conf->max_nr_stripes = NR_STRIPES;
/* device size must be a multiple of chunk size */
mddev->size &= ~(mddev->chunk_size/1024 -1);
if (!conf->chunk_size || conf->chunk_size % 4) { if (!conf->chunk_size || conf->chunk_size % 4) {
printk(KERN_ERR "raid5: invalid chunk size %d for %s\n", printk(KERN_ERR "raid5: invalid chunk size %d for %s\n",
conf->chunk_size, mdname(mddev)); conf->chunk_size, mdname(mddev));
......
...@@ -1741,6 +1741,9 @@ static int run (mddev_t *mddev) ...@@ -1741,6 +1741,9 @@ static int run (mddev_t *mddev)
conf->algorithm = mddev->layout; conf->algorithm = mddev->layout;
conf->max_nr_stripes = NR_STRIPES; conf->max_nr_stripes = NR_STRIPES;
/* device size must be a multiple of chunk size */
mddev->size &= ~(mddev->chunk_size/1024 -1);
if (conf->raid_disks < 4) { if (conf->raid_disks < 4) {
printk(KERN_ERR "raid6: not enough configured devices for %s (%d, minimum 4)\n", printk(KERN_ERR "raid6: not enough configured devices for %s (%d, minimum 4)\n",
mdname(mddev), conf->raid_disks); mdname(mddev), conf->raid_disks);
......
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