• NeilBrown's avatar
    md/raid5: close race between STRIPE_BIT_DELAY and batching. · d0852df5
    NeilBrown authored
    When we add a write to a stripe we need to make sure the bitmap
    bit is set.  While doing that the stripe is not locked so it could
    be added to a batch after which further changes to STRIPE_BIT_DELAY
    and ->bm_seq are ineffective.
    
    So we need to hold off adding to a stripe until bitmap_startwrite has
    completed at least once, and we need to avoid further changes to
    STRIPE_BIT_DELAY once the stripe has been added to a batch.
    
    If a bitmap_startwrite() completes after the stripe was added to a
    batch, it will not have set the bit, only incremented a counter, so no
    extra delay of the stripe is needed.
    Reported-by: default avatarShaohua Li <shli@kernel.org>
    Signed-off-by: default avatarNeilBrown <neilb@suse.de>
    d0852df5
raid5.h 22.4 KB