FAILED: patch "[PATCH] mmc: block: fix read single on recovery logic" failed to apply to 4.19-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 4.19-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 54309fde1a352ad2674ebba004a79f7d20b9f037 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Christian=20L=C3=B6hle?= <[email protected]>
Date: Fri, 4 Feb 2022 15:11:37 +0000
Subject: [PATCH] mmc: block: fix read single on recovery logic
On reads with MMC_READ_MULTIPLE_BLOCK that fail,
the recovery handler will use MMC_READ_SINGLE_BLOCK for each of the blocks, up to MMC_READ_SINGLE_RETRIES times each. The logic for this is fixed to never report unsuccessful reads as success to the block layer.
On command error with retries remaining, blk_update_request was called with whatever value error was set last to.
In case it was last set to BLK_STS_OK (default), the read will be reported as success, even though there was no data read from the device. This could happen on a CRC mismatch for the response,
a card rejecting the command (e.g. again due to a CRC mismatch). In case it was last set to BLK_STS_IOERR, the error is reported correctly, but no retries will be attempted.
drivers/mmc/core/block.c +14 -14
@@ -1682,31 +1682,31 @@ static void mmc_blk_read_single(struct mmc_queue *mq, struct request *req)struct mmc_card *card = mq->card;struct mmc_host *host = card->host;blk_status_t error =BLK_STS_OK ; -int retries =0 ; do { u32 status; int err; + int retries = 0; - mmc_blk_rw_rq_prep(mqrq, card, 1, mq); + while (retries++ <= MMC_READ_SINGLE_RETRIES) { + mmc_blk_rw_rq_prep(mqrq, card, 1, mq); - mmc_wait_for_req(host, mrq); + mmc_wait_for_req(host, mrq); - err = mmc_send_status(card, &status); - if (err) - goto error_exit; - - if (!mmc_host_is_spi(host) && - !mmc_ready_for_data(status)) { - err = mmc_blk_fix_state(card, req); + err = mmc_send_status(card, &status); if (err) goto error_exit; - } - if (mrq->cmd->error && retries++ < MMC_READ_SINGLE_RETRIES) - continue; + if (!mmc_host_is_spi(host) && + !mmc_ready_for_data(status)) { + err = mmc_blk_fix_state(card, req); + if (err) + goto error_exit; + } - retries = 0; + if (!mrq->cmd->error) + break; + } if (mrq->cmd->error || mrq->data->error ||
PATCH 1/1 mmc: block: fix read single on recovery logic
commit 54309fde1a352ad2674ebba004a79f7d20b9f037 upstream.
On reads with MMC_READ_MULTIPLE_BLOCK that fail,
the recovery handler will use MMC_READ_SINGLE_BLOCK for each of the blocks, up to MMC_READ_SINGLE_RETRIES times each. The logic for this is fixed to never report unsuccessful reads as success to the block layer.
On command error with retries remaining, blk_update_request was called with whatever value error was set last to.
In case it was last set to BLK_STS_OK (default), the read will be reported as success, even though there was no data read from the device. This could happen on a CRC mismatch for the response,
a card rejecting the command (e.g. again due to a CRC mismatch). In case it was last set to BLK_STS_IOERR, the error is reported correctly, but no retries will be attempted.
--- drivers/mmc/core/block.c | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-)
drivers/mmc/core/block.c +14 -14
@@ -1678,31 +1678,31 @@ static void mmc_blk_read_single(struct mmc_queue *mq, struct request *req)struct mmc_card *card = mq->card;struct mmc_host *host = card->host;blk_status_t error =BLK_STS_OK ; -int retries =0 ; do { u32 status; int err; + int retries = 0; - mmc_blk_rw_rq_prep(mqrq, card, 1, mq); + while (retries++ <= MMC_READ_SINGLE_RETRIES) { + mmc_blk_rw_rq_prep(mqrq, card, 1, mq); - mmc_wait_for_req(host, mrq); + mmc_wait_for_req(host, mrq); - err = mmc_send_status(card, &status); - if (err) - goto error_exit; - - if (!mmc_host_is_spi(host) && - !mmc_blk_in_tran_state(status)) { - err = mmc_blk_fix_state(card, req); + err = mmc_send_status(card, &status); if (err) goto error_exit; - } - if (mrq->cmd->error && retries++ < MMC_READ_SINGLE_RETRIES) - continue; + if (!mmc_host_is_spi(host) && + !mmc_blk_in_tran_state(status)) { + err = mmc_blk_fix_state(card, req); + if (err) + goto error_exit; + } - retries = 0; + if (!mrq->cmd->error) + break; + } if (mrq->cmd->error || mrq->data->error ||
Signature · 5 lines
2.34.1 Hyperstone GmbH | Reichenaustr. 39a | 78467 Konstanz Managing Director: Dr. Jan Peter Berns. Commercial register of local courts: Freiburg HRB381782
[email protected]
maintainerRe: [PATCH] mmc: block: fix read single on recovery logic
Quoted 17 lines · Christian Löhle
commit
54309fde1a352ad2674ebba004a79f7d20b9f037upstream.On reads with
MMC_READ_MULTIPLE_BLOCKthat fail,
the recovery handler will useMMC_READ_SINGLE_BLOCKfor each of the blocks, up toMMC_READ_SINGLE_RETRIEStimes each. The logic for this is fixed to never report unsuccessful reads as success to the block layer.On command error with retries remaining,
blk_update_requestwas called with whatever value error was set last to.
In case it was last set toBLK_STS_OK(default), the read will be reported as success, even though there was no data read from the device. This could happen on a CRC mismatch for the response,
a card rejecting the command (e.g. again due to a CRC mismatch). In case it was last set toBLK_STS_IOERR, the error is reported correctly, but no retries will be attempted.
Quoted 6 lines
Fixes 81196976ed946c ("mmc: block: Add blk-mq support")Signed-off-by Christian Loehle <[email protected]>--- drivers/mmc/core/block.c | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-)
What stable branch(s) is this backport for?
thanks,
greg k-h
Re: [PATCH] mmc: block: fix read single on recovery logic
This is the backport for 4.19, it applied for more recent branches and is not applicable to 4.14.
From: [email protected] <[email protected]>
Sent: Friday, February 18, 2022 11:33 AM
To: Christian Löhle
Cc: [email protected]; Ulf Hansson; Adrian Hunter
Subject: Re: [PATCH] mmc: block: fix read single on recovery logic
Quoted 17 lines · Christian Löhle
commit
54309fde1a352ad2674ebba004a79f7d20b9f037upstream.On reads with
MMC_READ_MULTIPLE_BLOCKthat fail,
the recovery handler will useMMC_READ_SINGLE_BLOCKfor each of the blocks, up toMMC_READ_SINGLE_RETRIEStimes each. The logic for this is fixed to never report unsuccessful reads as success to the block layer.On command error with retries remaining,
blk_update_requestwas called with whatever value error was set last to.
In case it was last set toBLK_STS_OK(default), the read will be reported as success, even though there was no data read from the device. This could happen on a CRC mismatch for the response,
a card rejecting the command (e.g. again due to a CRC mismatch). In case it was last set toBLK_STS_IOERR, the error is reported correctly, but no retries will be attempted.
Quoted 6 lines
Fixes 81196976ed946c ("mmc: block: Add blk-mq support")Signed-off-by Christian Loehle <[email protected]>---
drivers/mmc/core/block.c| 28 ++++++++++++++--------------1 file changed, 14 insertions(+), 14 deletions(-)
What stable branch(s) is this backport for?
thanks,
greg k-h
=
Hyperstone GmbH | Reichenaustr. 39a | 78467 Konstanz Managing Director: Dr. Jan Peter Berns. Commercial register of local courts: Freiburg HRB381782
[email protected]
maintainerRe: [PATCH] mmc: block: fix read single on recovery logic
Quoted 2 lines · Christian Löhle
This is the backport for 4.19, it applied for more recent branches and is not applicable to 4.14.
Thanks, now queued up.
greg k-h
A message that is not in the archive (sent off-list or not yet received): [email protected]
Re: [PATCH] mmc: block: fix read single on recovery logic
You're right, I did not get an email about 5.4, maybe it was caught up somewhere. Greg, can you apply this to 5.4, too?
From: Adrian Hunter <[email protected]>
Sent: Friday, February 18, 2022 12:02 PM
To: Christian Löhle
Subject: Re: [PATCH] mmc: block: fix read single on recovery logic
Quoted 1 line · Christian Löhle
This is the backport for 4.19, it applied for more recent branches and is not applicable to 4.14.
Was 5.4 done? There was a "failed to apply email for that also"
Quoted 36 lines
From: [email protected] <[email protected]>
Sent: Friday, February 18, 2022 11:33 AM
To: Christian Löhle
Cc: [email protected]; Ulf Hansson; Adrian Hunter
Subject: Re: [PATCH] mmc: block: fix read single on recovery logicQuoted 17 lines · Christian Löhle
commit
54309fde1a352ad2674ebba004a79f7d20b9f037upstream.On reads with
MMC_READ_MULTIPLE_BLOCKthat fail,
the recovery handler will useMMC_READ_SINGLE_BLOCKfor each of the blocks, up toMMC_READ_SINGLE_RETRIEStimes each. The logic for this is fixed to never report unsuccessful reads as success to the block layer.On command error with retries remaining,
blk_update_requestwas called with whatever value error was set last to.
In case it was last set toBLK_STS_OK(default), the read will be reported as success, even though there was no data read from the device. This could happen on a CRC mismatch for the response,
a card rejecting the command (e.g. again due to a CRC mismatch). In case it was last set toBLK_STS_IOERR, the error is reported correctly, but no retries will be attempted.Quoted 6 lines
Fixes 81196976ed946c ("mmc: block: Add blk-mq support")Signed-off-by Christian Loehle <[email protected]>---
drivers/mmc/core/block.c| 28 ++++++++++++++--------------1 file changed, 14 insertions(+), 14 deletions(-)What stable branch(s) is this backport for?
Quoted 8 lines
thanks,
greg k-h
=
Hyperstone GmbH | Reichenaustr. 39a | 78467 Konstanz Managing Director: Dr. Jan Peter Berns. Commercial register of local courts: Freiburg HRB381782
=
Hyperstone GmbH | Reichenaustr. 39a | 78467 Konstanz Managing Director: Dr. Jan Peter Berns. Commercial register of local courts: Freiburg HRB381782
Greg Kroah-Hartman
maintainerRe: [PATCH] mmc: block: fix read single on recovery logic
Quoted 2 lines · Christian Löhle
You're right, I did not get an email about 5.4, maybe it was caught up somewhere. Greg, can you apply this to 5.4, too?
Oops, forgot that one, now queued up.
greg k-h