[PATCH] elevator: move clearing of unplug flag earlier
commitef7c3ade5615ed98d4567107eb627b962382a1b2
authorLinas Vepstas <linas@austin.ibm.com>
Tue, 23 Jan 2007 18:40:54 +0000 (23 19:40 +0100)
committerChris Wright <chrisw@sous-sol.org>
Mon, 5 Feb 2007 16:31:42 +0000 (5 08:31 -0800)
tree74092964d5976bffabb77fe4be90a2b4f4c37e88
parent19fad1a2ab244bec784fa252cff8d9bbb1f4f426
[PATCH] elevator: move clearing of unplug flag earlier

A flag was recently added to the elevator code to avoid
performing an unplug when reuests are being re-queued.
The goal of this flag was to avoid a deep recursion that
can occur when re-queueing requests after a SCSI device/host
reset.  See http://lkml.org/lkml/2006/5/17/254

However, that fix added the flag near the bottom of a case
statement, where an earlier break (in an if statement) could
transport one out of the case, without setting the flag.
This patch sets the flag earlier in the case statement.

I re-discovered the deep recursion recently during testing;
I was told that it was a known problem, and the fix to it was
in the kernel I was testing. Indeed it was ... but it didn't
fix the bug. With the patch below, I no longer see the bug.

Signed-off by: Linas Vepstas <linas@austin.ibm.com>
Signed-off-by: Jens Axboe <axboe@suse.de>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
block/elevator.c