socsvn commit: r223366 - in soc2011/gk/ino64-head/sys: compat/freebsd32 kern sys

gk at FreeBSD.org gk at FreeBSD.org
Fri Jun 17 22:28:57 UTC 2011


Author: gk
Date: Fri Jun 17 22:28:55 2011
New Revision: 223366
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=223366

Log:
  Change ino_t to 64 bits and nlink_t to 32 bits. Add new syscalls

Modified:
  soc2011/gk/ino64-head/sys/compat/freebsd32/freebsd32.h
  soc2011/gk/ino64-head/sys/compat/freebsd32/freebsd32_misc.c
  soc2011/gk/ino64-head/sys/compat/freebsd32/syscalls.master
  soc2011/gk/ino64-head/sys/kern/kern_descrip.c
  soc2011/gk/ino64-head/sys/kern/syscalls.master
  soc2011/gk/ino64-head/sys/kern/vfs_syscalls.c
  soc2011/gk/ino64-head/sys/sys/_types.h
  soc2011/gk/ino64-head/sys/sys/stat.h
  soc2011/gk/ino64-head/sys/sys/vnode.h

Modified: soc2011/gk/ino64-head/sys/compat/freebsd32/freebsd32.h
==============================================================================
--- soc2011/gk/ino64-head/sys/compat/freebsd32/freebsd32.h	Fri Jun 17 21:44:13 2011	(r223365)
+++ soc2011/gk/ino64-head/sys/compat/freebsd32/freebsd32.h	Fri Jun 17 22:28:55 2011	(r223366)
@@ -137,10 +137,31 @@
 };
 
 struct stat32 {
-	dev_t	st_dev;
 	ino_t	st_ino;
-	mode_t	st_mode;
 	nlink_t	st_nlink;
+	dev_t	st_dev;
+	mode_t	st_mode;
+	u_int16_t st_padding0;
+	uid_t	st_uid;
+	gid_t	st_gid;
+	dev_t	st_rdev;
+	struct timespec32 st_atim;
+	struct timespec32 st_mtim;
+	struct timespec32 st_ctim;
+	off_t	st_size;
+	int64_t	st_blocks;
+	u_int32_t st_blksize;
+	u_int32_t st_flags;
+	u_int32_t st_gen;
+	struct timespec32 st_birthtim;
+	unsigned int :(8 / 2) * (16 - (int)sizeof(struct timespec32));
+	unsigned int :(8 / 2) * (16 - (int)sizeof(struct timespec32));
+};
+struct freebsd8_stat32 {
+	dev_t	st_dev;
+	u_int32_t st_ino;
+	mode_t	st_mode;
+	u_int16_t st_nlink;
 	uid_t	st_uid;
 	gid_t	st_gid;
 	dev_t	st_rdev;
@@ -159,9 +180,9 @@
 
 struct ostat32 {
 	__uint16_t st_dev;
-	ino_t	st_ino;
+	__uint32_t st_ino;
 	mode_t	st_mode;
-	nlink_t	st_nlink;
+	__uint16_t st_nlink;
 	__uint16_t st_uid;
 	__uint16_t st_gid;
 	__uint16_t st_rdev;

Modified: soc2011/gk/ino64-head/sys/compat/freebsd32/freebsd32_misc.c
==============================================================================
--- soc2011/gk/ino64-head/sys/compat/freebsd32/freebsd32_misc.c	Fri Jun 17 21:44:13 2011	(r223365)
+++ soc2011/gk/ino64-head/sys/compat/freebsd32/freebsd32_misc.c	Fri Jun 17 22:28:55 2011	(r223366)
@@ -113,7 +113,8 @@
 CTASSERT(sizeof(struct kevent32) == 20);
 CTASSERT(sizeof(struct iovec32) == 8);
 CTASSERT(sizeof(struct msghdr32) == 28);
-CTASSERT(sizeof(struct stat32) == 96);
+CTASSERT(sizeof(struct stat32) == 104);
+CTASSERT(sizeof(struct freebsd8_stat32) == 96);
 CTASSERT(sizeof(struct sigaction32) == 24);
 
 static int freebsd32_kevent_copyout(void *arg, struct kevent *kevp, int count);
@@ -1797,6 +1798,133 @@
 #endif
 
 int
+freebsd32_fhstat(struct thread *td, struct freebsd32_fhstat_args *uap)
+{
+	struct stat sb;
+	struct stat32 sb32;
+	struct fhandle fh;
+	int error;
+
+	error = copyin(uap->u_fhp, &fh, sizeof(fhandle_t));
+        if (error != 0)
+                return (error);
+	error = kern_fhstat(td, fh, &sb);
+	if (error != 0)
+		return (error);
+	copy_stat(&sb, &sb32);
+	error = copyout(&sb32, uap->sb, sizeof (sb32));
+	return (error);
+}
+
+#ifdef COMPAT_FREEBSD8
+static void
+freebsd8_cvtstat32(struct stat *in, struct freebsd8_stat32 *out)
+{
+	CP(*in, *out, st_ino);
+	CP(*in, *out, st_nlink);
+	CP(*in, *out, st_dev);
+	CP(*in, *out, st_mode);
+	CP(*in, *out, st_uid);
+	CP(*in, *out, st_gid);
+	CP(*in, *out, st_rdev);
+	TS_CP(*in, *out, st_atim);
+	TS_CP(*in, *out, st_mtim);
+	TS_CP(*in, *out, st_ctim);
+	CP(*in, *out, st_size);
+	CP(*in, *out, st_blocks);
+	CP(*in, *out, st_blksize);
+	CP(*in, *out, st_flags);
+	CP(*in, *out, st_gen);
+	TS_CP(*in, *out, st_birthtim);
+}
+
+int
+freebsd8_freebsd32_stat(struct thread *td,
+    struct freebsd8_freebsd32_stat_args *uap)
+{
+	struct stat sb;
+	struct freebsd8_stat32 sb32;
+	int error;
+
+	error = kern_stat(td, uap->path, UIO_USERSPACE, &sb);
+	if (error != 0)
+		return (error);
+	freebsd8_cvtstat32(&sb, &sb32);
+	error = copyout(&sb32, uap->ub, sizeof (sb32));
+	return (error);
+}
+
+int
+freebsd8_freebsd32_fstat(struct thread *td,
+    struct freebsd8_freebsd32_fstat_args *uap)
+{
+	struct stat sb;
+	struct freebsd8_stat32 sb32;
+	int error;
+
+	error = kern_fstat(td, uap->fd, &sb);
+	if (error != 0)
+		return (error);
+	freebsd8_cvtstat32(&sb, &sb32);
+	error = copyout(&sb32, uap->ub, sizeof (sb32));
+	return (error);
+}
+
+int
+freebsd8_freebsd32_fstatat(struct thread *td,
+    struct freebsd8_freebsd32_fstatat_args *uap)
+{
+	struct stat sb;
+	struct freebsd8_stat32 sb32;
+	int error;
+
+	error = kern_statat(td, uap->flag, uap->fd, uap->path, UIO_USERSPACE,
+	    &sb);
+	if (error != 0)
+		return (error);
+	freebsd8_cvtstat32(&sb, &sb32);
+	error = copyout(&sb32, uap->buf, sizeof (sb32));
+	return (error);
+}
+
+int
+freebsd8_freebsd32_lstat(struct thread *td,
+    struct freebsd8_freebsd32_lstat_args *uap)
+{
+	struct stat sb;
+	struct freebsd8_stat32 sb32;
+	int error;
+
+	error = kern_lstat(td, uap->path, UIO_USERSPACE, &sb);
+	if (error != 0)
+		return (error);
+	freebsd8_cvtstat32(&sb, &sb32);
+	error = copyout(&sb32, uap->ub, sizeof (sb32));
+	return (error);
+}
+
+int
+freebsd8_freebsd32_fhstat(struct thread *td,
+    struct freebsd8_freebsd32_fhstat_args *uap)
+{
+	struct stat sb;
+	struct freebsd8_stat32 sb32;
+	struct fhandle fh;
+	int error;
+
+	error = copyin(uap->u_fhp, &fh, sizeof(fhandle_t));
+        if (error != 0)
+                return (error);
+	error = kern_fhstat(td, fh, &sb);
+	if (error != 0)
+		return (error);
+	freebsd8_cvtstat32(&sb, &sb32);
+	error = copyout(&sb32, uap->sb, sizeof (sb32));
+	return (error);
+}
+#endif
+
+int
 freebsd32_sysctl(struct thread *td, struct freebsd32_sysctl_args *uap)
 {
 	int error, name[CTL_MAXNAME];

Modified: soc2011/gk/ino64-head/sys/compat/freebsd32/syscalls.master
==============================================================================
--- soc2011/gk/ino64-head/sys/compat/freebsd32/syscalls.master	Fri Jun 17 21:44:13 2011	(r223365)
+++ soc2011/gk/ino64-head/sys/compat/freebsd32/syscalls.master	Fri Jun 17 22:28:55 2011	(r223366)
@@ -344,12 +344,12 @@
 185	AUE_NULL	UNIMPL	lfs_markv
 186	AUE_NULL	UNIMPL	lfs_segclean
 187	AUE_NULL	UNIMPL	lfs_segwait
-188	AUE_STAT	STD	{ int freebsd32_stat(char *path, \
-				    struct stat32 *ub); }
-189	AUE_FSTAT	STD	{ int freebsd32_fstat(int fd, \
-				    struct stat32 *ub); }
-190	AUE_LSTAT	STD	{ int freebsd32_lstat(char *path, \
-				    struct stat32 *ub); }
+188	AUE_STAT	COMPAT8	{ int freebsd32_stat(char *path, \
+				    struct freebsd8_stat32 *ub); }
+189	AUE_FSTAT	COMPAT8	{ int freebsd32_fstat(int fd, \
+				    struct freebsd8_stat32 *ub); }
+190	AUE_LSTAT	COMPAT8	{ int freebsd32_lstat(char *path, \
+				    struct freebsd8_stat32 *ub); }
 191	AUE_PATHCONF	NOPROTO	{ int pathconf(char *path, int name); }
 192	AUE_FPATHCONF	NOPROTO	{ int fpathconf(int fd, int name); }
 193	AUE_NULL	UNIMPL	nosys
@@ -528,8 +528,8 @@
 				    struct statfs32 *buf); }
 298	AUE_FHOPEN	NOPROTO	{ int fhopen(const struct fhandle *u_fhp, \
 			 	    int flags); }
-299	AUE_FHSTAT	NOPROTO	{ int fhstat(const struct fhandle *u_fhp, \
-				    struct stat *sb); }
+299	AUE_FHSTAT	COMPAT8	{ int freebsd32_fhstat(const struct fhandle *u_fhp, \
+				    struct freebsd8_stat32 *sb); }
 ; syscall numbers for FreeBSD
 300	AUE_NULL	NOPROTO	{ int modnext(int modid); }
 301	AUE_NULL	STD	{ int freebsd32_modstat(int modid, \
@@ -919,8 +919,9 @@
 				    gid_t gid, int flag); }
 492	AUE_FEXECVE	STD	{ int freebsd32_fexecve(int fd, \
 				    u_int32_t *argv, u_int32_t *envv); }
-493	AUE_FSTATAT	STD	{ int freebsd32_fstatat(int fd, char *path, \
-				    struct stat *buf, int flag); }
+493	AUE_FSTATAT	COMPAT8	{ int freebsd32_fstatat(int fd, \
+				    char *path, struct freebsd8_stat32 *buf, \
+				    int flag); }
 494	AUE_FUTIMESAT	STD	{ int freebsd32_futimesat(int fd, char *path, \
 				    struct timeval *times); }
 495	AUE_LINKAT	NOPROTO	{ int linkat(int fd1, char *path1, int fd2, \
@@ -991,3 +992,13 @@
 				     uint32_t offsetlo, uint32_t offsethi,\
 				     uint32_t lenlo, uint32_t lenhi); }
 531	AUE_NULL	UNIMPL	posix_fadvise
+532	AUE_STAT	STD	{ int freebsd32_stat(char *path, \
+				    struct stat32 *ub); }
+533	AUE_FSTAT	STD	{ int freebsd32_fstat(int fd, \
+				    struct stat32 *ub); }
+534	AUE_LSTAT	STD	{ int freebsd32_lstat(char *path, \
+				    struct stat32 *ub); }
+535	AUE_FHSTAT	STD	{ int freebsd32_fhstat(const struct fhandle *u_fhp, \
+				    struct stat32 *sb); }
+536	AUE_FSTATAT	STD	{ int freebsd32_fstatat(int fd, char *path, \
+				    struct stat32 *buf, int flag); }

Modified: soc2011/gk/ino64-head/sys/kern/kern_descrip.c
==============================================================================
--- soc2011/gk/ino64-head/sys/kern/kern_descrip.c	Fri Jun 17 21:44:13 2011	(r223365)
+++ soc2011/gk/ino64-head/sys/kern/kern_descrip.c	Fri Jun 17 22:28:55 2011	(r223366)
@@ -1271,6 +1271,31 @@
 }
 #endif /* COMPAT_43 */
 
+#if defined(COMPAT_FREEBSD4) || defined(COMPAT_FREEBSD5) || \
+    defined(COMPAT_FREEBSD6) || defined(COMPAT_FREEBSD7) || \
+    defined(COMPAT_FREEBSD8)
+#ifndef _SYS_SYSPROTO_H_
+struct freebsd8_fstat_args {
+	int	fd;
+	struct	freebsd8_stat *sb;
+};
+#endif
+int
+freebsd8_fstat(struct thread *td, struct freebsd8_fstat_args *uap)
+{
+	struct stat sb;
+	struct freebsd8_stat osb;
+	int error;
+
+	error = kern_fstat(td, uap->fd, &sb);
+	if (error != 0)
+		return (error);
+	freebsd8_cvtstat(&sb, &osb);
+	error = copyout(&osb, uap->sb, sizeof(osb));
+	return (error);
+}
+#endif	/* COMPAT_FREEBSD8 */
+
 /*
  * Return status information about a file descriptor.
  */

Modified: soc2011/gk/ino64-head/sys/kern/syscalls.master
==============================================================================
--- soc2011/gk/ino64-head/sys/kern/syscalls.master	Fri Jun 17 21:44:13 2011	(r223365)
+++ soc2011/gk/ino64-head/sys/kern/syscalls.master	Fri Jun 17 22:28:55 2011	(r223366)
@@ -364,9 +364,12 @@
 185	AUE_NULL	UNIMPL	lfs_markv
 186	AUE_NULL	UNIMPL	lfs_segclean
 187	AUE_NULL	UNIMPL	lfs_segwait
-188	AUE_STAT	STD	{ int stat(char *path, struct stat *ub); }
-189	AUE_FSTAT	STD	{ int fstat(int fd, struct stat *sb); }
-190	AUE_LSTAT	STD	{ int lstat(char *path, struct stat *ub); }
+188	AUE_STAT	COMPAT8	{ int stat(char *path, \
+				    struct freebsd8_stat *ub); }
+189	AUE_FSTAT	COMPAT8	{ int fstat(int fd, \
+				    struct freebsd8_stat *sb); }
+190	AUE_LSTAT	COMPAT8	{ int lstat(char *path, \
+				    struct freebsd8_stat *ub); }
 191	AUE_PATHCONF	STD	{ int pathconf(char *path, int name); }
 192	AUE_FPATHCONF	STD	{ int fpathconf(int fd, int name); }
 193	AUE_NULL	UNIMPL	nosys
@@ -532,8 +535,8 @@
 				    struct ostatfs *buf); }
 298	AUE_FHOPEN	STD	{ int fhopen(const struct fhandle *u_fhp, \
 				    int flags); }
-299	AUE_FHSTAT	STD	{ int fhstat(const struct fhandle *u_fhp, \
-				    struct stat *sb); }
+299	AUE_FHSTAT	COMPAT8	{ int fhstat(const struct fhandle *u_fhp, \
+				    struct freebsd8_stat *sb); }
 ; syscall numbers for FreeBSD
 300	AUE_NULL	STD	{ int modnext(int modid); }
 301	AUE_NULL	STD	{ int modstat(int modid, \
@@ -879,8 +882,8 @@
 				    gid_t gid, int flag); }
 492	AUE_FEXECVE	STD	{ int fexecve(int fd, char **argv, \
 				    char **envv); }
-493	AUE_FSTATAT	STD	{ int fstatat(int fd, char *path, \
-				    struct stat *buf, int flag); }
+493	AUE_FSTATAT	COMPAT8	{ int fstatat(int fd, char *path, \
+				    struct freebsd8_stat *buf, int flag); }
 494	AUE_FUTIMESAT	STD	{ int futimesat(int fd, char *path, \
 				    struct timeval *times); }
 495	AUE_LINKAT	STD	{ int linkat(int fd1, char *path1, int fd2, \
@@ -948,5 +951,12 @@
 530	AUE_NULL	STD	{ int posix_fallocate(int fd, \
 				    off_t offset, off_t len); }
 531	AUE_NULL	UNIMPL	posix_fadvise
+532	AUE_STAT	STD	{ int stat(char *path, struct stat *ub); }
+533	AUE_FSTAT	STD	{ int fstat(int fd, struct stat *sb); }
+534	AUE_LSTAT	STD	{ int lstat(char *path, struct stat *ub); }
+535	AUE_FHSTAT	STD	{ int fhstat(const struct fhandle *u_fhp, \
+				    struct stat *sb); }
+536	AUE_FSTATAT	STD	{ int fstatat(int fd, char *path, \
+				    struct stat *buf, int flag); }
 ; Please copy any additions and changes to the following compatability tables:
 ; sys/compat/freebsd32/syscalls.master

Modified: soc2011/gk/ino64-head/sys/kern/vfs_syscalls.c
==============================================================================
--- soc2011/gk/ino64-head/sys/kern/vfs_syscalls.c	Fri Jun 17 21:44:13 2011	(r223365)
+++ soc2011/gk/ino64-head/sys/kern/vfs_syscalls.c	Fri Jun 17 22:28:55 2011	(r223366)
@@ -2271,6 +2271,123 @@
 }
 #endif /* COMPAT_43 */
 
+#if defined(COMPAT_FREEBSD4) || defined(COMPAT_FREEBSD5) || \
+    defined(COMPAT_FREEBSD6) || defined(COMPAT_FREEBSD7) || \
+    defined(COMPAT_FREEBSD8)
+void
+freebsd8_cvtstat(struct stat *st, struct freebsd8_stat *ost)
+{
+	ost->st_dev = st->st_dev;
+	ost->st_ino = st->st_ino;		/* truncate */
+	ost->st_mode = st->st_mode;
+	ost->st_nlink = st->st_nlink;		/* truncate */
+	ost->st_uid = st->st_uid;
+	ost->st_gid = st->st_gid;
+	ost->st_rdev = st->st_rdev;
+	ost->st_atim = st->st_atim;
+	ost->st_mtim = st->st_mtim;
+	ost->st_ctim = st->st_ctim;
+	ost->st_size = st->st_size;
+	ost->st_blocks = st->st_blocks;
+	ost->st_blksize = st->st_blksize;
+	ost->st_flags = st->st_flags;
+	ost->st_gen = st->st_gen;
+	ost->st_lspare = st->st_lspare;
+	ost->st_birthtim = st->st_birthtim;
+}
+
+#ifndef _SYS_SYSPROTO_H_
+struct freebsd8_stat_args {
+	char	*path;
+	struct freebsd8_stat *ub;
+};
+#endif
+int
+freebsd8_stat(struct thread *td, struct freebsd8_stat_args* uap)
+{
+	struct stat sb;
+	struct freebsd8_stat osb;
+	int error;
+
+	error = kern_stat(td, uap->path, UIO_USERSPACE, &sb);
+	if (error != 0)
+		return (error);
+	freebsd8_cvtstat(&sb, &osb);
+	error = copyout(&osb, uap->ub, sizeof(osb));
+	return (error);
+}
+
+#ifndef _SYS_SYSPROTO_H_
+struct freebsd8_lstat_args {
+	char	*path;
+	struct freebsd8_stat *ub;
+};
+#endif
+int
+freebsd8_lstat(struct thread *td, register struct freebsd8_lstat_args* uap)
+{
+	struct stat sb;
+	struct freebsd8_stat osb;
+	int error;
+
+	error = kern_lstat(td, uap->path, UIO_USERSPACE, &sb);
+	if (error != 0)
+		return (error);
+	freebsd8_cvtstat(&sb, &osb);
+	error = copyout(&osb, uap->ub, sizeof(osb));
+	return (error);
+}
+
+#ifndef _SYS_SYSPROTO_H_
+struct freebsd8_fhstat_args {
+	struct fhandle *u_fhp;
+	struct freebsd8_stat *sb;
+};
+#endif
+int
+freebsd8_fhstat(struct thread *td, struct freebsd8_fhstat_args* uap)
+{
+	struct fhandle fh;
+	struct stat sb;
+	struct freebsd8_stat osb;
+	int error;
+
+	error = copyin(uap->u_fhp, &fh, sizeof(fhandle_t));
+	if (error != 0)
+		return (error);
+	error = kern_fhstat(td, fh, &sb);
+	if (error != 0)
+		return (error);
+	freebsd8_cvtstat(&sb, &osb);
+	error = copyout(&osb, uap->sb, sizeof(osb));
+	return (error);
+}
+
+#ifndef _SYS_SYSPROTO_H_
+struct freebsd8_fstatat_args {
+	int	fd;
+	char	*path;
+	struct freebsd8_stat *buf;
+	int	flag;
+};
+#endif
+int
+freebsd8_fstatat(struct thread *td, struct freebsd8_fstatat_args* uap)
+{
+	struct stat sb;
+	struct freebsd8_stat osb;
+	int error;
+
+	error = kern_statat(td, uap->flag, uap->fd, uap->path,
+	    UIO_USERSPACE, &sb);
+	if (error != 0)
+		return (error);
+	freebsd8_cvtstat(&sb, &osb);
+	error = copyout(&osb, uap->buf, sizeof(osb));
+	return (error);
+}
+#endif	/* COMPAT_FREEBSD8 */
+
 /*
  * Get file status; this version follows links.
  */

Modified: soc2011/gk/ino64-head/sys/sys/_types.h
==============================================================================
--- soc2011/gk/ino64-head/sys/sys/_types.h	Fri Jun 17 21:44:13 2011	(r223365)
+++ soc2011/gk/ino64-head/sys/sys/_types.h	Fri Jun 17 22:28:55 2011	(r223366)
@@ -43,13 +43,13 @@
 typedef	__uint64_t	__fsfilcnt_t;
 typedef	__uint32_t	__gid_t;
 typedef	__int64_t	__id_t;		/* can hold a gid_t, pid_t, or uid_t */
-typedef	__uint32_t	__ino_t;	/* inode number */
+typedef	__uint64_t	__ino_t;	/* inode number */
 typedef	long		__key_t;	/* IPC key (for Sys V IPC) */
 typedef	__int32_t	__lwpid_t;	/* Thread ID (a.k.a. LWP) */
 typedef	__uint16_t	__mode_t;	/* permissions */
 typedef	int		__accmode_t;	/* access permissions */
 typedef	int		__nl_item;
-typedef	__uint16_t	__nlink_t;	/* link count */
+typedef	__uint32_t	__nlink_t;	/* link count */
 typedef	__int64_t	__off_t;	/* file offset */
 typedef	__int32_t	__pid_t;	/* process [group] */
 typedef	__int64_t	__rlim_t;	/* resource limit - intentionally */

Modified: soc2011/gk/ino64-head/sys/sys/stat.h
==============================================================================
--- soc2011/gk/ino64-head/sys/sys/stat.h	Fri Jun 17 21:44:13 2011	(r223365)
+++ soc2011/gk/ino64-head/sys/sys/stat.h	Fri Jun 17 22:28:55 2011	(r223366)
@@ -102,9 +102,9 @@
 #if __BSD_VISIBLE
 struct ostat {
 	__uint16_t st_dev;		/* inode's device */
-	ino_t	  st_ino;		/* inode's number */
+	__uint32_t st_ino;		/* inode's number */
 	mode_t	  st_mode;		/* inode protection mode */
-	nlink_t	  st_nlink;		/* number of hard links */
+	__uint16_t st_nlink;		/* number of hard links */
 	__uint16_t st_uid;		/* user ID of the file's owner */
 	__uint16_t st_gid;		/* group ID of the file's group */
 	__uint16_t st_rdev;		/* device type */
@@ -117,13 +117,44 @@
 	fflags_t  st_flags;		/* user defined flags for file */
 	__uint32_t st_gen;		/* file generation number */
 };
+
+struct freebsd8_stat {
+	__dev_t   st_dev;		/* inode's device */
+	__uint32_t st_ino;		/* inode's number */
+	mode_t	  st_mode;		/* inode protection mode */
+	__uint16_t st_nlink;		/* number of hard links */
+	uid_t	  st_uid;		/* user ID of the file's owner */
+	gid_t	  st_gid;		/* group ID of the file's group */
+	__dev_t   st_rdev;		/* device type */
+	struct	timespec st_atim;	/* time of last access */
+	struct	timespec st_mtim;	/* time of last data modification */
+	struct	timespec st_ctim;	/* time of last file status change */
+	off_t	  st_size;		/* file size, in bytes */
+	blkcnt_t st_blocks;		/* blocks allocated for file */
+	blksize_t st_blksize;		/* optimal blocksize for I/O */
+	fflags_t  st_flags;		/* user defined flags for file */
+	__uint32_t st_gen;		/* file generation number */
+	__int32_t st_lspare;
+	struct timespec st_birthtim;	/* time of file creation */
+	/*
+	 * Explicitly pad st_birthtim to 16 bytes so that the size of
+	 * struct stat is backwards compatible.  We use bitfields instead
+	 * of an array of chars so that this doesn't require a C99 compiler
+	 * to compile if the size of the padding is 0.  We use 2 bitfields
+	 * to cover up to 64 bits on 32-bit machines.  We assume that
+	 * CHAR_BIT is 8...
+	 */
+	unsigned int :(8 / 2) * (16 - (int)sizeof(struct timespec));
+	unsigned int :(8 / 2) * (16 - (int)sizeof(struct timespec));
+};
 #endif /* __BSD_VISIBLE */
 
 struct stat {
-	__dev_t   st_dev;		/* inode's device */
 	ino_t	  st_ino;		/* inode's number */
-	mode_t	  st_mode;		/* inode protection mode */
 	nlink_t	  st_nlink;		/* number of hard links */
+	__dev_t   st_dev;		/* inode's device */
+	mode_t	  st_mode;		/* inode protection mode */
+	__int16_t st_padding0;
 	uid_t	  st_uid;		/* user ID of the file's owner */
 	gid_t	  st_gid;		/* group ID of the file's group */
 	__dev_t   st_rdev;		/* device type */
@@ -152,7 +183,7 @@
 #if __BSD_VISIBLE
 struct nstat {
 	__dev_t   st_dev;		/* inode's device */
-	ino_t	  st_ino;		/* inode's number */
+	__uint32_t st_ino;		/* inode's number */
 	__uint32_t st_mode;		/* inode protection mode */
 	__uint32_t st_nlink;		/* number of hard links */
 	uid_t	  st_uid;		/* user ID of the file's owner */

Modified: soc2011/gk/ino64-head/sys/sys/vnode.h
==============================================================================
--- soc2011/gk/ino64-head/sys/sys/vnode.h	Fri Jun 17 21:44:13 2011	(r223365)
+++ soc2011/gk/ino64-head/sys/sys/vnode.h	Fri Jun 17 22:28:55 2011	(r223366)
@@ -569,6 +569,7 @@
 struct mount;
 struct nameidata;
 struct ostat;
+struct freebsd8_stat;
 struct thread;
 struct proc;
 struct stat;
@@ -590,6 +591,7 @@
 int	change_root(struct vnode *vp, struct thread *td);
 void	cvtstat(struct stat *st, struct ostat *ost);
 void	freebsd8_cvtnstat(struct stat *sb, struct nstat *nsb);
+void	freebsd8_cvtstat(struct stat *st, struct freebsd8_stat *ost);
 int	getnewvnode(const char *tag, struct mount *mp, struct vop_vector *vops,
 	    struct vnode **vpp);
 int	insmntque1(struct vnode *vp, struct mount *mp,


More information about the svn-soc-all mailing list