block: don't use blocking queue entered for recursive bio submits
authorJens Axboe <axboe@kernel.dk>
Sat, 2 Jun 2018 20:04:07 +0000 (14:04 -0600)
committerJens Axboe <axboe@kernel.dk>
Sun, 3 Jun 2018 02:35:00 +0000 (20:35 -0600)
commitcd4a4ae4683dc2e09380118e205e057896dcda2b
tree7991620de08c70556b880e5fc4917382d48e477d
parentd00a11df691466772435ec02471292eae07885e5
block: don't use blocking queue entered for recursive bio submits

If we end up splitting a bio and the queue goes away between
the initial submission and the later split submission, then we
can block forever in blk_queue_enter() waiting for the reference
to drop to zero. This will never happen, since we already hold
a reference.

Mark a split bio as already having entered the queue, so we can
just use the live non-blocking queue enter variant.

Thanks to Tetsuo Handa for the analysis.

Reported-by: syzbot+c4f9cebf9d651f6e54de@syzkaller.appspotmail.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/blk-core.c
block/blk-merge.c
include/linux/blk_types.h