Date: Fri, 26 Aug 2011 17:45:57 +0000 (UTC) From: Matthew D Fleming <mdf@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r225198 - in projects/ino64/sys: kern sys Message-ID: <201108261745.p7QHjva1064833@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: mdf Date: Fri Aug 26 17:45:56 2011 New Revision: 225198 URL: http://svn.freebsd.org/changeset/base/225198 Log: Add kern_fhstat() wrapper, adjust fhstat() to use it. GSoC r222844. Gode by Gleb Kurtsou. Modified: projects/ino64/sys/kern/vfs_syscalls.c projects/ino64/sys/sys/syscallsubr.h Modified: projects/ino64/sys/kern/vfs_syscalls.c ============================================================================== --- projects/ino64/sys/kern/vfs_syscalls.c Fri Aug 26 17:37:09 2011 (r225197) +++ projects/ino64/sys/kern/vfs_syscalls.c Fri Aug 26 17:45:56 2011 (r225198) @@ -4637,15 +4637,25 @@ struct fhstat_args { }; #endif int -fhstat(td, uap) - struct thread *td; - register struct fhstat_args /* { - struct fhandle *u_fhp; - struct stat *sb; - } */ *uap; +fhstat(struct thread *td, struct fhstat_args *uap) { struct stat sb; - fhandle_t fh; + struct fhandle fh; + int error; + + error = copyin(uap->u_fhp, &fh, sizeof(fh)); + if (error != 0) + return (error); + error = kern_fhstat(td, fh, &sb); + if (error != 0) + return (error); + error = copyout(&sb, uap->sb, sizeof(sb)); + return (error); +} + +int +kern_fhstat(struct thread *td, struct fhandle fh, struct stat *sb) +{ struct mount *mp; struct vnode *vp; int vfslocked; @@ -4654,9 +4664,6 @@ fhstat(td, uap) error = priv_check(td, PRIV_VFS_FHSTAT); if (error) return (error); - error = copyin(uap->u_fhp, &fh, sizeof(fhandle_t)); - if (error) - return (error); if ((mp = vfs_busyfs(&fh.fh_fsid)) == NULL) return (ESTALE); vfslocked = VFS_LOCK_GIANT(mp); @@ -4666,12 +4673,9 @@ fhstat(td, uap) VFS_UNLOCK_GIANT(vfslocked); return (error); } - error = vn_stat(vp, &sb, td->td_ucred, NOCRED, td); + error = vn_stat(vp, sb, td->td_ucred, NOCRED, td); vput(vp); VFS_UNLOCK_GIANT(vfslocked); - if (error) - return (error); - error = copyout(&sb, uap->sb, sizeof(sb)); return (error); } Modified: projects/ino64/sys/sys/syscallsubr.h ============================================================================== --- projects/ino64/sys/sys/syscallsubr.h Fri Aug 26 17:37:09 2011 (r225197) +++ projects/ino64/sys/sys/syscallsubr.h Fri Aug 26 17:45:56 2011 (r225198) @@ -89,6 +89,7 @@ int kern_fchmodat(struct thread *td, int int kern_fchownat(struct thread *td, int fd, char *path, enum uio_seg pathseg, int uid, int gid, int flag); int kern_fcntl(struct thread *td, int fd, int cmd, intptr_t arg); +int kern_fhstat(struct thread *td, fhandle_t fh, struct stat *buf); int kern_fhstatfs(struct thread *td, fhandle_t fh, struct statfs *buf); int kern_fstat(struct thread *td, int fd, struct stat *sbp); int kern_fstatfs(struct thread *td, int fd, struct statfs *buf);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201108261745.p7QHjva1064833>