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>