When including these headers in the x32 ABI, the structs get declared
with 32bit sizes which is incorrect.  Use long long and such to make
it work both with x32 and x86_64.

Signed-off-by: Mike Frysinger <vap...@gentoo.org>
---
 arch/x86/include/uapi/asm/stat.h   | 38 +++++++++++++++++++-------------------
 arch/x86/include/uapi/asm/statfs.h |  5 +++++
 2 files changed, 24 insertions(+), 19 deletions(-)

diff --git a/arch/x86/include/uapi/asm/stat.h b/arch/x86/include/uapi/asm/stat.h
index 7b3ddc3..e9d6951 100644
--- a/arch/x86/include/uapi/asm/stat.h
+++ b/arch/x86/include/uapi/asm/stat.h
@@ -78,26 +78,26 @@ struct stat64 {
 #else /* __i386__ */
 
 struct stat {
-       unsigned long   st_dev;
-       unsigned long   st_ino;
-       unsigned long   st_nlink;
-
-       unsigned int    st_mode;
-       unsigned int    st_uid;
-       unsigned int    st_gid;
-       unsigned int    __pad0;
-       unsigned long   st_rdev;
-       long            st_size;
-       long            st_blksize;
-       long            st_blocks;      /* Number 512-byte blocks allocated. */
+       unsigned long long      st_dev;
+       unsigned long long      st_ino;
+       unsigned long long      st_nlink;
 
-       unsigned long   st_atime;
-       unsigned long   st_atime_nsec;
-       unsigned long   st_mtime;
-       unsigned long   st_mtime_nsec;
-       unsigned long   st_ctime;
-       unsigned long   st_ctime_nsec;
-       long            __unused[3];
+       unsigned int            st_mode;
+       unsigned int            st_uid;
+       unsigned int            st_gid;
+       unsigned int            __pad0;
+       unsigned long long      st_rdev;
+       long long               st_size;
+       long long               st_blksize;
+       long long               st_blocks;      /* Number 512-byte blocks 
allocated. */
+
+       unsigned long long      st_atime;
+       unsigned long long      st_atime_nsec;
+       unsigned long long      st_mtime;
+       unsigned long long      st_mtime_nsec;
+       unsigned long long      st_ctime;
+       unsigned long long      st_ctime_nsec;
+       long long               __unused[3];
 };
 
 /* We don't need to memset the whole thing just to initialize the padding */
diff --git a/arch/x86/include/uapi/asm/statfs.h 
b/arch/x86/include/uapi/asm/statfs.h
index 2d0adbf..3cb5744 100644
--- a/arch/x86/include/uapi/asm/statfs.h
+++ b/arch/x86/include/uapi/asm/statfs.h
@@ -8,5 +8,10 @@
  */
 #define ARCH_PACK_COMPAT_STATFS64 __attribute__((packed,aligned(4)))
 
+/* For x86-64, both the 64bit and x32 ABIs have 64bit fields. */
+#ifdef __x86_64__
+#define __statfs_word __u64
+#endif
+
 #include <asm-generic/statfs.h>
 #endif /* _ASM_X86_STATFS_H */
-- 
1.8.2.1

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to