On Sun, Jan 28 2001, Lorenzo Allegrucci wrote:
> >Ho humm. Jens: imagine that you have more people waiting for requests than
> >"batchcount". Further, imagine that you have multiple requests finishing
> >at the same time. Not unlikely. Now, imagine that one request finishes,
> >and causes "batchcount" users to wake up, and immediately another request
> >finishes but THAT one doesn't wake anybody up because it notices that the
> >freelist isn't empty - so it thinks that it doesn't need to wake anybody.
> >
> >Lorenzo, does the problem go away for you if you remove the
> >
> >     if (!list_empty(&q->request_freelist[rw])) {
> >             ...
> >     }
> >
> >code from blkdev_release_request() in drivers/block/ll_rw_block.c?
> 
> Yes, it does.

How about this instead?

--- /opt/kernel/linux-2.4.1-pre10/drivers/block/ll_rw_blk.c     Thu Jan 25 19:15:12 
2001
+++ drivers/block/ll_rw_blk.c   Sun Jan 28 19:22:20 2001
@@ -633,6 +634,8 @@
                if (!list_empty(&q->request_freelist[rw])) {
                        blk_refill_freelist(q, rw);
                        list_add(&req->table, &q->request_freelist[rw]);
+                       if (waitqueue_active(&q->wait_for_request))
+                               wake_up_nr(&q->wait_for_request, 2);
                        return;
                }
 

-- 
* Jens Axboe <[EMAIL PROTECTED]>
* SuSE Labs
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
Please read the FAQ at http://www.tux.org/lkml/

Reply via email to