• NeilBrown's avatar
    md/raid10: locking changes for 'enough()'. · 635f6416
    NeilBrown authored
    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: default avatarNeilBrown <neilb@suse.de>
    635f6416
raid10.c 131 KB