Subject: Nfs client hangs
To: None <tech-kern@netbsd.org>
From: None <rick@snowhite.cis.uoguelph.ca>
List: tech-kern
Date: 10/04/2000 10:56:25
Well, this stuff is getting pretty foggy in my old brain cells (it's embarassing
when you can't remember diddly about something you once wrote:-), but...
Two things come to mind w.r.t. a kernel bug causing this:
1 - There are splXXX() calls in the client timer code that must suspend both
the software timer (the interrupt that does the timeout callbacks) and
the network interrupts. At various times during 4.4 development
splsoftclock() did disable both. If the call currently in the code
doesn't disable both of the above interrupts, the timer queue can/will
get corrupted sooner or later.
2 - The NFS client is a lot more sensitive to race conditions in the buffer
cache code and these usually show up when the server is slow or not
responding, since a write back of a dirty buffer gets hung waiting on
the server, or something like that. Whenever there is any possibility
of a sleep, getbuf() has to go right back up to the top and start over.
(In 4.4 days, I did at least a couple of rounds of careful hand reading
of the buffer cache code to find these. A simple trick is just to throw
a bunch of diagnostic printfs in getbuf() to slow it down, then the
nasties usually show up pretty quickly.)
Getting the "intr" mounts to work correctly also was mostly careful coding
in the buffer cache, so that all the tsleeps would wake up and return EINTR.
(I can't remember which signals work, but I vaguely recall <ctrl>C isn't
one of them, because Gnu Emacs loves to use SIGINTR for something?)
Don't know if any of this will help, but good luck with it, rick
ps: In case anyone is curious, I currently have about 90% of a complete
rewrite of the NFS code done. The rewrite includes V4 and a lot of
major changes to accomodate it. Unfortunately "real work" has interfered,
so it may be Christmas before I have anything working. I don't know
if this will be of use to the NetBSD crowd, since U of Michigan already
has a V4 out, but I'll put it up anonymous ftp when I think it might
be useful to others.