]> git.baikalelectronics.ru Git - kernel.git/commit
blk-mq: ensure that bd->last is always set correctly
authorJens Axboe <axboe@fb.com>
Thu, 2 Mar 2017 20:26:04 +0000 (13:26 -0700)
committerJens Axboe <axboe@fb.com>
Thu, 2 Mar 2017 21:30:51 +0000 (14:30 -0700)
commit8ed41e482b45ff5d74266626d0ae6c629b6b8882
treee4ffafcec58afc46781bfa91ecc2b232efa0ceee
parent39692de228bd0e5f7216b5eb4eb9e8fe72ef3ade
blk-mq: ensure that bd->last is always set correctly

When drivers are called with a request in blk-mq, blk-mq flags the
state such that the driver knows if this is the last request in
this call chain or not. The driver can then use that information
to defer kicking off IO until bd->last is true. However, with blk-mq
and scheduling, we need to allocate a driver tag for a request before
it can be issued. If we fail to allocate such a tag, we could end up
in the situation where the last request issued did not have
bd->last == true set. This can then cause a driver hang.

This fixes a hang with virtio-blk, which uses bd->last as a hint
on whether to kick the queue or not.

Reported-by: Chris Mason <clm@fb.com>
Tested-by: Chris Mason <clm@fb.com>
Reviewed-by: Omar Sandoval <osandov@fb.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
block/blk-mq.c