diff options
author | Jens Axboe <axboe@fb.com> | 2017-01-26 14:42:34 -0700 |
---|---|---|
committer | Jens Axboe <axboe@fb.com> | 2017-01-27 08:20:34 -0700 |
commit | 50e1dab86aa2c10cbca2f754aae9542169403141 (patch) | |
tree | 2e17cd0d604bf63d82e4f8838b57ec579690ca52 /block/blk-mq.h | |
parent | 99cf1dc580f0766825395aae4f60ec1d8438f011 (diff) | |
download | linux-50e1dab86aa2c10cbca2f754aae9542169403141.tar.gz linux-50e1dab86aa2c10cbca2f754aae9542169403141.tar.bz2 linux-50e1dab86aa2c10cbca2f754aae9542169403141.zip |
blk-mq-sched: fix starvation for multiple hardware queues and shared tags
If we have both multiple hardware queues and shared tag map between
devices, we need to ensure that we propagate the hardware queue
restart bit higher up. This is because we can get into a situation
where we don't have any IO pending on a hardware queue, yet we fail
getting a tag to start new IO. If that happens, it's not enough to
mark the hardware queue as needing a restart, we need to bubble
that up to the higher level queue as well.
Signed-off-by: Jens Axboe <axboe@fb.com>
Reviewed-by: Omar Sandoval <osandov@fb.com>
Tested-by: Hannes Reinecke <hare@suse.com>
Diffstat (limited to 'block/blk-mq.h')
-rw-r--r-- | block/blk-mq.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/block/blk-mq.h b/block/blk-mq.h index 6c24b901acd7..077a4003f1fd 100644 --- a/block/blk-mq.h +++ b/block/blk-mq.h @@ -33,6 +33,7 @@ int blk_mq_update_nr_requests(struct request_queue *q, unsigned int nr); void blk_mq_wake_waiters(struct request_queue *q); bool blk_mq_dispatch_rq_list(struct blk_mq_hw_ctx *, struct list_head *); void blk_mq_flush_busy_ctxs(struct blk_mq_hw_ctx *hctx, struct list_head *list); +bool blk_mq_hctx_has_pending(struct blk_mq_hw_ctx *hctx); /* * Internal helpers for allocating/freeing the request map |