diff options
| author | wrstuden <wrstuden@NetBSD.org> | 1999-02-26 23:38:55 +0000 |
|---|---|---|
| committer | wrstuden <wrstuden@NetBSD.org> | 1999-02-26 23:38:55 +0000 |
| commit | 0078fc50dc6d836be54b41b90e7909c16ee7f270 (patch) | |
| tree | a130e3f785b4600979955d3494b08f1df6b18d76 /sys/kern/exec_script.c | |
| parent | 19d0a457aa184a4e922f8c08bcd49f30f79c62bb (diff) | |
Modify VOP_CLOSE vnode op to always take a locked vnode. Change vn_close
to pass down a locked node. Modify union_copyup() to call VOP_CLOSE
locked nodes.
Also fix a bug in union_copyup() where a lock on the lower vnode would
only be released if VOP_OPEN didn't fail.
Diffstat (limited to 'sys/kern/exec_script.c')
| -rw-r--r-- | sys/kern/exec_script.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/sys/kern/exec_script.c b/sys/kern/exec_script.c index eb146365867..b2f2c6f7203 100644 --- a/sys/kern/exec_script.c +++ b/sys/kern/exec_script.c @@ -1,4 +1,4 @@ -/* $NetBSD: exec_script.c,v 1.19 1998/03/01 02:22:27 fvdl Exp $ */ +/* $NetBSD: exec_script.c,v 1.20 1999/02/26 23:38:55 wrstuden Exp $ */ /* * Copyright (c) 1993, 1994, 1996 Christopher G. Demetriou @@ -248,8 +248,9 @@ check_shell: * list will be used. */ if ((epp->ep_flags & EXEC_HASFD) == 0) { + vn_lock(scriptvp, LK_EXCLUSIVE | LK_RETRY); VOP_CLOSE(scriptvp, FREAD, p->p_ucred, p); - vrele(scriptvp); + vput(scriptvp); } /* free the old pathname buffer */ @@ -284,8 +285,9 @@ fail: epp->ep_flags &= ~EXEC_HASFD; (void) fdrelease(p, epp->ep_fd); } else if (scriptvp) { + vn_lock(scriptvp, LK_EXCLUSIVE | LK_RETRY); VOP_CLOSE(scriptvp, FREAD, p->p_ucred, p); - vrele(scriptvp); + vput(scriptvp); } FREE(epp->ep_ndp->ni_cnd.cn_pnbuf, M_NAMEI); |
