]> git.kernelconcepts.de Git - karo-tx-linux.git/commit
md/raid10: locking changes for 'enough()'.
authorNeilBrown <neilb@suse.de>
Tue, 11 Jun 2013 04:57:09 +0000 (14:57 +1000)
committerNeilBrown <neilb@suse.de>
Thu, 13 Jun 2013 22:10:27 +0000 (08:10 +1000)
commit635f6416a2e983adac8ccf90bffbeed0c1a76454
tree36389c7bd9b6dd43ec6055354e9e718d2147240d
parentb29bebd66dbd492105668ec3515a5ffb0b25e4c1
md/raid10: locking changes for 'enough()'.

As 'enough' accesses conf->prev and conf->geo, which can change
spontanously, it should guard against changes.
This can be done with device_lock as start_reshape holds device_lock
while updating 'geo' and end_reshape holds it while updating 'prev'.

So 'error' needs to hold 'device_lock'.

On the other hand, raid10_end_read_request knows which of the two it
really wants to access, and as it is an active request on that one,
the value cannot change underneath it.

So change _enough to take flag rather than a pointer, pass the
appropriate flag from raid10_end_read_request(), and remove the locking.

All other calls to 'enough' are made with reconfig_mutex held, so
neither 'prev' nor 'geo' can change.

Signed-off-by: NeilBrown <neilb@suse.de>
drivers/md/raid10.c