blk_crypto_free_request(rq); blk_pm_mark_last_busy(rq); rq->mq_hctx = NULL;if (rq->rq_flags & RQF_MQ_INFLIGHT) __blk_mq_dec_active_requests(hctx);if (rq->tag != BLK_MQ_NO_TAG) blk_mq_put_tag(hctx->tags, ctx, rq->tag); ...
@@ -2668,15 +2674,17 @@ static int blk_mq_alloc_ctxs(struct request_queue *q) */ void blk_mq_release(struct request_queue *q) { - struct blk_mq_hw_ctx *hctx; - unsigned int i; + struct blk_mq_hw_ctx *hctx, *next; + int i; cancel_delayed_work_sync(&q->requeue_work)...
System crash in blk_mq_free_request() following NVMe controller reset due to NULL mq_hctx. Example 1: Raw nvme nvme0: I/O 71 QID 1 timeout, aborting nvme nvme0: Abort status: 0x0 nvme nvme0: I/O 71 QID 1 timeout, reset controller nvme nvme0: 2/0/0 default/read/poll queues...
> > #include "blk-mq-tag.h" > > @@ -33,6 +34,11 @@ static void blk_mq_hw_sysfs_release(struct kobject *kobj) > > { > > struct blk_mq_hw_ctx *hctx = container_of(kobj, struct blk_mq_hw_ctx, > > kobj); > > + > > + if (hctx->flags & BLK_MQ_F_BLOCKING) >...