diff options
author | Christoph Hellwig <hch@lst.de> | 2020-06-05 19:44:09 +0800 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2020-06-07 08:56:50 -0600 |
commit | d94ecfc399715f06da347922e7979c088b1d8834 (patch) | |
tree | 854865cc1204b8f951610b46cfe788741114cc75 /block/blk-mq-tag.h | |
parent | 5aec598c456fe3c1b71a1202cbb42bdc2a643277 (diff) | |
download | linux-d94ecfc399715f06da347922e7979c088b1d8834.tar.gz linux-d94ecfc399715f06da347922e7979c088b1d8834.tar.bz2 linux-d94ecfc399715f06da347922e7979c088b1d8834.zip |
blk-mq: split out a __blk_mq_get_driver_tag helper
Allocation of the driver tag in the case of using a scheduler shares very
little code with the "normal" tag allocation. Split out a new helper to
streamline this path, and untangle it from the complex normal tag
allocation.
This way also avoids to fail driver tag allocation because of inactive hctx
during cpu hotplug, and fixes potential hang risk.
Fixes: bf0beec0607d ("blk-mq: drain I/O when all CPUs in a hctx are offline")
Signed-off-by: Ming Lei <ming.lei@redhat.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Tested-by: John Garry <john.garry@huawei.com>
Cc: Dongli Zhang <dongli.zhang@oracle.com>
Cc: Hannes Reinecke <hare@suse.de>
Cc: Daniel Wagner <dwagner@suse.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'block/blk-mq-tag.h')
-rw-r--r-- | block/blk-mq-tag.h | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/block/blk-mq-tag.h b/block/blk-mq-tag.h index d38e48f2a0a4..2e4ef51cdb32 100644 --- a/block/blk-mq-tag.h +++ b/block/blk-mq-tag.h @@ -51,6 +51,14 @@ enum { BLK_MQ_TAG_MAX = BLK_MQ_NO_TAG - 1, }; +bool __blk_mq_get_driver_tag(struct request *rq); +static inline bool blk_mq_get_driver_tag(struct request *rq) +{ + if (rq->tag != BLK_MQ_NO_TAG) + return true; + return __blk_mq_get_driver_tag(rq); +} + extern bool __blk_mq_tag_busy(struct blk_mq_hw_ctx *); extern void __blk_mq_tag_idle(struct blk_mq_hw_ctx *); |