Commit 0a58e077eb600d1efd7e54ad9926a75a39d7f8ae

Authored by James Bottomley
Committed by Jens Axboe
1 parent a2b9c1f620

block: add proper state guards to __elv_next_request

blk_cleanup_queue() calls elevator_exit() and after this, we can't
touch the elevator without oopsing.  __elv_next_request() must check
for this state because in the refcounted queue model, we can still
call it after blk_cleanup_queue() has been called.

This was reported as causing an oops attributable to scsi.

Signed-off-by: James Bottomley <James.Bottomley@suse.de>
Cc: stable@kernel.org
Signed-off-by: Jens Axboe <jaxboe@fusionio.com>

Showing 1 changed file with 2 additions and 1 deletions Side-by-side Diff

... ... @@ -62,7 +62,8 @@
62 62 return rq;
63 63 }
64 64  
65   - if (!q->elevator->ops->elevator_dispatch_fn(q, 0))
  65 + if (test_bit(QUEUE_FLAG_DEAD, &q->queue_flags) ||
  66 + !q->elevator->ops->elevator_dispatch_fn(q, 0))
66 67 return NULL;
67 68 }
68 69 }