浏览代码

md: use resync_max_sectors for reshape as well as resync.

Some resync type operations need to act on the address space of the
device, others on the address space of the array.

This only affects RAID10, so it sets resync_max_sectors to the array
size (it defaults to the device size), and that is currently used for
resync only.  However reshape of a RAID10 must be done against the
array size, not device size, so change code to use resync_max_sectors
for both the resync and the reshape cases.
This does not affect RAID5 or RAID1, just RAID10.

Signed-off-by: NeilBrown <neilb@suse.de>
NeilBrown 13 年之前
父节点
当前提交
c804cdecea
共有 1 个文件被更改,包括 5 次插入3 次删除
  1. 5 3
      drivers/md/md.c

+ 5 - 3
drivers/md/md.c

@@ -4425,7 +4425,8 @@ sync_completed_show(struct mddev *mddev, char *page)
 	if (!test_bit(MD_RECOVERY_RUNNING, &mddev->recovery))
 	if (!test_bit(MD_RECOVERY_RUNNING, &mddev->recovery))
 		return sprintf(page, "none\n");
 		return sprintf(page, "none\n");
 
 
-	if (test_bit(MD_RECOVERY_SYNC, &mddev->recovery))
+	if (test_bit(MD_RECOVERY_SYNC, &mddev->recovery) ||
+	    test_bit(MD_RECOVERY_RESHAPE, &mddev->recovery))
 		max_sectors = mddev->resync_max_sectors;
 		max_sectors = mddev->resync_max_sectors;
 	else
 	else
 		max_sectors = mddev->dev_sectors;
 		max_sectors = mddev->dev_sectors;
@@ -6803,7 +6804,8 @@ static void status_resync(struct seq_file *seq, struct mddev * mddev)
 
 
 	resync = mddev->curr_resync - atomic_read(&mddev->recovery_active);
 	resync = mddev->curr_resync - atomic_read(&mddev->recovery_active);
 
 
-	if (test_bit(MD_RECOVERY_SYNC, &mddev->recovery))
+	if (test_bit(MD_RECOVERY_SYNC, &mddev->recovery) ||
+	    test_bit(MD_RECOVERY_RESHAPE, &mddev->recovery))
 		max_sectors = mddev->resync_max_sectors;
 		max_sectors = mddev->resync_max_sectors;
 	else
 	else
 		max_sectors = mddev->dev_sectors;
 		max_sectors = mddev->dev_sectors;
@@ -7366,7 +7368,7 @@ void md_do_sync(struct mddev *mddev)
 			j = mddev->recovery_cp;
 			j = mddev->recovery_cp;
 
 
 	} else if (test_bit(MD_RECOVERY_RESHAPE, &mddev->recovery))
 	} else if (test_bit(MD_RECOVERY_RESHAPE, &mddev->recovery))
-		max_sectors = mddev->dev_sectors;
+		max_sectors = mddev->resync_max_sectors;
 	else {
 	else {
 		/* recovery follows the physical size of devices */
 		/* recovery follows the physical size of devices */
 		max_sectors = mddev->dev_sectors;
 		max_sectors = mddev->dev_sectors;