Skip to content

Commit

Permalink
compat: consolidate the compat_flock{,64} definition
Browse files Browse the repository at this point in the history
Provide a single common definition for the compat_flock and
compat_flock64 structures using the same tricks as for the native
variants.  Another extra define is added for the packing required on
x86.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Guo Ren <guoren@kernel.org>
Reviewed-by: Arnd Bergmann <arnd@arndb.de>
Tested-by: Heiko Stuebner <heiko@sntech.de>
Acked-by: Helge Deller <deller@gmx.de>  # parisc
Link: https://lore.kernel.org/r/20220405071314.3225832-4-guoren@kernel.org
Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
  • Loading branch information
Christoph Hellwig authored and Palmer Dabbelt committed Apr 26, 2022
1 parent 306f7cc commit 3ce0f23
Showing 8 changed files with 37 additions and 115 deletions.
16 changes: 0 additions & 16 deletions arch/arm64/include/asm/compat.h
Original file line number Diff line number Diff line change
@@ -65,22 +65,6 @@ struct compat_stat {
compat_ulong_t __unused4[2];
};

struct compat_flock {
short l_type;
short l_whence;
compat_off_t l_start;
compat_off_t l_len;
compat_pid_t l_pid;
};

struct compat_flock64 {
short l_type;
short l_whence;
compat_loff_t l_start;
compat_loff_t l_len;
compat_pid_t l_pid;
};

struct compat_statfs {
int f_type;
int f_bsize;
19 changes: 2 additions & 17 deletions arch/mips/include/asm/compat.h
Original file line number Diff line number Diff line change
@@ -55,23 +55,8 @@ struct compat_stat {
s32 st_pad4[14];
};

struct compat_flock {
short l_type;
short l_whence;
compat_off_t l_start;
compat_off_t l_len;
s32 l_sysid;
compat_pid_t l_pid;
s32 pad[4];
};

struct compat_flock64 {
short l_type;
short l_whence;
compat_loff_t l_start;
compat_loff_t l_len;
compat_pid_t l_pid;
};
#define __ARCH_COMPAT_FLOCK_EXTRA_SYSID s32 l_sysid;
#define __ARCH_COMPAT_FLOCK_PAD s32 pad[4];

struct compat_statfs {
int f_type;
16 changes: 0 additions & 16 deletions arch/parisc/include/asm/compat.h
Original file line number Diff line number Diff line change
@@ -53,22 +53,6 @@ struct compat_stat {
u32 st_spare4[3];
};

struct compat_flock {
short l_type;
short l_whence;
compat_off_t l_start;
compat_off_t l_len;
compat_pid_t l_pid;
};

struct compat_flock64 {
short l_type;
short l_whence;
compat_loff_t l_start;
compat_loff_t l_len;
compat_pid_t l_pid;
};

struct compat_statfs {
s32 f_type;
s32 f_bsize;
16 changes: 0 additions & 16 deletions arch/powerpc/include/asm/compat.h
Original file line number Diff line number Diff line change
@@ -44,22 +44,6 @@ struct compat_stat {
u32 __unused4[2];
};

struct compat_flock {
short l_type;
short l_whence;
compat_off_t l_start;
compat_off_t l_len;
compat_pid_t l_pid;
};

struct compat_flock64 {
short l_type;
short l_whence;
compat_loff_t l_start;
compat_loff_t l_len;
compat_pid_t l_pid;
};

struct compat_statfs {
int f_type;
int f_bsize;
16 changes: 0 additions & 16 deletions arch/s390/include/asm/compat.h
Original file line number Diff line number Diff line change
@@ -102,22 +102,6 @@ struct compat_stat {
u32 __unused5;
};

struct compat_flock {
short l_type;
short l_whence;
compat_off_t l_start;
compat_off_t l_len;
compat_pid_t l_pid;
};

struct compat_flock64 {
short l_type;
short l_whence;
compat_loff_t l_start;
compat_loff_t l_len;
compat_pid_t l_pid;
};

struct compat_statfs {
u32 f_type;
u32 f_bsize;
18 changes: 1 addition & 17 deletions arch/sparc/include/asm/compat.h
Original file line number Diff line number Diff line change
@@ -75,23 +75,7 @@ struct compat_stat64 {
unsigned int __unused5;
};

struct compat_flock {
short l_type;
short l_whence;
compat_off_t l_start;
compat_off_t l_len;
compat_pid_t l_pid;
short __unused;
};

struct compat_flock64 {
short l_type;
short l_whence;
compat_loff_t l_start;
compat_loff_t l_len;
compat_pid_t l_pid;
short __unused;
};
#define __ARCH_COMPAT_FLOCK_PAD short __unused;

struct compat_statfs {
int f_type;
20 changes: 3 additions & 17 deletions arch/x86/include/asm/compat.h
Original file line number Diff line number Diff line change
@@ -50,25 +50,11 @@ struct compat_stat {
u32 __unused5;
};

struct compat_flock {
short l_type;
short l_whence;
compat_off_t l_start;
compat_off_t l_len;
compat_pid_t l_pid;
};

/*
* IA32 uses 4 byte alignment for 64 bit quantities,
* so we need to pack this structure.
* IA32 uses 4 byte alignment for 64 bit quantities, so we need to pack the
* compat flock64 structure.
*/
struct compat_flock64 {
short l_type;
short l_whence;
compat_loff_t l_start;
compat_loff_t l_len;
compat_pid_t l_pid;
} __attribute__((packed));
#define __ARCH_NEED_COMPAT_FLOCK64_PACKED

struct compat_statfs {
int f_type;
31 changes: 31 additions & 0 deletions include/linux/compat.h
Original file line number Diff line number Diff line change
@@ -258,6 +258,37 @@ struct compat_rlimit {
compat_ulong_t rlim_max;
};

#ifdef __ARCH_NEED_COMPAT_FLOCK64_PACKED
#define __ARCH_COMPAT_FLOCK64_PACK __attribute__((packed))
#else
#define __ARCH_COMPAT_FLOCK64_PACK
#endif

struct compat_flock {
short l_type;
short l_whence;
compat_off_t l_start;
compat_off_t l_len;
#ifdef __ARCH_COMPAT_FLOCK_EXTRA_SYSID
__ARCH_COMPAT_FLOCK_EXTRA_SYSID
#endif
compat_pid_t l_pid;
#ifdef __ARCH_COMPAT_FLOCK_PAD
__ARCH_COMPAT_FLOCK_PAD
#endif
};

struct compat_flock64 {
short l_type;
short l_whence;
compat_loff_t l_start;
compat_loff_t l_len;
compat_pid_t l_pid;
#ifdef __ARCH_COMPAT_FLOCK64_PAD
__ARCH_COMPAT_FLOCK64_PAD
#endif
} __ARCH_COMPAT_FLOCK64_PACK;

struct compat_rusage {
struct old_timeval32 ru_utime;
struct old_timeval32 ru_stime;

0 comments on commit 3ce0f23

Please sign in to comment.