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

Commit fd782a4a authored by Hugh Dickins's avatar Hugh Dickins Committed by Linus Torvalds
Browse files

[PATCH] Fix get_request nastiness



get_request is now expected to be holding on to queue_lock, with interrupts
disabled, when it returns NULL; but one path forgot that, causing all kinds
of nastiness under swap load - badness backtraces, strange failures, BUGs.

Signed-off-by: default avatarHugh Dickins <hugh@veritas.com>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 541cecac
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -1917,10 +1917,9 @@ static struct request *get_request(request_queue_t *q, int rw, struct bio *bio,
	 * limit of requests, otherwise we could have thousands of requests
	 * allocated with any setting of ->nr_requests
	 */
	if (rl->count[rw] >= (3 * q->nr_requests / 2)) {
		spin_unlock_irq(q->queue_lock);
	if (rl->count[rw] >= (3 * q->nr_requests / 2))
		goto out;
	}

	rl->count[rw]++;
	rl->starved[rw] = 0;
	if (rl->count[rw] >= queue_congestion_on_threshold(q))