* [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.