--- src/sys/kern/kern_sig.c 2004/10/12 19:20:46 1.31 +++ src/sys/kern/kern_sig.c 2004/11/12 00:09:23 1.32 @@ -51,7 +51,7 @@ #include #include #include -#include +#include #include #include #include @@ -1451,7 +1451,7 @@ coredump(struct proc *p) struct ucred *cred = p->p_ucred; struct thread *td = p->p_thread; struct flock lf; - struct nameidata nd; + struct nlookupdata nd; struct vattr vattr; int error, error1; char *name; /* name of corefile */ @@ -1477,13 +1477,17 @@ coredump(struct proc *p) name = expand_name(p->p_comm, p->p_ucred->cr_uid, p->p_pid); if (name == NULL) return (EINVAL); - NDINIT(&nd, NAMEI_LOOKUP, 0, UIO_SYSSPACE, name, td); - error = vn_open(&nd, O_CREAT | FWRITE | O_NOFOLLOW, S_IRUSR | S_IWUSR); + error = nlookup_init(&nd, name, UIO_SYSSPACE, NLC_LOCKVP); + if (error == 0) + error = vn_open(&nd, NULL, O_CREAT | FWRITE | O_NOFOLLOW, S_IRUSR | S_IWUSR); free(name, M_TEMP); - if (error) + if (error) { + nlookup_done(&nd); return (error); - NDFREE(&nd, NDF_ONLY_PNBUF); - vp = nd.ni_vp; + } + vp = nd.nl_open_vp; + nd.nl_open_vp = NULL; + nlookup_done(&nd); VOP_UNLOCK(vp, 0, td); lf.l_whence = SEEK_SET; @@ -1510,8 +1514,7 @@ coredump(struct proc *p) VOP_UNLOCK(vp, 0, td); error = p->p_sysent->sv_coredump ? - p->p_sysent->sv_coredump(p, vp, limit) : - ENOSYS; + p->p_sysent->sv_coredump(p, vp, limit) : ENOSYS; out1: lf.l_type = F_UNLCK;