From: NeilBrown The size calculation made assumtion which the new offset mode didn't follow. This gets the size right in all cases. Signed-off-by: Neil Brown Signed-off-by: Andrew Morton --- drivers/md/raid10.c | 8 +++++++- 1 files changed, 7 insertions(+), 1 deletion(-) diff -puN drivers/md/raid10.c~md-calculate-correct-array-size-for-raid10-in-new-offset-mode drivers/md/raid10.c --- devel/drivers/md/raid10.c~md-calculate-correct-array-size-for-raid10-in-new-offset-mode 2006-05-15 21:37:51.000000000 -0700 +++ devel-akpm/drivers/md/raid10.c 2006-05-15 21:37:51.000000000 -0700 @@ -2060,7 +2060,13 @@ static int run(mddev_t *mddev) /* * Ok, everything is just fine now */ - size = conf->stride * conf->raid_disks; + if (conf->far_offset) { + size = mddev->size >> (conf->chunk_shift-1); + size *= conf->raid_disks; + size <<= conf->chunk_shift; + sector_div(size, conf->far_copies); + } else + size = conf->stride * conf->raid_disks; sector_div(size, conf->near_copies); mddev->array_size = size/2; mddev->resync_max_sectors = size; _