• Neil Brown's avatar
    [PATCH] md: avoid possible BUG_ON in md bitmap handling · da6e1a32
    Neil Brown authored
    md/bitmap tracks how many active write requests are pending on blocks
    associated with each bit in the bitmap, so that it knows when it can clear
    the bit (when count hits zero).
    
    The counter has 14 bits of space, so if there are ever more than 16383, we
    cannot cope.
    
    Currently the code just calles BUG_ON as "all" drivers have request queue
    limits much smaller than this.
    
    However is seems that some don't.  Apparently some multipath configurations
    can allow more than 16383 concurrent write requests.
    
    So, in this unlikely situation, instead of calling BUG_ON we now wait
    for the count to drop down a bit.  This requires a new wait_queue_head,
    some waiting code, and a wakeup call.
    
    Tested by limiting the counter to 20 instead of 16383 (writes go a lot slower
    in that case...).
    Signed-off-by: default avatarNeil Brown <neilb@suse.de>
    Cc: <stable@kernel.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    da6e1a32
bitmap.c 39.4 KB