summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWenchao Chen <wenchao.chen@unisoc.com>2022-09-16 12:05:06 +0300
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2022-10-05 11:38:39 +0300
commit9b751b4dc350a5ba836fb33518da1daac5b4a205 (patch)
tree7c0e11685daaafe65d775f09576f839473a6717a
parent36b10cde0c440ccd57ad3c99f6279f38f35705a5 (diff)
downloadlinux-9b751b4dc350a5ba836fb33518da1daac5b4a205.tar.xz
mmc: hsq: Fix data stomping during mmc recovery
commit e7afa79a3b35a27a046a2139f8b20bd6b98155c2 upstream. 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: 511ce378e16f ("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> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/mmc/host/mmc_hsq.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/mmc/host/mmc_hsq.c b/drivers/mmc/host/mmc_hsq.c
index a5e05ed0fda3..9d35453e7371 100644
--- a/drivers/mmc/host/mmc_hsq.c
+++ b/drivers/mmc/host/mmc_hsq.c
@@ -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;
}