From cd756c3a847c533c95215f7a82eb8f684001c583 Mon Sep 17 00:00:00 2001 From: Jonathan Bell Date: Mon, 16 May 2022 10:28:27 +0100 Subject: [PATCH] mmc: block: Don't do single-sector reads during recovery See https://github.com/raspberrypi/linux/issues/5019 If an SD card has degraded performance such that IO operations time out then the MMC block layer will leak SG DMA mappings during recovery. It retries the same SG and this causes the leak, as it is mapped twice - once in sdhci_pre_req() and again during single-block reads in sdhci_prepare_data(). Resetting the card (including power-cycling if a regulator for vmmc is present) ought to be enough to recover a stuck state, so for now remove the call to mmc_blk_read_single(). Signed-off-by: Jonathan Bell --- drivers/mmc/core/block.c | 8 -------- 1 file changed, 8 deletions(-) diff --git a/drivers/mmc/core/block.c b/drivers/mmc/core/block.c index 9144ceeea07fab..66c9f09e1ebeec 100644 --- a/drivers/mmc/core/block.c +++ b/drivers/mmc/core/block.c @@ -1869,14 +1869,6 @@ static void mmc_blk_mq_rw_recovery(struct mmc_queue *mq, struct request *req) mqrq->retries = MMC_MAX_RETRIES - MMC_DATA_RETRIES; return; } - - /* FIXME: Missing single sector read for large sector size */ - if (!mmc_large_sector(card) && rq_data_dir(req) == READ && - brq->data.blocks > 1) { - /* Read one sector at a time */ - mmc_blk_read_single(mq, req); - return; - } } static inline bool mmc_blk_rq_error(struct mmc_blk_request *brq)