summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSeungwon Jeon <tgih.jun@samsung.com>2013-01-22 11:48:07 +0100
committerChris Ball <cjb@laptop.org>2013-02-24 20:37:12 +0100
commit7a81902fa52f2b6f5037e167f74ebb5a41cfc7d1 (patch)
treea01ef6d9c14c1168a1e42c5f223ed161a78d3067
parentmmc: core: fix permanent sleep of mmcqd during card removal (diff)
downloadlinux-7a81902fa52f2b6f5037e167f74ebb5a41cfc7d1.tar.xz
linux-7a81902fa52f2b6f5037e167f74ebb5a41cfc7d1.zip
mmc: block: don't start new request when the card is removed
It's not necessary to start a new request while error handling if the card was removed. Signed-off-by: Seungwon Jeon <tgih.jun@samsung.com> Acked-by: Jaehoon Chung <jh80.chung@samsung.com> Tested-by: Konstantin Dorfman <kdorfman@codeaurora.org> Signed-off-by: Chris Ball <cjb@laptop.org>
-rw-r--r--drivers/mmc/card/block.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c
index f79b4688e471..1170afe1a596 100644
--- a/drivers/mmc/card/block.c
+++ b/drivers/mmc/card/block.c
@@ -1456,8 +1456,14 @@ static int mmc_blk_issue_rw_rq(struct mmc_queue *mq, struct request *rqc)
start_new_req:
if (rqc) {
- mmc_blk_rw_rq_prep(mq->mqrq_cur, card, 0, mq);
- mmc_start_req(card->host, &mq->mqrq_cur->mmc_active, NULL);
+ if (mmc_card_removed(card)) {
+ rqc->cmd_flags |= REQ_QUIET;
+ blk_end_request_all(rqc, -EIO);
+ } else {
+ mmc_blk_rw_rq_prep(mq->mqrq_cur, card, 0, mq);
+ mmc_start_req(card->host,
+ &mq->mqrq_cur->mmc_active, NULL);
+ }
}
return 0;