]> git.baikalelectronics.ru Git - kernel.git/commitdiff
mmc: hsq: Fix data stomping during mmc recovery
authorWenchao Chen <wenchao.chen@unisoc.com>
Fri, 16 Sep 2022 09:05:06 +0000 (17:05 +0800)
committerUlf Hansson <ulf.hansson@linaro.org>
Tue, 27 Sep 2022 10:38:29 +0000 (12:38 +0200)
The block device uses multiple queues to access emmc. There will be up to 3
requests in the hsq of the host. The current code will check whether there
is a request doing recovery before entering the queue, but it will not check
whether there is a request when the lock is issued. The request is in recovery
mode. If there is a request in recovery, then a read and write request is
initiated at this time, and the conflict between the request and the recovery
request will cause the data to be trampled.

Signed-off-by: Wenchao Chen <wenchao.chen@unisoc.com>
Fixes: 48f43bd7116e ("mmc: Add MMC host software queue support")
Cc: stable@vger.kernel.org
Link: https://lore.kernel.org/r/20220916090506.10662-1-wenchao.chen666@gmail.com
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
drivers/mmc/host/mmc_hsq.c

index a5e05ed0fda3ebca5369ee35544beda9b9dafdc9..9d35453e7371b8e0d644b905a8bd3f50475ca5b5 100644 (file)
@@ -34,7 +34,7 @@ static void mmc_hsq_pump_requests(struct mmc_hsq *hsq)
        spin_lock_irqsave(&hsq->lock, flags);
 
        /* Make sure we are not already running a request now */
-       if (hsq->mrq) {
+       if (hsq->mrq || hsq->recovery_halt) {
                spin_unlock_irqrestore(&hsq->lock, flags);
                return;
        }