• Dan Williams's avatar
    md: common infrastructure for running operations with raid5_run_ops · d84e0f10
    Dan Williams authored
    All the handle_stripe operations that are to be transitioned to use
    raid5_run_ops need a method to coherently gather work under the stripe-lock
    and hand that work off to raid5_run_ops.  The 'get_stripe_work' routine
    runs under the lock to read all the bits in sh->ops.pending that do not
    have the corresponding bit set in sh->ops.ack.  This modified 'pending'
    bitmap is then passed to raid5_run_ops for processing.
    
    The transition from 'ack' to 'completion' does not need similar protection
    as the existing release_stripe infrastructure will guarantee that
    handle_stripe will run again after a completion bit is set, and
    handle_stripe can tolerate a sh->ops.completed bit being set while the lock
    is held.
    
    A call to async_tx_issue_pending_all() is added to raid5d to kick the
    offload engines once all pending stripe operations work has been submitted.
    This enables batching of the submission and completion of operations.
    Signed-off-by: default avatarDan Williams <dan.j.williams@intel.com>
    Acked-By: default avatarNeilBrown <neilb@suse.de>
    d84e0f10
raid5.c 129 KB