summaryrefslogtreecommitdiffstats
path: root/drivers/md/md.c
diff options
context:
space:
mode:
authorNeilBrown2009-10-16 07:35:30 +0200
committerNeilBrown2009-10-16 07:35:30 +0200
commit5e5e3e78ed9038b8f7112835d07084eefb9daa47 (patch)
treeafcefac7c0dbafb71f09d90812eecb2c6e4bc766 /drivers/md/md.c
parentmd: fix problems with RAID6 calculations for DDF. (diff)
downloadkernel-qcow2-linux-5e5e3e78ed9038b8f7112835d07084eefb9daa47.tar.gz
kernel-qcow2-linux-5e5e3e78ed9038b8f7112835d07084eefb9daa47.tar.xz
kernel-qcow2-linux-5e5e3e78ed9038b8f7112835d07084eefb9daa47.zip
md: Fix handling of raid5 array which is being reshaped to fewer devices.
When a raid5 (or raid6) array is being reshaped to have fewer devices, conf->raid_disks is the latter and hence smaller number of devices. However sometimes we want to use a number which is the total number of currently required devices - the larger of the 'old' and 'new' sizes. Before we implemented reducing the number of devices, this was always 'new' i.e. ->raid_disks. Now we need max(raid_disks, previous_raid_disks) in those places. This particularly affects assembling an array that was shutdown while in the middle of a reshape to fewer devices. md.c needs a similar fix when interpreting the md metadata. Signed-off-by: NeilBrown <neilb@suse.de>
Diffstat (limited to 'drivers/md/md.c')
-rw-r--r--drivers/md/md.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/md/md.c b/drivers/md/md.c
index 26ba42a79129..10eb1fce975e 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -2631,7 +2631,7 @@ static void analyze_sbs(mddev_t * mddev)
rdev->desc_nr = i++;
rdev->raid_disk = rdev->desc_nr;
set_bit(In_sync, &rdev->flags);
- } else if (rdev->raid_disk >= mddev->raid_disks) {
+ } else if (rdev->raid_disk >= (mddev->raid_disks - min(0, mddev->delta_disks))) {
rdev->raid_disk = -1;
clear_bit(In_sync, &rdev->flags);
}