rpc.lockd stability workaround: remove PCATCH from the tsleep() in

nfs_lock.c.  Right now, if we permit a signal to interrupt the sleep,
we will slip the lock and no process on that client, the server, or
any other client will be able to acquire the lock.  This can happen,
for example, if a user hits Ctrl-C or Ctrl-T while a process is
waiting for the lock.  By removing PCATCH, we prevent that from
happening, at the cost of not permitting a user-requested lock abort:
also nasty.  However, a user interface bug might be preferable to a
serious semantic bug, so we go with that for now.

We need to teach the rpc.lockd/kernel protocol how to abort lock
requests, and rpc.lockd how to handle aborted lock requests; patches
for the kernel bit are floating around, but no rpc.lockd bit yet.

Approved by:	re (scottl)
This commit is contained in:
rwatson 2003-05-30 17:15:56 +00:00
parent 2461ce3886
commit 2d61916d16

View File

@ -191,7 +191,7 @@ nfs_dolock(struct vop_advlock_args *ap)
* on a local network). XXX Probably should use a back-off
* scheme.
*/
error = tsleep(p->p_nlminfo, PCATCH | PUSER, "lockd", 20*hz);
error = tsleep(p->p_nlminfo, PUSER, "lockd", 20*hz);
if (error != 0) {
if (error == EWOULDBLOCK) {
/*