Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 18 Apr 1997 17:04:37 -0400 (EDT)
From:      Thomas David Rivers <ponds!rivers@dg-rtp.dg.com>
To:        ponds!nlsystems.com!dfr, ponds!lakes.water.net!rivers
Cc:        ponds!freefall.freebsd.org!freebsd-bugs
Subject:   Re: kern/3304: NFS V2 readdir hangs
Message-ID:  <199704182104.RAA08474@lakes.water.net>

next in thread | raw e-mail | index | archive | help
Doug Rabson writes:
>
   .. my description deleted ..

> 
> Nope.  The lock is done with flags from the struct nfsmount (flagp =
> &rep->r_nmp->nm_flag).  
  
 Oh yes, I see...

>                         This is shared by all the requests and nfsnodes on
> the same mountpoint.  The code in nfs_reply is supposed to continue
> looping until the reply for myrep is recieved.  If any other replies are
> received, they are matched against the list of outstanding requests and
> their owners will notice when they wake up and try to re-get the rcvlock.

 However; the printf()s I've sprinkled around seem to indicate
that the call to nfs_lookup() is getting through the rcvlock() and
doing an sorecieve().

> 
> >   So; we're left with the lookup() failing with a ENONENT (#2),
> >  and the nfs_request from #2 hanging; never being woken up.
> >  
> >    I think that pretty well describes my findings.
> 
> I really need a packet trace to try and get a picture of what is
> happening here.  Could you run 'tcpdump -vv -s300' on a third machine and
> send me the trace.

 Oh my... this is the only FreeBSD machine on this network.  I've got
a SunOS 4.1.3 and HP/UX 9.05 - I don't think I can do this.  Couldn't
I simply to this on the machine that's locking up?

 As an alternative, I can send you my instrumented source (so you can see 
just where my printf()s are) and the messages file... would that help?
[I've touched nfs_vnops.c, nfs_socket.c, uipc_socket.c and uipc_socket2.c;
not too much actually.]

> 
> >  
> >    Perhaps the rcvlock() needs to change to lock on something other
> >  than the nfsreq block... does anyone have any suggestions?
> 
> As mentioned above, the lock is shared by all requests on the same mount
> point.

  Yes - that certainly sounds like it should be the ticket...

  I'm adding a couple of more printf()s and building a new log file...
I want to verify that flagp is being set right in rcvlock(); and make
absolutely sure it's the nfs_request() from lookup() that's confusing
things...

	- Dave Rivers -



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199704182104.RAA08474>