Subject: Re: Limited success booting an A3020
To: Ben Harris <bjh21@netbsd.org>
From: Gavan Fantom <gavan@coolfactor.org>
List: port-arm26
Date: 12/03/2001 19:51:41
On Mon, 3 Dec 2001, Ben Harris wrote:

> Hmm.  Does readdir work in general?

Yes. readdir is called a number of times by things earlier in the boot
process, and ls / works, but ls /dev fails.

ls /dev ends up waiting on "getnewbuf", if that helps.

If I let it get to a login prompt and enter root, "login" hangs, in the
middle of a readdir, again on "getnewbuf".

In all of these occasions, nfs_readdir is called, which calls nfs_bioread,
which does not return.

The call within nfs_bioread:

                        rabp = nfs_getcacheblk(vp, nndp->dc_blkno,
                                                NFS_DIRBLKSIZ, p);

does not return, and the path within this to getnewbuf is fairly
straightforward.

In all other readdir operations, the test surrounding the line above
fails, nfs_getcacheblk is not called with those arguments, and the machine
doesn't hang.

                /*
                 * If not eof and read aheads are enabled, start one.
                 * (You need the current block first, so that you have the
                 *  directory offset cookie of the next block.)
                 */
                if (nfs_numasync > 0 && nmp->nm_readahead > 0 &&
                    np->n_direofoffset == 0 && !(np->n_flag &
NQNFSNONCACHE)) {

So maybe a problem with read-aheads?

Are we truly out of buffers, or is there something more subtle going on
here?

-- 
Gillette - the best a man can forget