diff options
-rw-r--r-- | drivers/mmc/card/block.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c index f9ad960d7c1a..4b0f8220f153 100644 --- a/drivers/mmc/card/block.c +++ b/drivers/mmc/card/block.c | |||
@@ -2,7 +2,7 @@ | |||
2 | * Block driver for media (i.e., flash cards) | 2 | * Block driver for media (i.e., flash cards) |
3 | * | 3 | * |
4 | * Copyright 2002 Hewlett-Packard Company | 4 | * Copyright 2002 Hewlett-Packard Company |
5 | * Copyright 2005-2007 Pierre Ossman | 5 | * Copyright 2005-2008 Pierre Ossman |
6 | * | 6 | * |
7 | * Use consistent with the GNU GPL is permitted, | 7 | * Use consistent with the GNU GPL is permitted, |
8 | * provided that this copyright notice is | 8 | * provided that this copyright notice is |
@@ -296,22 +296,24 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req) | |||
296 | 296 | ||
297 | mmc_queue_bounce_post(mq); | 297 | mmc_queue_bounce_post(mq); |
298 | 298 | ||
299 | /* | ||
300 | * Check for errors here, but don't jump to cmd_err | ||
301 | * until later as we need to wait for the card to leave | ||
302 | * programming mode even when things go wrong. | ||
303 | */ | ||
299 | if (brq.cmd.error) { | 304 | if (brq.cmd.error) { |
300 | printk(KERN_ERR "%s: error %d sending read/write command\n", | 305 | printk(KERN_ERR "%s: error %d sending read/write command\n", |
301 | req->rq_disk->disk_name, brq.cmd.error); | 306 | req->rq_disk->disk_name, brq.cmd.error); |
302 | goto cmd_err; | ||
303 | } | 307 | } |
304 | 308 | ||
305 | if (brq.data.error) { | 309 | if (brq.data.error) { |
306 | printk(KERN_ERR "%s: error %d transferring data\n", | 310 | printk(KERN_ERR "%s: error %d transferring data\n", |
307 | req->rq_disk->disk_name, brq.data.error); | 311 | req->rq_disk->disk_name, brq.data.error); |
308 | goto cmd_err; | ||
309 | } | 312 | } |
310 | 313 | ||
311 | if (brq.stop.error) { | 314 | if (brq.stop.error) { |
312 | printk(KERN_ERR "%s: error %d sending stop command\n", | 315 | printk(KERN_ERR "%s: error %d sending stop command\n", |
313 | req->rq_disk->disk_name, brq.stop.error); | 316 | req->rq_disk->disk_name, brq.stop.error); |
314 | goto cmd_err; | ||
315 | } | 317 | } |
316 | 318 | ||
317 | if (!mmc_host_is_spi(card->host) && rq_data_dir(req) != READ) { | 319 | if (!mmc_host_is_spi(card->host) && rq_data_dir(req) != READ) { |
@@ -344,6 +346,9 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req) | |||
344 | #endif | 346 | #endif |
345 | } | 347 | } |
346 | 348 | ||
349 | if (brq.cmd.error || brq.data.error || brq.stop.error) | ||
350 | goto cmd_err; | ||
351 | |||
347 | /* | 352 | /* |
348 | * A block was successfully transferred. | 353 | * A block was successfully transferred. |
349 | */ | 354 | */ |