• Dan Williams's avatar
    md/raid6: asynchronous raid6 operations · ac6b53b6
    Dan Williams authored
    [ Based on an original patch by Yuri Tikhonov ]
    
    The raid_run_ops routine uses the asynchronous offload api and
    the stripe_operations member of a stripe_head to carry out xor+pq+copy
    operations asynchronously, outside the lock.
    
    The operations performed by RAID-6 are the same as in the RAID-5 case
    except for no support of STRIPE_OP_PREXOR operations. All the others
    are supported:
    STRIPE_OP_BIOFILL
     - copy data into request buffers to satisfy a read request
    STRIPE_OP_COMPUTE_BLK
     - generate missing blocks (1 or 2) in the cache from the other blocks
    STRIPE_OP_BIODRAIN
     - copy data out of request buffers to satisfy a write request
    STRIPE_OP_RECONSTRUCT
     - recalculate parity for new data that has entered the cache
    STRIPE_OP_CHECK
     - verify that the parity is correct
    
    The flow is the same as in the RAID-5 case, and reuses some routines, namely:
    1/ ops_complete_postxor (renamed to ops_complete_reconstruct)
    2/ ops_complete_compute (updated to set up to 2 targets uptodate)
    3/ ops_run_check (renamed to ops_run_check_p for xor parity checks)
    
    [neilb@suse.de: fixes to get it to pass mdadm regression suite]
    Reviewed-by: default avatarAndre Noll <maan@systemlinux.org>
    Signed-off-by: default avatarYuri Tikhonov <yur@emcraft.com>
    Signed-off-by: default avatarIlya Yanok <yanok@emcraft.com>
    Signed-off-by: default avatarDan Williams <dan.j.williams@intel.com>
    
    
    
    ac6b53b6
Kconfig 9.25 KB