Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit be601d08 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "mmc: block: flush request requeue after timeout"

parents a550fcb6 3c04cdeb
Loading
Loading
Loading
Loading
+11 −2
Original line number Diff line number Diff line
@@ -1402,18 +1402,27 @@ out:
static int mmc_blk_issue_flush(struct mmc_queue *mq, struct request *req)
{
	struct mmc_blk_data *md = mq->data;
	struct request_queue *q = mq->queue;
	struct mmc_card *card = md->queue.card;
	int ret = 0;

	ret = mmc_flush_cache(card);
	if (ret) {
	if (ret == -ETIMEDOUT) {
		pr_info("%s: %s: requeue flush request after timeout",
				req->rq_disk->disk_name, __func__);
		spin_lock_irq(q->queue_lock);
		blk_requeue_request(q, req);
		spin_unlock_irq(q->queue_lock);
		ret = 0;
		goto exit;
	} else if (ret) {
		pr_err("%s: %s: notify flush error to upper layers",
				req->rq_disk->disk_name, __func__);
		ret = -EIO;
	}

	blk_end_request_all(req, ret);

exit:
	return ret ? 0 : 1;
}

+1 −1
Original line number Diff line number Diff line
@@ -59,7 +59,7 @@ static void mmc_clk_scaling(struct mmc_host *host, bool from_wq);
#define MMC_BKOPS_MAX_TIMEOUT	(30 * 1000) /* max time to wait in ms */

/* Flushing a large amount of cached data may take a long time. */
#define MMC_FLUSH_REQ_TIMEOUT_MS 30000 /* msec */
#define MMC_FLUSH_REQ_TIMEOUT_MS 90000 /* msec */

static struct workqueue_struct *workqueue;
static const unsigned freqs[] = { 400000, 300000, 200000, 100000 };