Index: sys/kern/kern_ktrace.c =================================================================== --- sys/kern/kern_ktrace.c +++ sys/kern/kern_ktrace.c @@ -699,8 +699,7 @@ } void -ktrnamei(path) - char *path; +ktrnamei(const char *path) { struct ktr_request *req; int namelen; @@ -1018,7 +1017,6 @@ return (EINVAL); kiop = NULL; - ktrace_enter(td); if (ops != KTROP_CLEAR) { /* * an operation which requires a file argument. @@ -1026,24 +1024,23 @@ NDINIT(&nd, LOOKUP, NOFOLLOW, UIO_USERSPACE, uap->fname, td); flags = FREAD | FWRITE | O_NOFOLLOW; error = vn_open(&nd, &flags, 0, NULL); - if (error) { - ktrace_exit(td); + if (error) return (error); - } NDFREE(&nd, NDF_ONLY_PNBUF); vp = nd.ni_vp; VOP_UNLOCK(vp); if (vp->v_type != VREG) { - (void) vn_close(vp, FREAD|FWRITE, td->td_ucred, td); - ktrace_exit(td); + (void)vn_close(vp, FREAD|FWRITE, td->td_ucred, td); return (EACCES); } kiop = ktr_io_params_alloc(td, vp); kiop->refs++; } + /* * Clear all uses of the tracefile. */ + ktrace_enter(td); if (ops == KTROP_CLEARFILE) { restart: sx_slock(&allproc_lock); Index: sys/sys/ktrace.h =================================================================== --- sys/sys/ktrace.h +++ sys/sys/ktrace.h @@ -269,7 +269,7 @@ struct vnode *ktr_get_tracevp(struct proc *, bool); void ktr_io_params_free(struct ktr_io_params *); -void ktrnamei(char *); +void ktrnamei(const char *); void ktrcsw(int, int, const char *); void ktrpsig(int, sig_t, sigset_t *, int); void ktrfault(vm_offset_t, int);