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

Commit 05caf8db authored by Zhang, Yanmin's avatar Zhang, Yanmin Committed by Jens Axboe
Browse files

block: Move the second call to get_request to the end of the loop



In function get_request_wait, the second call to get_request could be
moved to the end of the while loop, because if the first call to
get_request fails, the second call will fail without sleep.

Signed-off-by: default avatarZhang Yanmin <yanmin.zhang@intel.com>
Signed-off-by: default avatarJens Axboe <jens.axboe@oracle.com>
parent ca39d651
Loading
Loading
Loading
Loading
+17 −20
Original line number Diff line number Diff line
@@ -806,16 +806,12 @@ static struct request *get_request_wait(struct request_queue *q, int rw_flags,
	rq = get_request(q, rw_flags, bio, GFP_NOIO);
	while (!rq) {
		DEFINE_WAIT(wait);
		struct io_context *ioc;
		struct request_list *rl = &q->rq;

		prepare_to_wait_exclusive(&rl->wait[rw], &wait,
				TASK_UNINTERRUPTIBLE);

		rq = get_request(q, rw_flags, bio, GFP_NOIO);

		if (!rq) {
			struct io_context *ioc;

		blk_add_trace_generic(q, bio, rw, BLK_TA_SLEEPRQ);

		__generic_unplug_device(q);
@@ -832,9 +828,10 @@ static struct request *get_request_wait(struct request_queue *q, int rw_flags,
		ioc_set_batching(q, ioc);

		spin_lock_irq(q->queue_lock);
		}
		finish_wait(&rl->wait[rw], &wait);
	}

		rq = get_request(q, rw_flags, bio, GFP_NOIO);
	};

	return rq;
}