All of lore.kernel.org
 help / color / mirror / Atom feed
* [patch] elv_former_request reversion
@ 2003-02-16  0:12 Andrew Morton
  2003-02-16  9:32 ` Jens Axboe
  0 siblings, 1 reply; 5+ messages in thread
From: Andrew Morton @ 2003-02-16  0:12 UTC (permalink / raw)
  To: Jens Axboe, Anton Blanchard, Linus Torvalds; +Cc: linux-kernel


This morning's fix for elv_former_request() is causing oopses all over the
place in the IO scheduler.

Jens, remember that I did try that fix a while ago, and the same happened.

I believe it has exposed a new problem at the __make_request/attempt_front_merge
level: if attempt_front_merge() actually succeeds, the wrong request gets freed
up in elv_merged_request().

It may be best to back this change out until it can be fixed up for real.


diff -puN drivers/block/elevator.c~deadline-hack drivers/block/elevator.c
--- 25/drivers/block/elevator.c~deadline-hack	2003-02-15 15:56:56.000000000 -0800
+++ 25-akpm/drivers/block/elevator.c	2003-02-15 15:57:09.000000000 -0800
@@ -399,7 +399,7 @@ struct request *elv_former_request(reque
 	elevator_t *e = &q->elevator;
 
 	if (e->elevator_former_req_fn)
-		return e->elevator_former_req_fn(q, rq);
+		return e->elevator_latter_req_fn(q, rq);
 
 	prev = rq->queuelist.prev;
 	if (prev != &q->queue_head && prev != &rq->queuelist)

_


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [patch] elv_former_request reversion
  2003-02-16  0:12 [patch] elv_former_request reversion Andrew Morton
@ 2003-02-16  9:32 ` Jens Axboe
  2003-02-16 11:59   ` Jens Axboe
  0 siblings, 1 reply; 5+ messages in thread
From: Jens Axboe @ 2003-02-16  9:32 UTC (permalink / raw)
  To: Andrew Morton; +Cc: Anton Blanchard, Linus Torvalds, linux-kernel

On Sat, Feb 15 2003, Andrew Morton wrote:
> 
> This morning's fix for elv_former_request() is causing oopses all over the
> place in the IO scheduler.
> 
> Jens, remember that I did try that fix a while ago, and the same happened.
> 
> I believe it has exposed a new problem at the
> __make_request/attempt_front_merge level: if attempt_front_merge()
> actually succeeds, the wrong request gets freed up in
> elv_merged_request().
> 
> It may be best to back this change out until it can be fixed up for
> real.

Yes agreed, I had forgotten about that point... Will fix.

-- 
Jens Axboe


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [patch] elv_former_request reversion
  2003-02-16  9:32 ` Jens Axboe
@ 2003-02-16 11:59   ` Jens Axboe
  2003-02-16 12:29     ` Andrew Morton
  2003-02-16 12:53     ` Anton Blanchard
  0 siblings, 2 replies; 5+ messages in thread
From: Jens Axboe @ 2003-02-16 11:59 UTC (permalink / raw)
  To: Andrew Morton; +Cc: Anton Blanchard, Linus Torvalds, linux-kernel

On Sun, Feb 16 2003, Jens Axboe wrote:
> On Sat, Feb 15 2003, Andrew Morton wrote:
> > 
> > This morning's fix for elv_former_request() is causing oopses all over the
> > place in the IO scheduler.
> > 
> > Jens, remember that I did try that fix a while ago, and the same happened.
> > 
> > I believe it has exposed a new problem at the
> > __make_request/attempt_front_merge level: if attempt_front_merge()
> > actually succeeds, the wrong request gets freed up in
> > elv_merged_request().
> > 
> > It may be best to back this change out until it can be fixed up for
> > real.
> 
> Yes agreed, I had forgotten about that point... Will fix.

Andrew, does this work for you?

===== drivers/block/deadline-iosched.c 1.14 vs edited =====
--- 1.14/drivers/block/deadline-iosched.c	Fri Feb 14 13:57:15 2003
+++ edited/drivers/block/deadline-iosched.c	Sun Feb 16 12:57:35 2003
@@ -297,6 +297,9 @@
 		deadline_del_drq_rb(dd, drq);
 	}
 
+	if (q->last_merge == &rq->queuelist)
+		q->last_merge = NULL;
+
 	list_del_init(&rq->queuelist);
 }
 
@@ -424,12 +427,7 @@
 {
 	request_queue_t *q = drq->request->q;
 
-	if (q->last_merge == &drq->request->queuelist)
-		q->last_merge = NULL;
-
-	deadline_del_drq_hash(drq);
-	deadline_del_drq_rb(dd, drq);
-	list_del_init(&drq->fifo);
+	deadline_remove_request(q, drq->request);
 	list_add_tail(&drq->request->queuelist, dd->dispatch);
 }
 
===== drivers/block/elevator.c 1.39 vs edited =====
--- 1.39/drivers/block/elevator.c	Sun Feb 16 00:57:09 2003
+++ edited/drivers/block/elevator.c	Sun Feb 16 11:32:35 2003
@@ -399,7 +399,7 @@
 	elevator_t *e = &q->elevator;
 
 	if (e->elevator_former_req_fn)
-		return e->elevator_latter_req_fn(q, rq);
+		return e->elevator_former_req_fn(q, rq);
 
 	prev = rq->queuelist.prev;
 	if (prev != &q->queue_head && prev != &rq->queuelist)

-- 
Jens Axboe


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [patch] elv_former_request reversion
  2003-02-16 11:59   ` Jens Axboe
@ 2003-02-16 12:29     ` Andrew Morton
  2003-02-16 12:53     ` Anton Blanchard
  1 sibling, 0 replies; 5+ messages in thread
From: Andrew Morton @ 2003-02-16 12:29 UTC (permalink / raw)
  To: Jens Axboe; +Cc: anton, torvalds, linux-kernel

Jens Axboe <axboe@suse.de> wrote:
>
> Andrew, does this work for you?

Yes.  I threw a bunch of nastiness at that on IDE and SCSI, 2-way and 4-way. 
No problems.  Thanks.


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [patch] elv_former_request reversion
  2003-02-16 11:59   ` Jens Axboe
  2003-02-16 12:29     ` Andrew Morton
@ 2003-02-16 12:53     ` Anton Blanchard
  1 sibling, 0 replies; 5+ messages in thread
From: Anton Blanchard @ 2003-02-16 12:53 UTC (permalink / raw)
  To: Jens Axboe; +Cc: Andrew Morton, Linus Torvalds, linux-kernel


> Andrew, does this work for you?

Looks good on my ppc64 box too, it was hitting the BUG() when running
SDET before.

Anton

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2003-02-16 12:44 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2003-02-16  0:12 [patch] elv_former_request reversion Andrew Morton
2003-02-16  9:32 ` Jens Axboe
2003-02-16 11:59   ` Jens Axboe
2003-02-16 12:29     ` Andrew Morton
2003-02-16 12:53     ` Anton Blanchard

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.