summaryrefslogtreecommitdiff
path: root/sys/kern/exec_script.c
diff options
context:
space:
mode:
authorwrstuden <wrstuden@NetBSD.org>1999-02-26 23:38:55 +0000
committerwrstuden <wrstuden@NetBSD.org>1999-02-26 23:38:55 +0000
commit0078fc50dc6d836be54b41b90e7909c16ee7f270 (patch)
treea130e3f785b4600979955d3494b08f1df6b18d76 /sys/kern/exec_script.c
parent19d0a457aa184a4e922f8c08bcd49f30f79c62bb (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.c8
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);