Unverified Commit 635900c4 authored by openeuler-ci-bot's avatar openeuler-ci-bot Committed by Gitee
Browse files

!12275 blk-mq: fix blk_mq_hw_ctx active request accounting

parents 255b41ba f793fab4
Loading
Loading
Loading
Loading
+9 −8
Original line number Diff line number Diff line
@@ -577,6 +577,15 @@ static void __blk_mq_free_request(struct request *rq)
	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 (mq_unfair_dtag && !__blk_mq_active_requests(hctx)) {
			blk_mq_tag_idle(hctx);
			blk_mq_dtag_idle(hctx, true);
		}
	}

	if (rq->tag != BLK_MQ_NO_TAG)
		blk_mq_put_tag(hctx->tags, ctx, rq->tag);
	if (sched_tag != BLK_MQ_NO_TAG)
@@ -590,7 +599,6 @@ void blk_mq_free_request(struct request *rq)
	struct request_queue *q = rq->q;
	struct elevator_queue *e = q->elevator;
	struct blk_mq_ctx *ctx = rq->mq_ctx;
	struct blk_mq_hw_ctx *hctx = rq->mq_hctx;

	if (rq->rq_flags & RQF_ELVPRIV) {
		if (e && e->type->ops.finish_request)
@@ -602,13 +610,6 @@ void blk_mq_free_request(struct request *rq)
	}

	ctx->rq_completed[rq_is_sync(rq)]++;
	if (rq->rq_flags & RQF_MQ_INFLIGHT) {
		__blk_mq_dec_active_requests(hctx);
		if (mq_unfair_dtag && !__blk_mq_active_requests(hctx)) {
			blk_mq_tag_idle(hctx);
			blk_mq_dtag_idle(hctx, true);
		}
	}

	if (unlikely(laptop_mode && !blk_rq_is_passthrough(rq)))
		laptop_io_completion(q->backing_dev_info);