Skip to content

Commit

Permalink
[PATCH] elevator: move clearing of unplug flag earlier
Browse files Browse the repository at this point in the history
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 <[email protected]>
Signed-off-by: Jens Axboe <[email protected]>
Cc: Chris Wright <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
  • Loading branch information
Linas Vepstas authored and Linus Torvalds committed Jan 23, 2007
1 parent 3a71229 commit 9554317
Showing 1 changed file with 6 additions and 5 deletions.
11 changes: 6 additions & 5 deletions block/elevator.c
Original file line number Diff line number Diff line change
Expand Up @@ -590,6 +590,12 @@ void elv_insert(request_queue_t *q, struct request *rq, int where)
*/
rq->cmd_flags |= REQ_SOFTBARRIER;

/*
* Most requeues happen because of a busy condition,
* don't force unplug of the queue for that case.
*/
unplug_it = 0;

if (q->ordseq == 0) {
list_add(&rq->queuelist, &q->queue_head);
break;
Expand All @@ -604,11 +610,6 @@ void elv_insert(request_queue_t *q, struct request *rq, int where)
}

list_add_tail(&rq->queuelist, pos);
/*
* most requeues happen because of a busy condition, don't
* force unplug of the queue for that case.
*/
unplug_it = 0;
break;

default:
Expand Down

0 comments on commit 9554317

Please sign in to comment.