Commit 7ec05478 authored by NeilBrown's avatar NeilBrown

md/raid5: enhance raid5_size to work correctly with negative delta_disks

This is the first of four patches which combine to allow md/raid5 to
reduce the number of devices in the array by restriping the data over
a subset of the devices.

If the number of disks in a raid4/5/6 is being reduced, then the
default size must be based on the new number, not the old number
of devices.
In general, it should be based on the smaller of new and old.
Signed-off-by: default avatarNeilBrown <neilb@suse.de>
parent 34e04e87
...@@ -4169,8 +4169,13 @@ raid5_size(mddev_t *mddev, sector_t sectors, int raid_disks) ...@@ -4169,8 +4169,13 @@ raid5_size(mddev_t *mddev, sector_t sectors, int raid_disks)
if (!sectors) if (!sectors)
sectors = mddev->dev_sectors; sectors = mddev->dev_sectors;
if (!raid_disks) if (!raid_disks) {
raid_disks = conf->previous_raid_disks; /* size is defined by the smallest of previous and new size */
if (conf->raid_disks < conf->previous_raid_disks)
raid_disks = conf->raid_disks;
else
raid_disks = conf->previous_raid_disks;
}
sectors &= ~((sector_t)mddev->chunk_size/512 - 1); sectors &= ~((sector_t)mddev->chunk_size/512 - 1);
return sectors * (raid_disks - conf->max_degraded); return sectors * (raid_disks - conf->max_degraded);
......
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