Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 92a75079 authored by David Woodhouse's avatar David Woodhouse
Browse files

Make <asm-generic/statfs.h> suitable for 64-bit platforms.



At the moment, 64-bit platforms (other than Alpha) are all redefining
things for themselves instead of using <asm-generic/statfs.h>.

As is ARM, since it has special requirements w.r.t. padding.

Make <asm-generic/statfs.h> more generic, and they can use it directly.

Signed-off-by: default avatarDavid Woodhouse <David.Woodhouse@intel.com>
parent aa7a7fb3
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
#ifndef _ALPHA_STATFS_H
#define _ALPHA_STATFS_H

/* Alpha is the only 64-bit platform with 32-bit statfs. And doesn't
   even seem to implement statfs64 */
#define __statfs_word __u32

#include <asm-generic/statfs.h>

#endif
+48 −17
Original line number Diff line number Diff line
@@ -6,33 +6,64 @@
typedef __kernel_fsid_t	fsid_t;
#endif

/*
 * Most 64-bit platforms use 'long', while most 32-bit platforms use '__u32'.
 * Yes, they differ in signedness as well as size.
 * Special cases can override it for themselves -- except for S390x, which
 * is just a little too special for us. And MIPS, which I'm not touching
 * with a 10' pole.
 */
#ifndef __statfs_word
#if BITS_PER_LONG == 64
#define __statfs_word long
#else
#define __statfs_word __u32
#endif
#endif

struct statfs {
	__u32 f_type;
	__u32 f_bsize;
	__u32 f_blocks;
	__u32 f_bfree;
	__u32 f_bavail;
	__u32 f_files;
	__u32 f_ffree;
	__statfs_word f_type;
	__statfs_word f_bsize;
	__statfs_word f_blocks;
	__statfs_word f_bfree;
	__statfs_word f_bavail;
	__statfs_word f_files;
	__statfs_word f_ffree;
	__kernel_fsid_t f_fsid;
	__u32 f_namelen;
	__u32 f_frsize;
	__u32 f_spare[5];
	__statfs_word f_namelen;
	__statfs_word f_frsize;
	__statfs_word f_spare[5];
};

/*
 * ARM needs to avoid the 32-bit padding at the end, for consistency
 * between EABI and OABI 
 */
#ifndef ARCH_PACK_STATFS64
#define ARCH_PACK_STATFS64
#endif

struct statfs64 {
	__u32 f_type;
	__u32 f_bsize;
	__statfs_word f_type;
	__statfs_word f_bsize;
	__u64 f_blocks;
	__u64 f_bfree;
	__u64 f_bavail;
	__u64 f_files;
	__u64 f_ffree;
	__kernel_fsid_t f_fsid;
	__u32 f_namelen;
	__u32 f_frsize;
	__u32 f_spare[5];
};
	__statfs_word f_namelen;
	__statfs_word f_frsize;
	__statfs_word f_spare[5];
} ARCH_PACK_STATFS64;

/* 
 * IA64 and x86_64 need to avoid the 32-bit padding at the end,
 * to be compatible with the i386 ABI
 */
#ifndef ARCH_PACK_COMPAT_STATFS64
#define ARCH_PACK_COMPAT_STATFS64
#endif

struct compat_statfs64 {
	__u32 f_type;
@@ -46,6 +77,6 @@ struct compat_statfs64 {
	__u32 f_namelen;
	__u32 f_frsize;
	__u32 f_spare[5];
};
} ARCH_PACK_COMPAT_STATFS64;

#endif