|
@@ -172,14 +172,16 @@ void mmc_request_done(struct mmc_host *host, struct mmc_request *mrq)
|
|
|
|
|
|
trace_mmc_request_done(host, mrq);
|
|
|
|
|
|
- if (err && cmd->retries && !mmc_card_removed(host->card)) {
|
|
|
- /*
|
|
|
- * Request starter must handle retries - see
|
|
|
- * mmc_wait_for_req_done().
|
|
|
- */
|
|
|
- if (mrq->done)
|
|
|
- mrq->done(mrq);
|
|
|
- } else {
|
|
|
+ /*
|
|
|
+ * We list various conditions for the command to be considered
|
|
|
+ * properly done:
|
|
|
+ *
|
|
|
+ * - There was no error, OK fine then
|
|
|
+ * - We are not doing some kind of retry
|
|
|
+ * - The card was removed (...so just complete everything no matter
|
|
|
+ * if there are errors or retries)
|
|
|
+ */
|
|
|
+ if (!err || !cmd->retries || mmc_card_removed(host->card)) {
|
|
|
mmc_should_fail_request(host, mrq);
|
|
|
|
|
|
if (!host->ongoing_mrq)
|
|
@@ -211,10 +213,13 @@ void mmc_request_done(struct mmc_host *host, struct mmc_request *mrq)
|
|
|
mrq->stop->resp[0], mrq->stop->resp[1],
|
|
|
mrq->stop->resp[2], mrq->stop->resp[3]);
|
|
|
}
|
|
|
-
|
|
|
- if (mrq->done)
|
|
|
- mrq->done(mrq);
|
|
|
}
|
|
|
+ /*
|
|
|
+ * Request starter must handle retries - see
|
|
|
+ * mmc_wait_for_req_done().
|
|
|
+ */
|
|
|
+ if (mrq->done)
|
|
|
+ mrq->done(mrq);
|
|
|
}
|
|
|
|
|
|
EXPORT_SYMBOL(mmc_request_done);
|