From: Ming Lei Date: Wed, 11 Apr 2018 10:47:44 +0000 (+0800) Subject: blk-mq: Revert "blk-mq: reimplement blk_mq_hw_queue_mapped" X-Git-Url: http://git.cdn.openwrt.org/?a=commitdiff_plain;h=2434af79c85d45d41d0c286fedf6e0556888a54c;p=openwrt%2Fstaging%2Fblogic.git blk-mq: Revert "blk-mq: reimplement blk_mq_hw_queue_mapped" This reverts commit 127276c6ce5a30fcc806b7fe53015f4f89b62956. When all CPUs of one hw queue become offline, there still may have IOs not completed from this hctx. But blk_mq_hw_queue_mapped() is called in blk_mq_queue_tag_busy_iter(), which is used for iterating request in timeout handler, timeout event will be missed on the inactive hctx, then request may never be completed. Also the replementation of blk_mq_hw_queue_mapped() doesn't match the helper's name any more, and it should have been named as blk_mq_hw_queue_active(). Even other callers need further verification about this reimplemenation. So revert this patch now, and we can improve hw queue activate/inactivate event after adequent researching and test. Cc: Stefan Haberland Cc: Christian Borntraeger Cc: Christoph Hellwig Reported-by: Jens Axboe Fixes: 127276c6ce5a30fcc ("blk-mq: reimplement blk_mq_hw_queue_mapped") Reviewed-by: Sagi Grimberg Signed-off-by: Ming Lei Signed-off-by: Jens Axboe --- diff --git a/block/blk-mq.h b/block/blk-mq.h index 502af371b83b..88c558f71819 100644 --- a/block/blk-mq.h +++ b/block/blk-mq.h @@ -181,7 +181,7 @@ static inline bool blk_mq_hctx_stopped(struct blk_mq_hw_ctx *hctx) static inline bool blk_mq_hw_queue_mapped(struct blk_mq_hw_ctx *hctx) { - return cpumask_first_and(hctx->cpumask, cpu_online_mask) < nr_cpu_ids; + return hctx->nr_ctx && hctx->tags; } void blk_mq_in_flight(struct request_queue *q, struct hd_struct *part,