Commit f001a70c authored by NeilBrown's avatar NeilBrown

md/raid5: use conf->raid_disks in preference to mddev->raid_disk

mddev->raid_disks can be changed and any time by a request from
user-space.  It is a suggestion as to what number of raid_disks is
desired.

conf->raid_disks can only be changed by the raid5 module with suitable
locks in place.  It is a statement as to the current number of
raid_disks.

There are two places where the latter should be used, but the former
is used.  This can lead to a crash when reshaping an array.

This patch changes to mddev-> to conf->
Signed-off-by: default avatarNeilBrown <neilb@suse.de>
parent ccc0d38e
...@@ -3288,7 +3288,7 @@ static void unplug_slaves(mddev_t *mddev) ...@@ -3288,7 +3288,7 @@ static void unplug_slaves(mddev_t *mddev)
int i; int i;
rcu_read_lock(); rcu_read_lock();
for (i=0; i<mddev->raid_disks; i++) { for (i = 0; i < conf->raid_disks; i++) {
mdk_rdev_t *rdev = rcu_dereference(conf->disks[i].rdev); mdk_rdev_t *rdev = rcu_dereference(conf->disks[i].rdev);
if (rdev && !test_bit(Faulty, &rdev->flags) && atomic_read(&rdev->nr_pending)) { if (rdev && !test_bit(Faulty, &rdev->flags) && atomic_read(&rdev->nr_pending)) {
struct request_queue *r_queue = bdev_get_queue(rdev->bdev); struct request_queue *r_queue = bdev_get_queue(rdev->bdev);
...@@ -4034,7 +4034,7 @@ static inline sector_t sync_request(mddev_t *mddev, sector_t sector_nr, int *ski ...@@ -4034,7 +4034,7 @@ static inline sector_t sync_request(mddev_t *mddev, sector_t sector_nr, int *ski
* We don't need to check the 'failed' flag as when that gets set, * We don't need to check the 'failed' flag as when that gets set,
* recovery aborts. * recovery aborts.
*/ */
for (i=0; i<mddev->raid_disks; i++) for (i = 0; i < conf->raid_disks; i++)
if (conf->disks[i].rdev == NULL) if (conf->disks[i].rdev == NULL)
still_degraded = 1; still_degraded = 1;
......
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