From nobody Sun Feb 8 13:10:52 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id B2E2BC001E0 for ; Tue, 1 Aug 2023 08:17:20 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232113AbjHAIRT (ORCPT ); Tue, 1 Aug 2023 04:17:19 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37574 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230514AbjHAIRP (ORCPT ); Tue, 1 Aug 2023 04:17:15 -0400 Received: from SHSQR01.spreadtrum.com (unknown [222.66.158.135]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C07AFA0; Tue, 1 Aug 2023 01:17:13 -0700 (PDT) Received: from dlp.unisoc.com ([10.29.3.86]) by SHSQR01.spreadtrum.com with ESMTP id 3718DWQH061383; Tue, 1 Aug 2023 16:13:32 +0800 (+08) (envelope-from Yunlong.Xing@unisoc.com) Received: from SHDLP.spreadtrum.com (bjmbx02.spreadtrum.com [10.0.64.8]) by dlp.unisoc.com (SkyGuard) with ESMTPS id 4RFSWC4QJPz2K1r9S; Tue, 1 Aug 2023 16:11:51 +0800 (CST) Received: from tj10379pcu.spreadtrum.com (10.5.32.15) by BJMBX02.spreadtrum.com (10.0.64.8) with Microsoft SMTP Server (TLS) id 15.0.1497.23; Tue, 1 Aug 2023 16:13:29 +0800 From: Yunlong Xing To: , , , , , , CC: , , , , Subject: [PATCH] mmc: block: Fix in_flight[issue_type] value error Date: Tue, 1 Aug 2023 16:13:27 +0800 Message-ID: <20230801081327.1309669-1-yunlong.xing@unisoc.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.5.32.15] X-ClientProxiedBy: SHCAS03.spreadtrum.com (10.0.1.207) To BJMBX02.spreadtrum.com (10.0.64.8) X-MAIL: SHSQR01.spreadtrum.com 3718DWQH061383 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: Yibin Ding For a completed request, after the mmc_blk_mq_complete_rq(mq, req) function is executed, the bitmap_tags corresponding to the request will be cleared, that is, the request will be regarded as idle. If the request is acquired by a different type of process at this time, the issue_type of the request may change. It further caused the value of mq->in_flight[issue_type] to be abnormal, and a large number of requests could not be sent. p1: p2: mmc_blk_mq_complete_rq blk_mq_free_request blk_mq_get_request blk_mq_rq_ctx_init mmc_blk_mq_dec_in_flight mmc_issue_type(mq, req) This strategy can ensure the consistency of issue_type before and after executing mmc_blk_mq_complete_rq. Signed-off-by: Yibin Ding Acked-by: Adrian Hunter --- drivers/mmc/core/block.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/drivers/mmc/core/block.c b/drivers/mmc/core/block.c index f701efb1fa78..5b750311f638 100644 --- a/drivers/mmc/core/block.c +++ b/drivers/mmc/core/block.c @@ -2097,14 +2097,14 @@ static void mmc_blk_mq_poll_completion(struct mmc_q= ueue *mq, mmc_blk_urgent_bkops(mq, mqrq); } =20 -static void mmc_blk_mq_dec_in_flight(struct mmc_queue *mq, struct request = *req) +static void mmc_blk_mq_dec_in_flight(struct mmc_queue *mq, enum mmc_issue_= type issue_type) { unsigned long flags; bool put_card; =20 spin_lock_irqsave(&mq->lock, flags); =20 - mq->in_flight[mmc_issue_type(mq, req)] -=3D 1; + mq->in_flight[issue_type] -=3D 1; =20 put_card =3D (mmc_tot_in_flight(mq) =3D=3D 0); =20 @@ -2120,6 +2120,7 @@ static void mmc_blk_mq_post_req(struct mmc_queue *mq,= struct request *req, struct mmc_queue_req *mqrq =3D req_to_mmc_queue_req(req); struct mmc_request *mrq =3D &mqrq->brq.mrq; struct mmc_host *host =3D mq->card->host; + enum mmc_issue_type issue_type =3D mmc_issue_type(mq, req); =20 mmc_post_req(host, mrq, 0); =20 @@ -2136,7 +2137,7 @@ static void mmc_blk_mq_post_req(struct mmc_queue *mq,= struct request *req, blk_mq_complete_request(req); } =20 - mmc_blk_mq_dec_in_flight(mq, req); + mmc_blk_mq_dec_in_flight(mq, issue_type); } =20 void mmc_blk_mq_recovery(struct mmc_queue *mq) --=20 2.25.1