Changeset View
Changeset View
Standalone View
Standalone View
sys/kern/vfs_syscalls.c
Show First 20 Lines • Show All 1,861 Lines • ▼ Show 20 Lines | if ((error = namei(&nd)) != 0) { | ||||
if (error == EINVAL) | if (error == EINVAL) | ||||
error = EPERM; | error = EPERM; | ||||
goto fdout; | goto fdout; | ||||
} | } | ||||
vp = nd.ni_vp; | vp = nd.ni_vp; | ||||
if (vp->v_type == VDIR && oldinum == 0) { | if (vp->v_type == VDIR && oldinum == 0) { | ||||
error = EPERM; /* POSIX */ | error = EPERM; /* POSIX */ | ||||
} else if (oldinum != 0 && | } else if (oldinum != 0 && | ||||
((error = vn_stat(vp, &sb, td->td_ucred, NOCRED, td)) == 0) && | ((error = VOP_STAT(vp, &sb, td->td_ucred, NOCRED, td)) == 0) && | ||||
sb.st_ino != oldinum) { | sb.st_ino != oldinum) { | ||||
error = EIDRM; /* Identifier removed */ | error = EIDRM; /* Identifier removed */ | ||||
} else if (fp != NULL && fp->f_vnode != vp) { | } else if (fp != NULL && fp->f_vnode != vp) { | ||||
if (VN_IS_DOOMED(fp->f_vnode)) | if (VN_IS_DOOMED(fp->f_vnode)) | ||||
error = EBADF; | error = EBADF; | ||||
else | else | ||||
error = EDEADLK; | error = EDEADLK; | ||||
} else { | } else { | ||||
▲ Show 20 Lines • Show All 497 Lines • ▼ Show 20 Lines | kern_statat(struct thread *td, int flag, int fd, const char *path, | ||||
NDINIT_ATRIGHTS(&nd, LOOKUP, ((flag & AT_SYMLINK_NOFOLLOW) != 0 ? | NDINIT_ATRIGHTS(&nd, LOOKUP, ((flag & AT_SYMLINK_NOFOLLOW) != 0 ? | ||||
NOFOLLOW : FOLLOW) | ((flag & AT_BENEATH) != 0 ? BENEATH : 0) | | NOFOLLOW : FOLLOW) | ((flag & AT_BENEATH) != 0 ? BENEATH : 0) | | ||||
LOCKSHARED | LOCKLEAF | AUDITVNODE1, pathseg, path, fd, | LOCKSHARED | LOCKLEAF | AUDITVNODE1, pathseg, path, fd, | ||||
&cap_fstat_rights, td); | &cap_fstat_rights, td); | ||||
if ((error = namei(&nd)) != 0) | if ((error = namei(&nd)) != 0) | ||||
return (error); | return (error); | ||||
error = vn_stat(nd.ni_vp, sbp, td->td_ucred, NOCRED, td); | error = VOP_STAT(nd.ni_vp, sbp, td->td_ucred, NOCRED, td); | ||||
if (error == 0) { | if (error == 0) { | ||||
SDT_PROBE2(vfs, , stat, mode, path, sbp->st_mode); | SDT_PROBE2(vfs, , stat, mode, path, sbp->st_mode); | ||||
if (S_ISREG(sbp->st_mode)) | if (S_ISREG(sbp->st_mode)) | ||||
SDT_PROBE2(vfs, , stat, reg, path, pathseg); | SDT_PROBE2(vfs, , stat, reg, path, pathseg); | ||||
if (__predict_false(hook != NULL)) | if (__predict_false(hook != NULL)) | ||||
hook(nd.ni_vp, sbp); | hook(nd.ni_vp, sbp); | ||||
} | } | ||||
NDFREE(&nd, NDF_ONLY_PNBUF); | NDFREE(&nd, NDF_ONLY_PNBUF); | ||||
▲ Show 20 Lines • Show All 2,168 Lines • ▼ Show 20 Lines | kern_fhstat(struct thread *td, struct fhandle fh, struct stat *sb) | ||||
if (error != 0) | if (error != 0) | ||||
return (error); | return (error); | ||||
if ((mp = vfs_busyfs(&fh.fh_fsid)) == NULL) | if ((mp = vfs_busyfs(&fh.fh_fsid)) == NULL) | ||||
return (ESTALE); | return (ESTALE); | ||||
error = VFS_FHTOVP(mp, &fh.fh_fid, LK_EXCLUSIVE, &vp); | error = VFS_FHTOVP(mp, &fh.fh_fid, LK_EXCLUSIVE, &vp); | ||||
vfs_unbusy(mp); | vfs_unbusy(mp); | ||||
if (error != 0) | if (error != 0) | ||||
return (error); | return (error); | ||||
error = vn_stat(vp, sb, td->td_ucred, NOCRED, td); | error = VOP_STAT(vp, sb, td->td_ucred, NOCRED, td); | ||||
vput(vp); | vput(vp); | ||||
return (error); | return (error); | ||||
} | } | ||||
/* | /* | ||||
* Implement fstatfs() for (NFS) file handles. | * Implement fstatfs() for (NFS) file handles. | ||||
*/ | */ | ||||
#ifndef _SYS_SYSPROTO_H_ | #ifndef _SYS_SYSPROTO_H_ | ||||
▲ Show 20 Lines • Show All 338 Lines • Show Last 20 Lines |