diff options
author | NeilBrown <neilb@suse.de> | 2009-10-16 16:35:30 +1100 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2009-10-16 16:35:30 +1100 |
commit | 5e5e3e78ed9038b8f7112835d07084eefb9daa47 (patch) | |
tree | afcefac7c0dbafb71f09d90812eecb2c6e4bc766 /drivers/md/md.c | |
parent | e4424fee1815f996dccd36be44d68ca160ec3e1b (diff) | |
download | blackbird-op-linux-5e5e3e78ed9038b8f7112835d07084eefb9daa47.tar.gz blackbird-op-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.c | 2 |
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); } |