浏览代码

[PATCH] md: Calculate correct array size for raid10 in new offset mode

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 <neilb@suse.de>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
NeilBrown 19 年之前
父节点
当前提交
8838832830
共有 1 个文件被更改,包括 7 次插入1 次删除
  1. 7 1
      drivers/md/raid10.c

+ 7 - 1
drivers/md/raid10.c

@@ -2060,7 +2060,13 @@ static int run(mddev_t *mddev)
 	/*
 	/*
 	 * Ok, everything is just fine now
 	 * 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);
 	sector_div(size, conf->near_copies);
 	mddev->array_size = size/2;
 	mddev->array_size = size/2;
 	mddev->resync_max_sectors = size;
 	mddev->resync_max_sectors = size;