diff options
author | jake <jake@FreeBSD.org> | 2001-06-01 01:30:51 +0000 |
---|---|---|
committer | jake <jake@FreeBSD.org> | 2001-06-01 01:30:51 +0000 |
commit | d729aaf55553f13f3b3183a9e6785779d763990a (patch) | |
tree | 92bb6c32b6156554b772b054c89c6cee1b205d87 /sys/nfs | |
parent | afa7c3de74fb925c84e7aa42f36208fab2fcf85f (diff) | |
download | FreeBSD-src-d729aaf55553f13f3b3183a9e6785779d763990a.zip FreeBSD-src-d729aaf55553f13f3b3183a9e6785779d763990a.tar.gz |
Unlock the process returned from pfind() if it does not return NULL.
This fixes a witness lock violation for nfssvc returning with locks
held.
Submitted by: Jean-Luc Richier <Jean-Luc.Richier@imag.fr>
PR: kern/27776
Diffstat (limited to 'sys/nfs')
-rw-r--r-- | sys/nfs/nfs_lock.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/sys/nfs/nfs_lock.c b/sys/nfs/nfs_lock.c index 85bc9d9..9e28eeb 100644 --- a/sys/nfs/nfs_lock.c +++ b/sys/nfs/nfs_lock.c @@ -260,8 +260,10 @@ nfslockdans(p, ansp) ((ansp->la_msg_ident.msg_seq != -1) && (timevalcmp(&p->p_nlminfo->pid_start, &ansp->la_msg_ident.pid_start, !=) || - p->p_nlminfo->msg_seq != ansp->la_msg_ident.msg_seq))) + p->p_nlminfo->msg_seq != ansp->la_msg_ident.msg_seq))) { + PROC_UNLOCK(p); return (EPIPE); + } p->p_nlminfo->retcode = ansp->la_errno; p->p_nlminfo->set_getlk_pid = ansp->la_set_getlk_pid; @@ -269,5 +271,6 @@ nfslockdans(p, ansp) (void)wakeup((void *)p->p_nlminfo); + PROC_UNLOCK(p); return (0); } |