lkml.org 
[lkml]   [2003]   [May]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: 2.4.20: Proccess stuck in __lock_page ...
    On Wed, May 28, 2003 at 03:23:15AM -0700, Andrew Morton wrote:
    > 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]);
    > }
    > }
    >
    > _

    Tested all of them and some combinations:
    patch 1 alone: still mouse hangs
    patch 2 alone: still mouse hangs
    patch 3 alone: no hangs, but I get some zombie process (starting a lot of
    xterms results in zombie xterms, not noticed with vanilla
    and the other patches)
    patch 1+2: no mouse hangs
    patch 1+2+3: no mouse hangs, no zombies

    Bye,
    Matthias
    --
    Matthias.Mueller@rz.uni-karlsruhe.de
    Rechenzentrum Universitaet Karlsruhe
    Abteilung Netze
    -
    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:0.035 / U:7.480 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site