From 1264a7116769f06e4e99625b9e2032bc1be215f9 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=E9=BB=84=E6=B6=9B?= Date: Sat, 30 Jul 2011 22:49:01 +0800 Subject: [PATCH] Revert "mmc_block: fix queue cleanup" This reverts commit a895a6359c2dfa5a7571fd8c23811364aab503b6. --- drivers/mmc/card/block.c | 2 -- drivers/mmc/card/queue.c | 18 +++++++++--------- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c index 8d2bd242ac63..25cc7167fee6 100644 --- a/drivers/mmc/card/block.c +++ b/drivers/mmc/card/block.c @@ -91,8 +91,6 @@ static void mmc_blk_put(struct mmc_blk_data *md) if (!devmaj) devidx = md->disk->first_minor >> MMC_SHIFT; - blk_cleanup_queue(md->queue.queue); - __clear_bit(devidx, dev_use); put_disk(md->disk); diff --git a/drivers/mmc/card/queue.c b/drivers/mmc/card/queue.c index c5a7a855f4b1..49e582356c65 100644 --- a/drivers/mmc/card/queue.c +++ b/drivers/mmc/card/queue.c @@ -90,10 +90,9 @@ static void mmc_request(struct request_queue *q) struct request *req; if (!mq) { - while ((req = blk_fetch_request(q)) != NULL) { - req->cmd_flags |= REQ_QUIET; + printk(KERN_ERR "MMC: killing requests for dead queue\n"); + while ((req = blk_fetch_request(q)) != NULL) __blk_end_request_all(req, -EIO); - } return; } @@ -224,18 +223,17 @@ void mmc_cleanup_queue(struct mmc_queue *mq) struct request_queue *q = mq->queue; unsigned long flags; + /* Mark that we should start throwing out stragglers */ + spin_lock_irqsave(q->queue_lock, flags); + q->queuedata = NULL; + spin_unlock_irqrestore(q->queue_lock, flags); + /* Make sure the queue isn't suspended, as that will deadlock */ mmc_queue_resume(mq); /* Then terminate our worker thread */ kthread_stop(mq->thread); - /* Empty the queue */ - spin_lock_irqsave(q->queue_lock, flags); - q->queuedata = NULL; - blk_start_queue(q); - spin_unlock_irqrestore(q->queue_lock, flags); - if (mq->bounce_sg) kfree(mq->bounce_sg); mq->bounce_sg = NULL; @@ -247,6 +245,8 @@ void mmc_cleanup_queue(struct mmc_queue *mq) kfree(mq->bounce_buf); mq->bounce_buf = NULL; + blk_cleanup_queue(mq->queue); + mq->card = NULL; } EXPORT_SYMBOL(mmc_cleanup_queue); -- 2.34.1