diff options
author | jeff <jeff@FreeBSD.org> | 2002-08-13 06:55:28 +0000 |
---|---|---|
committer | jeff <jeff@FreeBSD.org> | 2002-08-13 06:55:28 +0000 |
commit | a996673e123dab0805b05084774227cae72d75e5 (patch) | |
tree | 9e630263213e8fdda8c938a92f150220b0eb745d /sys/alpha/osf1 | |
parent | 216ea61cb629b077f8cf1b29f90f2c08ff1b1eea (diff) | |
download | FreeBSD-src-a996673e123dab0805b05084774227cae72d75e5.zip FreeBSD-src-a996673e123dab0805b05084774227cae72d75e5.tar.gz |
- Hold the vnode lock throughout execve.
- Set VV_TEXT in the top level execve code.
- Fixup the image activators to deal with the newly locked vnode.
Diffstat (limited to 'sys/alpha/osf1')
-rw-r--r-- | sys/alpha/osf1/imgact_osf1.c | 14 |
1 files changed, 1 insertions, 13 deletions
diff --git a/sys/alpha/osf1/imgact_osf1.c b/sys/alpha/osf1/imgact_osf1.c index 3a640b4..1a44189 100644 --- a/sys/alpha/osf1/imgact_osf1.c +++ b/sys/alpha/osf1/imgact_osf1.c @@ -146,12 +146,11 @@ exec_osf1_imgact(struct image_params *imgp) return(error); } if (imgp->vp) { - vrele(imgp->vp); + vput(imgp->vp); /* leaking in the nameizone ??? XXX */ } imgp->vp = ndp->ni_vp; error = exec_map_first_page(imgp); - VOP_UNLOCK(imgp->vp, 0, FIRST_THREAD_IN_PROC(imgp->proc)); osf_auxargs->loader = "/compat/osf1/sbin/loader"; } @@ -188,17 +187,6 @@ exec_osf1_imgact(struct image_params *imgp) imgp->interpreted = 0; imgp->proc->p_sysent = &osf1_sysvec; - mp_fixme("Unlocked writecount and v_vflag access."); - if ((eap->tsize != 0 || eap->dsize != 0) && - imgp->vp->v_writecount != 0) { -#ifdef DIAGNOSTIC - if (imgp->vp->v_vflag & VV_TEXT) - panic("exec: a VV_TEXT vnode has writecount != 0\n"); -#endif - return ETXTBSY; - } - imgp->vp->v_vflag |= VV_TEXT; - /* set up text segment */ if ((error = vm_mmap(&vmspace->vm_map, &taddr, tsize, VM_PROT_READ|VM_PROT_EXECUTE, VM_PROT_ALL, MAP_FIXED|MAP_COPY, |