]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blame - releases/2.6.38.8/block-add-proper-state-guards-to-__elv_next_request.patch
Fixes for 4.19
[thirdparty/kernel/stable-queue.git] / releases / 2.6.38.8 / block-add-proper-state-guards-to-__elv_next_request.patch
CommitLineData
3ef2c9d6
GKH
1From 0a58e077eb600d1efd7e54ad9926a75a39d7f8ae Mon Sep 17 00:00:00 2001
2From: James Bottomley <James.Bottomley@suse.de>
3Date: Wed, 18 May 2011 16:20:10 +0200
4Subject: block: add proper state guards to __elv_next_request
5
6From: James Bottomley <James.Bottomley@suse.de>
7
8commit 0a58e077eb600d1efd7e54ad9926a75a39d7f8ae upstream.
9
10blk_cleanup_queue() calls elevator_exit() and after this, we can't
11touch the elevator without oopsing. __elv_next_request() must check
12for this state because in the refcounted queue model, we can still
13call it after blk_cleanup_queue() has been called.
14
15This was reported as causing an oops attributable to scsi.
16
17Signed-off-by: James Bottomley <James.Bottomley@suse.de>
18Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
19Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
20
21---
22 block/blk.h | 3 ++-
23 1 file changed, 2 insertions(+), 1 deletion(-)
24
25--- a/block/blk.h
26+++ b/block/blk.h
27@@ -68,7 +68,8 @@ static inline struct request *__elv_next
28 return rq;
29 }
30
31- if (!q->elevator->ops->elevator_dispatch_fn(q, 0))
32+ if (test_bit(QUEUE_FLAG_DEAD, &q->queue_flags) ||
33+ !q->elevator->ops->elevator_dispatch_fn(q, 0))
34 return NULL;
35 }
36 }