Commit 0a58e077 authored by James Bottomley's avatar James Bottomley Committed by Jens Axboe
Browse files

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: default avatarJames Bottomley <James.Bottomley@suse.de>
Cc: stable@kernel.org
Signed-off-by: default avatarJens Axboe <jaxboe@fusionio.com>
parent a2b9c1f6
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -62,7 +62,8 @@ static inline struct request *__elv_next_request(struct request_queue *q)
			return rq;
		}

		if (!q->elevator->ops->elevator_dispatch_fn(q, 0))
		if (test_bit(QUEUE_FLAG_DEAD, &q->queue_flags) ||
		    !q->elevator->ops->elevator_dispatch_fn(q, 0))
			return NULL;
	}
}