Skip to content

Commit f71077a

Browse files
committed
Merge tag 'mmc-v5.17-rc1-2' of git://git.kernel.org/pub/scm/linux/kernel/git/ulfh/mmc
Pull MMC fix from Ulf Hansson: "Fix recovery logic for multi block I/O reads (MMC_READ_MULTIPLE_BLOCK)" * tag 'mmc-v5.17-rc1-2' of git://git.kernel.org/pub/scm/linux/kernel/git/ulfh/mmc: mmc: block: fix read single on recovery logic
2 parents 3593030 + 54309fd commit f71077a

File tree

1 file changed

+14
-14
lines changed

1 file changed

+14
-14
lines changed

drivers/mmc/core/block.c

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1682,31 +1682,31 @@ static void mmc_blk_read_single(struct mmc_queue *mq, struct request *req)
16821682
struct mmc_card *card = mq->card;
16831683
struct mmc_host *host = card->host;
16841684
blk_status_t error = BLK_STS_OK;
1685-
int retries = 0;
16861685

16871686
do {
16881687
u32 status;
16891688
int err;
1689+
int retries = 0;
16901690

1691-
mmc_blk_rw_rq_prep(mqrq, card, 1, mq);
1691+
while (retries++ <= MMC_READ_SINGLE_RETRIES) {
1692+
mmc_blk_rw_rq_prep(mqrq, card, 1, mq);
16921693

1693-
mmc_wait_for_req(host, mrq);
1694+
mmc_wait_for_req(host, mrq);
16941695

1695-
err = mmc_send_status(card, &status);
1696-
if (err)
1697-
goto error_exit;
1698-
1699-
if (!mmc_host_is_spi(host) &&
1700-
!mmc_ready_for_data(status)) {
1701-
err = mmc_blk_fix_state(card, req);
1696+
err = mmc_send_status(card, &status);
17021697
if (err)
17031698
goto error_exit;
1704-
}
17051699

1706-
if (mrq->cmd->error && retries++ < MMC_READ_SINGLE_RETRIES)
1707-
continue;
1700+
if (!mmc_host_is_spi(host) &&
1701+
!mmc_ready_for_data(status)) {
1702+
err = mmc_blk_fix_state(card, req);
1703+
if (err)
1704+
goto error_exit;
1705+
}
17081706

1709-
retries = 0;
1707+
if (!mrq->cmd->error)
1708+
break;
1709+
}
17101710

17111711
if (mrq->cmd->error ||
17121712
mrq->data->error ||

0 commit comments

Comments
 (0)