diff options
author | Mateusz Guzik <mjg@FreeBSD.org> | 2015-07-14 00:43:08 +0000 |
---|---|---|
committer | Mateusz Guzik <mjg@FreeBSD.org> | 2015-07-14 00:43:08 +0000 |
commit | 853be5ffef88fe2c8f06f07cc44922e97ad5eb3e (patch) | |
tree | deab582aab3718712aaf3dfe5ecb79423a340f63 /sys/kern/kern_exec.c | |
parent | e94e50af1dbefd1fb72e048d37c020d781a2615a (diff) | |
download | src-853be5ffef88fe2c8f06f07cc44922e97ad5eb3e.tar.gz src-853be5ffef88fe2c8f06f07cc44922e97ad5eb3e.zip |
exec plug a redundant vref + vrele of the image vnode
Notes
Notes:
svn path=/head/; revision=285512
Diffstat (limited to 'sys/kern/kern_exec.c')
-rw-r--r-- | sys/kern/kern_exec.c | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/sys/kern/kern_exec.c b/sys/kern/kern_exec.c index 859b2e342825..d3e831f6e14f 100644 --- a/sys/kern/kern_exec.c +++ b/sys/kern/kern_exec.c @@ -600,9 +600,6 @@ interpret: vn_lock(imgp->vp, LK_SHARED | LK_RETRY); - /* Get a reference to the vnode prior to locking the proc */ - VREF(binvp); - /* * For security and other reasons, signal handlers cannot * be shared after an exec. The new process gets a copy of the old @@ -767,8 +764,8 @@ interpret: } /* - * Store the vp for use in procfs. This vnode was referenced prior - * to locking the proc lock. + * Store the vp for use in procfs. This vnode was referenced by namei + * or fgetvp_exec. */ textvp = p->p_textvp; p->p_textvp = binvp; @@ -850,8 +847,6 @@ done1: */ if (textvp != NULL) vrele(textvp); - if (error != 0) - vrele(binvp); #ifdef KTRACE if (tracevp != NULL) vrele(tracevp); @@ -877,7 +872,10 @@ exec_fail_dealloc: NDFREE(&nd, NDF_ONLY_PNBUF); if (imgp->opened) VOP_CLOSE(imgp->vp, FREAD, td->td_ucred, td); - vput(imgp->vp); + if (error != 0) + vput(imgp->vp); + else + VOP_UNLOCK(imgp->vp, 0); } if (imgp->object != NULL) |