summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJon Medhurst <jon.medhurst@linaro.org>2011-12-20 15:03:38 +0000
committerJon Medhurst <tixy@linaro.org>2012-04-17 19:46:46 +0100
commit5056ea58518ba18336c61c457a12d04e2d20951b (patch)
treed93317abfacf243b17c04d700fa9cec70438cb4e
parente816b57a337ea3b755de72bec38c10c864f23015 (diff)
mmc: block: Make multi-block write errors retry as single block writestracking-armlt-mmc-3.4-rc3-2012.04-0
The current mmc block code retries i/o errors on multi-block reads by using single block reads. For platforms with unreliable multi-block operations, like the ARM Versatile Express board, this is a valuable error recovery path. This patch extends the single block retry to also include write operations. Signed-off-by: Jon Medhurst <jon.medhurst@linaro.org>
-rw-r--r--drivers/mmc/card/block.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c
index b1809650b7aa..0ca6604d8b45 100644
--- a/drivers/mmc/card/block.c
+++ b/drivers/mmc/card/block.c
@@ -1057,6 +1057,10 @@ static int mmc_blk_err_check(struct mmc_card *card,
return MMC_BLK_ECC_ERR;
return MMC_BLK_DATA_ERR;
} else {
+ if (brq->data.blocks > 1) {
+ /* Hack to redo transfer one sector at a time */
+ return MMC_BLK_DATA_ERR;
+ }
return MMC_BLK_CMD_ERR;
}
}
@@ -1333,7 +1337,7 @@ static int mmc_blk_issue_rw_rq(struct mmc_queue *mq, struct request *rqc)
case MMC_BLK_ECC_ERR:
if (brq->data.blocks > 1) {
/* Redo read one sector at a time */
- pr_warning("%s: retrying using single block read\n",
+ pr_warning("%s: retrying using single block transfer\n",
req->rq_disk->disk_name);
disable_multi = 1;
break;