lkml.org 
[lkml]   [2003]   [May]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patches in this message
    /
    Date
    From
    SubjectRe: 2.4.20: Proccess stuck in __lock_page ...
    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]);
    }
    }
    _

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

    \
     
     \ /
      Last update: 2005-03-22 13:35    [W:3.351 / U:0.168 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site