diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c index bc70750dd15..0f9ee46d33a 100644 --- a/drivers/mmc/card/block.c +++ b/drivers/mmc/card/block.c @@ -2181,6 +2181,8 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req) int ret; struct mmc_blk_data *md = mq->data; struct mmc_card *card = md->queue.card; + struct mmc_host *host = card->host; + unsigned long flags; #ifdef CONFIG_MMC_BLOCK_DEFERRED_RESUME if (mmc_bus_needs_resume(card->host)) { @@ -2228,6 +2230,11 @@ static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req) mmc_blk_issue_rw_rq(mq, NULL); ret = mmc_blk_issue_flush(mq, req); } else { + if (!req && host->areq) { + spin_lock_irqsave(&host->context_info.lock, flags); + host->context_info.is_waiting_last_req = true; + spin_unlock_irqrestore(&host->context_info.lock, flags); + } ret = mmc_blk_issue_rw_rq(mq, req); } diff --git a/drivers/mmc/card/queue.c b/drivers/mmc/card/queue.c index ad40660c6ec..9babeabfc89 100644 --- a/drivers/mmc/card/queue.c +++ b/drivers/mmc/card/queue.c @@ -78,14 +78,6 @@ static int mmc_queue_thread(void *d) set_current_state(TASK_INTERRUPTIBLE); req = blk_fetch_request(q); mq->mqrq_cur->req = req; - if (!req && mq->mqrq_prev->req && - !(mq->mqrq_prev->req->cmd_flags & REQ_SANITIZE) && - !(mq->mqrq_prev->req->cmd_flags & REQ_FLUSH) && - !(mq->mqrq_prev->req->cmd_flags & REQ_DISCARD)) { - card->host->context_info.is_waiting_last_req = true; - if (stats && stats->enabled) - stats->null_fetched++; - } spin_unlock_irq(q->queue_lock); if (req || mq->mqrq_prev->req) {