Re: 2.4.20: Proccess stuck in __lock_page ...

manish (manish@storadinc.com)
Wed, 28 May 2003 18:32:46 -0700


Andrew Morton wrote:

>Matthias Mueller <matthias.mueller@rz.uni-karlsruhe.de> wrote:
>
>>Works fine on my notebook. Good throughput and no mouse hangs anymore.
>>
>
>Interesting.
>
>Could you please work out which change caused it? Go back to stock 2.4 and
>then apply this:
>
>
>diff -puN drivers/block/ll_rw_blk.c~1 drivers/block/ll_rw_blk.c
>--- 24/drivers/block/ll_rw_blk.c~1 2003-05-28 03:20:42.000000000 -0700
>+++ 24-akpm/drivers/block/ll_rw_blk.c 2003-05-28 03:20:57.000000000 -0700
>@@ -590,10 +590,10 @@ static struct request *__get_request_wai
> register struct request *rq;
> DECLARE_WAITQUEUE(wait, current);
>
>- generic_unplug_device(q);
> add_wait_queue_exclusive(&q->wait_for_requests[rw], &wait);
> do {
> set_current_state(TASK_UNINTERRUPTIBLE);
>+ generic_unplug_device(q);
> if (q->rq[rw].count == 0)
> schedule();
> spin_lock_irq(&io_request_lock);
>
>
>
>then this:
>
>diff -puN drivers/block/ll_rw_blk.c~2 drivers/block/ll_rw_blk.c
>--- 24/drivers/block/ll_rw_blk.c~2 2003-05-28 03:21:03.000000000 -0700
>+++ 24-akpm/drivers/block/ll_rw_blk.c 2003-05-28 03:21:09.000000000 -0700
>@@ -590,7 +590,7 @@ static struct request *__get_request_wai
> register struct request *rq;
> DECLARE_WAITQUEUE(wait, current);
>
>- add_wait_queue_exclusive(&q->wait_for_requests[rw], &wait);
>+ add_wait_queue(&q->wait_for_requests[rw], &wait);
> do {
> set_current_state(TASK_UNINTERRUPTIBLE);
> generic_unplug_device(q);
>
>
>Then this (totally unlikely, don't bother):
>
>diff -puN drivers/block/ll_rw_blk.c~3 drivers/block/ll_rw_blk.c
>--- 24/drivers/block/ll_rw_blk.c~3 2003-05-28 03:21:15.000000000 -0700
>+++ 24-akpm/drivers/block/ll_rw_blk.c 2003-05-28 03:21:39.000000000 -0700
>@@ -829,8 +829,7 @@ void blkdev_release_request(struct reque
> */
> if (q) {
> list_add(&req->queue, &q->rq[rw].free);
>- if (++q->rq[rw].count >= q->batch_requests &&
>- waitqueue_active(&q->wait_for_requests[rw]))
>+ if (++q->rq[rw].count >= q->batch_requests)
> wake_up(&q->wait_for_requests[rw]);
> }
> }
>
>_
>
Hello !

I have applied patch 1+2+3 and it seemed to have solved the
stalls/pauses that I was seeing with the stock kernel after long hrs of
test using bonnie.

Thanks much
Manish

-
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/