On Mon, Apr 14 2003, Jens Axboe wrote:
> On Mon, Apr 14 2003, Andrew Morton wrote:
> > Jens Axboe <axboe@suse.de> wrote:
> > >
> > > How would that solve the problem? The request could be gone even before
> > > end_that_request_last() is run, that is the issue.
> >
> > In that case I didn't understand your description of the bug even the tiniest
> > little bit.
> >
> > That request is sitting in the kernel stack of some process which is sleeping
> > in wait_for_completion(). Hence it is safe memory until someone runs
> > complete() against the completion struct.
>
> Sorry you are right, that should fix the problem as well! Your fix is
> probably the better one for 2.4, less intrusive. I'll kill the stack
> requests in 2.5 then.
Marcelo,
Please apply this simpler variant. Thanks!
--- /opt/kernel/linux-2.4.21-pre7/drivers/block/ll_rw_blk.c 2003-04-14 10:48:21.000000000 +0200
+++ drivers/block/ll_rw_blk.c 2003-04-14 12:53:03.000000000 +0200
@@ -1375,11 +1403,12 @@
void end_that_request_last(struct request *req)
{
- if (req->waiting != NULL)
- complete(req->waiting);
- req_finished_io(req);
+ struct completion *waiting = req->waiting;
+ req_finished_io(req);
blkdev_release_request(req);
+ if (waiting)
+ complete(waiting);
}
int __init blk_dev_init(void)
-- Jens Axboe- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
This archive was generated by hypermail 2b29 : Tue Apr 15 2003 - 22:00:30 EST