]> pilppa.com Git - linux-2.6-omap-h63xx.git/commitdiff
md/raid5: enhance raid5_size to work correctly with negative delta_disks
authorNeilBrown <neilb@suse.de>
Tue, 31 Mar 2009 04:10:36 +0000 (15:10 +1100)
committerNeilBrown <neilb@suse.de>
Tue, 31 Mar 2009 04:10:36 +0000 (15:10 +1100)
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: NeilBrown <neilb@suse.de>
drivers/md/raid5.c

index 3930b3e9aa04bd4df7382c69495219e948f8354b..5694eb8941b673937176ad4c28c43d1c2f727697 100644 (file)
@@ -4169,8 +4169,13 @@ raid5_size(mddev_t *mddev, sector_t sectors, int raid_disks)
 
        if (!sectors)
                sectors = mddev->dev_sectors;
-       if (!raid_disks)
-               raid_disks = conf->previous_raid_disks;
+       if (!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);
        return sectors * (raid_disks - conf->max_degraded);