|
@@ -1164,21 +1164,19 @@ static int mmc_blk_issue_discard_rq(struct mmc_queue *mq, struct request *req)
|
|
|
arg = MMC_TRIM_ARG;
|
|
|
else
|
|
|
arg = MMC_ERASE_ARG;
|
|
|
-retry:
|
|
|
- if (card->quirks & MMC_QUIRK_INAND_CMD38) {
|
|
|
- err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
|
|
|
- INAND_CMD38_ARG_EXT_CSD,
|
|
|
- arg == MMC_TRIM_ARG ?
|
|
|
- INAND_CMD38_ARG_TRIM :
|
|
|
- INAND_CMD38_ARG_ERASE,
|
|
|
- 0);
|
|
|
- if (err)
|
|
|
- goto out;
|
|
|
- }
|
|
|
- err = mmc_erase(card, from, nr, arg);
|
|
|
-out:
|
|
|
- if (err == -EIO && !mmc_blk_reset(md, card->host, type))
|
|
|
- goto retry;
|
|
|
+ do {
|
|
|
+ err = 0;
|
|
|
+ if (card->quirks & MMC_QUIRK_INAND_CMD38) {
|
|
|
+ err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
|
|
|
+ INAND_CMD38_ARG_EXT_CSD,
|
|
|
+ arg == MMC_TRIM_ARG ?
|
|
|
+ INAND_CMD38_ARG_TRIM :
|
|
|
+ INAND_CMD38_ARG_ERASE,
|
|
|
+ 0);
|
|
|
+ }
|
|
|
+ if (!err)
|
|
|
+ err = mmc_erase(card, from, nr, arg);
|
|
|
+ } while (err == -EIO && !mmc_blk_reset(md, card->host, type));
|
|
|
if (!err)
|
|
|
mmc_blk_reset_success(md, type);
|
|
|
fail:
|