diff options
author | NeilBrown <neilb@suse.de> | 2009-06-09 14:30:31 +1000 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2009-06-09 14:30:31 +1000 |
commit | f001a70cdc61c01452d42e8b32fd7c7842ef62d5 (patch) | |
tree | 6427a1baca4b818aa2081cbeb5534f2e6b17cf5e | |
parent | ccc0d38ec13d4649d4168c1db590137df53ad783 (diff) | |
download | op-kernel-dev-f001a70cdc61c01452d42e8b32fd7c7842ef62d5.zip op-kernel-dev-f001a70cdc61c01452d42e8b32fd7c7842ef62d5.tar.gz |
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: NeilBrown <neilb@suse.de>
-rw-r--r-- | drivers/md/raid5.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c index 5d400ae..75469e6 100644 --- a/drivers/md/raid5.c +++ b/drivers/md/raid5.c @@ -3288,7 +3288,7 @@ static void unplug_slaves(mddev_t *mddev) int i; 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); if (rdev && !test_bit(Faulty, &rdev->flags) && atomic_read(&rdev->nr_pending)) { 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 * We don't need to check the 'failed' flag as when that gets set, * recovery aborts. */ - for (i=0; i<mddev->raid_disks; i++) + for (i = 0; i < conf->raid_disks; i++) if (conf->disks[i].rdev == NULL) still_degraded = 1; |