mmc: correct request error handling
authorPierre Ossman <drzeus@drzeus.cx>
Tue, 14 Nov 2006 21:13:13 +0000 (22:13 +0100)
committerPierre Ossman <drzeus@drzeus.cx>
Fri, 1 Dec 2006 18:06:19 +0000 (19:06 +0100)
We need to jump to the part of just flushing the request
when we cannot claim the bus. Sending commands to a bus
we do not own will give unpredictable results.

Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
drivers/mmc/mmc_block.c

index 5025abebfc82b6347cb195c96ae89913fb99bf8e..87713572293f0d3044e077e1b9944617dc14ce1f 100644 (file)
@@ -224,10 +224,10 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req)
        struct mmc_blk_data *md = mq->data;
        struct mmc_card *card = md->queue.card;
        struct mmc_blk_request brq;
-       int ret;
+       int ret = 1;
 
        if (mmc_card_claim_host(card))
-               goto cmd_err;
+               goto flush_queue;
 
        do {
                struct mmc_command cmd;
@@ -344,8 +344,6 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req)
        return 1;
 
  cmd_err:
-       ret = 1;
-
        /*
         * If this is an SD card and we're writing, we can first
         * mark the known good sectors as ok.
@@ -379,6 +377,7 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req)
 
        mmc_card_release_host(card);
 
+flush_queue:
        spin_lock_irq(&md->lock);
        while (ret) {
                ret = end_that_request_chunk(req, 0,