Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 12 Aug 1997 20:05:39 -0700
From:      Julian Elischer <julian@whistle.com>
To:        Michael Smith <msmith@atrad.adelaide.edu.au>
Cc:        julian@FreeBSD.ORG, hackers@FreeBSD.ORG
Subject:   Re: 2.2.2+ crash.. more info
Message-ID:  <33F12483.2781E494@whistle.com>
References:  <199708130234.MAA11390@genesis.atrad.adelaide.edu.au>

next in thread | previous in thread | raw e-mail | index | archive | help
Michael Smith wrote:
> 
> Julian Elischer stands accused of saying:
> > Michael Smith wrote:
> > >
> > > Julian Elischer stands accused of saying:
> > > >
> > > > We have several hundred Bsd machines here.. we see this one 
> > > > enough for
> > > > me to recognise it..

> > the fact that the process got put on the a sleep queue while it was
> > on the runnable queue. suggests that maybe an interrupt driver
> > ran 'tsleep' while curproc had the value of this process in it..
stupidly I have a big clue right in front of me that I didn't mention..

the process in question has a wait channel of 'swread'
that's in the VM code..
in fact, in:
static int swap_pager_getpages(object, m, count, reqpage)
...
        /*
         * wait for the sync I/O to complete
         */
        s = splbio();
        while ((bp->b_flags & B_DONE) == 0) {
                if (tsleep(bp, PVM, "swread", hz*20)) {
                        printf("swap_pager: indefinite wait buffer:
device: %d,
blkno: %d, size: %d\n",
                                bp->b_dev, bp->b_blkno, bp->b_bcount);
                }       
        }



what I wonder about is: does this ever get run in the context of
another process?  who runs this?
etc.

I think (after discussion with john) that the quick test will be to 
add code to tsleep to check if the process being slept is still on the 
run queue..



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?33F12483.2781E494>