• Dan Williams's avatar
    raid5: refactor handle_stripe5 and handle_stripe6 (v3) · a4456856
    Dan Williams authored
    handle_stripe5 and handle_stripe6 have very deep logic paths handling the
    various states of a stripe_head.  By introducing the 'stripe_head_state'
    and 'r6_state' objects, large portions of the logic can be moved to
    sub-routines.
    
    'struct stripe_head_state' consumes all of the automatic variables that previously
    stood alone in handle_stripe5,6.  'struct r6_state' contains the handle_stripe6
    specific variables like p_failed and q_failed.
    
    One of the nice side effects of the 'stripe_head_state' change is that it
    allows for further reductions in code duplication between raid5 and raid6.
    The following new routines are shared between raid5 and raid6:
    
    	handle_completed_write_requests
    	handle_requests_to_failed_array
    	handle_stripe_expansion
    
    Changes:
    * v2: fixed 'conf->raid_disk-1' for the raid6 'handle_stripe_expansion' path
    * v3: removed the unused 'dirty' field from struct stripe_head_state
    * v3: coalesced open coded bi_end_io routines into return_io()
    Signed-off-by: default avatarDan Williams <dan.j.williams@intel.com>
    Acked-By: default avatarNeilBrown <neilb@suse.de>
    a4456856
raid5.c 114 KB