]> git.karo-electronics.de Git - karo-tx-linux.git/commit
md: Avoid possible BUG_ON in md bitmap handling.
authorNeil Brown <neilb@suse.de>
Wed, 7 Feb 2007 22:28:28 +0000 (09:28 +1100)
committerGreg Kroah-Hartman <gregkh@suse.de>
Fri, 9 Mar 2007 18:50:20 +0000 (10:50 -0800)
commitbf6c995d1541c8513876158a5550799ae7cd39fe
treed9802a869a4cc102b4617cecae400345a430a127
parentc8d8a5e0f09db90f9ce46edd6c5601335d0f21ff
md: Avoid possible BUG_ON in md bitmap handling.

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: Neil Brown <neilb@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
diff .prev/drivers/md/bitmap.c ./drivers/md/bitmap.c
drivers/md/bitmap.c
include/linux/raid/bitmap.h