Message ID | 1477081997-4770-2-git-send-email-ynorov@caviumnetworks.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 10/21/2016 4:33 PM, Yury Norov wrote: > All new 32-bit architectures should have 64-bit off_t type, but existing > architectures has 32-bit ones. > > [...] > For syscalls sys_openat() and sys_open_by_handle_at() force_o_largefile() > is called, to set O_LARGEFILE flag, and this is the only difference > comparing to compat versions. All compat ABIs are already turned to use > 64-bit off_t, except tile. So, compat versions for this syscalls are not > needed anymore. Tile is handled explicitly. > > [...] > --- a/arch/tile/kernel/compat.c > +++ b/arch/tile/kernel/compat.c > @@ -103,6 +103,9 @@ COMPAT_SYSCALL_DEFINE5(llseek, unsigned int, fd, unsigned int, offset_high, > #define compat_sys_readahead sys32_readahead > #define sys_llseek compat_sys_llseek > > +#define sys_openat compat_sys_openat > +#define sys_open_by_handle_at compat_sys_open_by_handle_at > + > /* Call the assembly trampolines where necessary. */ > #define compat_sys_rt_sigreturn _compat_sys_rt_sigreturn > #define sys_clone _sys_clone This patch accomplishes two goals that could be completely separated. It's confusing to have them mixed in the same patch without any discussion of why they are in the same patch. First, you want to modify the default <asm/unistd.h> behavior for compat syscalls so that the default is sys_openat (etc) rather than the existing compat_sys_openat, and then use that new behavior for arm64 ILP32. This lets you force O_LARGEFILE for arm64 ILP32 to support having a 64-bit off_t at all times. To do that, you fix the asm-generic header, and then make tile have a special override. This seems reasonable enough. Second, you introduce ARCH_32BIT_OFF_T basically as a synonym for "BITS_PER_WORD == 32", so that new 32-bit architectures can choose not to enable it. This is fine in the abstract, but I'm a bit troubled by the fact that you are not actually introducing a new 32-bit architecture here (just a new 32-bit mode for the arm 64-bit kernel). Shouldn't this part of the change wait until someone actually has a new 32-bit kernel to drive this forward? If you want to push forward the ARCH_32BIT_OFF_T change in the absence of an architecture that supports it, I would think it would be a lot less confusing to have these two in separate patches, and make it clear that the ARCH_32BIT_OFF_T change is just laying groundwork for some hypothetical future architecture. The existing commit language itself is also confusing. You write "All compat ABIs are already turned to use 64-bit off_t, except tile." First, I'm not sure what you mean by "turned" here. And, tile is just one of many compat ABIs that allow O_LARGEFILE not to be part of the open call: see arm64's AArch32 ABI, MIPS o32, s390 31-bit emulation, sparc64's 32-bit mode, and of course x86's 32-bit compat mode. Presumably your point here is that tile is the only pre-existing architecture that #includes <asm/unistd.h> to create its compat syscall table, and so I think "all except tile" here is particularly confusing, since there are no architectures except tile that use the __SYSCALL_COMPAT functionality in the current tree.
On Monday, October 24, 2016 12:30:47 PM CEST Chris Metcalf wrote: > On 10/21/2016 4:33 PM, Yury Norov wrote: > > All new 32-bit architectures should have 64-bit off_t type, but existing > > architectures has 32-bit ones. > > > > [...] > > For syscalls sys_openat() and sys_open_by_handle_at() force_o_largefile() > > is called, to set O_LARGEFILE flag, and this is the only difference > > comparing to compat versions. All compat ABIs are already turned to use > > 64-bit off_t, except tile. So, compat versions for this syscalls are not > > needed anymore. Tile is handled explicitly. > > > > [...] > > --- a/arch/tile/kernel/compat.c > > +++ b/arch/tile/kernel/compat.c > > @@ -103,6 +103,9 @@ COMPAT_SYSCALL_DEFINE5(llseek, unsigned int, fd, unsigned int, offset_high, > > #define compat_sys_readahead sys32_readahead > > #define sys_llseek compat_sys_llseek > > > > +#define sys_openat compat_sys_openat > > +#define sys_open_by_handle_at compat_sys_open_by_handle_at > > + > > /* Call the assembly trampolines where necessary. */ > > #define compat_sys_rt_sigreturn _compat_sys_rt_sigreturn > > #define sys_clone _sys_clone > > This patch accomplishes two goals that could be completely separated. > It's confusing to have them mixed in the same patch without any > discussion of why they are in the same patch. > > First, you want to modify the default <asm/unistd.h> behavior for > compat syscalls so that the default is sys_openat (etc) rather than > the existing compat_sys_openat, and then use that new behavior for > arm64 ILP32. This lets you force O_LARGEFILE for arm64 ILP32 to > support having a 64-bit off_t at all times. To do that, you fix the > asm-generic header, and then make tile have a special override. > This seems reasonable enough. > > Second, you introduce ARCH_32BIT_OFF_T basically as a synonym for > "BITS_PER_WORD == 32", so that new 32-bit architectures can choose not > to enable it. This is fine in the abstract, but I'm a bit troubled by > the fact that you are not actually introducing a new 32-bit > architecture here (just a new 32-bit mode for the arm 64-bit kernel). > Shouldn't this part of the change wait until someone actually has a > new 32-bit kernel to drive this forward? I asked for this specifically because we identified the problem during the review of the aarch64 ilp32 code, and it might not be noticed in the next architecture submission. The most important aspect from my perspective is that the new ilp32 ABI on aarch64 behaves the same way that any native 32-bit architecture does, and when we change the default, it should be done for both compat mode and native mode at the same time. > If you want to push forward the ARCH_32BIT_OFF_T change in the absence > of an architecture that supports it, I would think it would be a lot > less confusing to have these two in separate patches, and make it > clear that the ARCH_32BIT_OFF_T change is just laying groundwork > for some hypothetical future architecture. > > The existing commit language itself is also confusing. You write "All > compat ABIs are already turned to use 64-bit off_t, except tile." > First, I'm not sure what you mean by "turned" here. And, tile is just > one of many compat ABIs that allow O_LARGEFILE not to be part of the > open call: see arm64's AArch32 ABI, MIPS o32, s390 31-bit emulation, > sparc64's 32-bit mode, and of course x86's 32-bit compat mode. > Presumably your point here is that tile is the only pre-existing > architecture that #includes <asm/unistd.h> to create its compat > syscall table, and so I think "all except tile" here is particularly > confusing, since there are no architectures except tile that use the > __SYSCALL_COMPAT functionality in the current tree. Agreed, this could be made clearer, and splitting the patch up in two also seems reasonable, though I didn't see it as important. Arnd
On Tue, Oct 25, 2016 at 12:22:47AM +0200, Arnd Bergmann wrote: > On Monday, October 24, 2016 12:30:47 PM CEST Chris Metcalf wrote: > > On 10/21/2016 4:33 PM, Yury Norov wrote: > > > All new 32-bit architectures should have 64-bit off_t type, but existing > > > architectures has 32-bit ones. > > > > > > [...] > > > For syscalls sys_openat() and sys_open_by_handle_at() force_o_largefile() > > > is called, to set O_LARGEFILE flag, and this is the only difference > > > comparing to compat versions. All compat ABIs are already turned to use > > > 64-bit off_t, except tile. So, compat versions for this syscalls are not > > > needed anymore. Tile is handled explicitly. > > > > > > [...] > > > --- a/arch/tile/kernel/compat.c > > > +++ b/arch/tile/kernel/compat.c > > > @@ -103,6 +103,9 @@ COMPAT_SYSCALL_DEFINE5(llseek, unsigned int, fd, unsigned int, offset_high, > > > #define compat_sys_readahead sys32_readahead > > > #define sys_llseek compat_sys_llseek > > > > > > +#define sys_openat compat_sys_openat > > > +#define sys_open_by_handle_at compat_sys_open_by_handle_at > > > + > > > /* Call the assembly trampolines where necessary. */ > > > #define compat_sys_rt_sigreturn _compat_sys_rt_sigreturn > > > #define sys_clone _sys_clone > > > > This patch accomplishes two goals that could be completely separated. > > It's confusing to have them mixed in the same patch without any > > discussion of why they are in the same patch. > > > > First, you want to modify the default <asm/unistd.h> behavior for > > compat syscalls so that the default is sys_openat (etc) rather than > > the existing compat_sys_openat, and then use that new behavior for > > arm64 ILP32. This lets you force O_LARGEFILE for arm64 ILP32 to > > support having a 64-bit off_t at all times. To do that, you fix the > > asm-generic header, and then make tile have a special override. > > This seems reasonable enough. > > > > Second, you introduce ARCH_32BIT_OFF_T basically as a synonym for > > "BITS_PER_WORD == 32", so that new 32-bit architectures can choose not > > to enable it. This is fine in the abstract, but I'm a bit troubled by > > the fact that you are not actually introducing a new 32-bit > > architecture here (just a new 32-bit mode for the arm 64-bit kernel). > > Shouldn't this part of the change wait until someone actually has a > > new 32-bit kernel to drive this forward? > > I asked for this specifically because we identified the problem > during the review of the aarch64 ilp32 code, and it might not > be noticed in the next architecture submission. > > The most important aspect from my perspective is that the new > ilp32 ABI on aarch64 behaves the same way that any native 32-bit > architecture does, and when we change the default, it should > be done for both compat mode and native mode at the same time. > > > If you want to push forward the ARCH_32BIT_OFF_T change in the absence > > of an architecture that supports it, I would think it would be a lot > > less confusing to have these two in separate patches, and make it > > clear that the ARCH_32BIT_OFF_T change is just laying groundwork > > for some hypothetical future architecture. > > > > The existing commit language itself is also confusing. You write "All > > compat ABIs are already turned to use 64-bit off_t, except tile." > > First, I'm not sure what you mean by "turned" here. And, tile is just > > one of many compat ABIs that allow O_LARGEFILE not to be part of the > > open call: see arm64's AArch32 ABI, MIPS o32, s390 31-bit emulation, > > sparc64's 32-bit mode, and of course x86's 32-bit compat mode. > > Presumably your point here is that tile is the only pre-existing > > architecture that #includes <asm/unistd.h> to create its compat > > syscall table, and so I think "all except tile" here is particularly > > confusing, since there are no architectures except tile that use the > > __SYSCALL_COMPAT functionality in the current tree. > > Agreed, this could be made clearer, and splitting the patch up > in two also seems reasonable, though I didn't see it as important. > > Arnd In the past it was a separated series of 2 patches, and it was even acked by Arnd, but not submitted. http://lists-archives.com/linux-kernel/28471253-32-bit-abi-introduce-arch_32bit_off_t-config-option.html I can restore that small series in aarch64/ilp32 for next iteration, or resend it separately if you think to submit it before aarch64/ilp32 (which is better, for me). Yury
diff --git a/arch/Kconfig b/arch/Kconfig index 659bdd0..ec06a71 100644 --- a/arch/Kconfig +++ b/arch/Kconfig @@ -234,6 +234,10 @@ config ARCH_THREAD_STACK_ALLOCATOR config ARCH_WANTS_DYNAMIC_TASK_STRUCT bool +config ARCH_32BIT_OFF_T + bool + depends on !64BIT + config HAVE_REGS_AND_STACK_ACCESS_API bool help diff --git a/arch/arc/Kconfig b/arch/arc/Kconfig index ecd1237..3e8dfd6 100644 --- a/arch/arc/Kconfig +++ b/arch/arc/Kconfig @@ -9,6 +9,7 @@ config ARC def_bool y select ARCH_SUPPORTS_ATOMIC_RMW if ARC_HAS_LLSC + select ARCH_32BIT_OFF_T select BUILDTIME_EXTABLE_SORT select CLKSRC_OF select CLONE_BACKWARDS diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index b5d529f..ff8b8b2 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -1,6 +1,7 @@ config ARM bool default y + select ARCH_32BIT_OFF_T select ARCH_CLOCKSOURCE_DATA select ARCH_HAS_DEVMEM_IS_ALLOWED select ARCH_HAS_ELF_RANDOMIZE diff --git a/arch/blackfin/Kconfig b/arch/blackfin/Kconfig index 3c1bd64..26418e7 100644 --- a/arch/blackfin/Kconfig +++ b/arch/blackfin/Kconfig @@ -12,6 +12,7 @@ config RWSEM_XCHGADD_ALGORITHM config BLACKFIN def_bool y + select ARCH_32BIT_OFF_T select HAVE_ARCH_KGDB select HAVE_ARCH_TRACEHOOK select HAVE_DYNAMIC_FTRACE diff --git a/arch/cris/Kconfig b/arch/cris/Kconfig index 71b758d..8c059f0 100644 --- a/arch/cris/Kconfig +++ b/arch/cris/Kconfig @@ -50,6 +50,7 @@ config LOCKDEP_SUPPORT config CRIS bool default y + select ARCH_32BIT_OFF_T select HAVE_IDE select GENERIC_ATOMIC64 select HAVE_UID16 diff --git a/arch/frv/Kconfig b/arch/frv/Kconfig index eefd9a4..2f14904 100644 --- a/arch/frv/Kconfig +++ b/arch/frv/Kconfig @@ -1,6 +1,7 @@ config FRV bool default y + select ARCH_32BIT_OFF_T select HAVE_IDE select HAVE_ARCH_TRACEHOOK select HAVE_PERF_EVENTS diff --git a/arch/h8300/Kconfig b/arch/h8300/Kconfig index 3ae8525..29bbcb1 100644 --- a/arch/h8300/Kconfig +++ b/arch/h8300/Kconfig @@ -1,5 +1,6 @@ config H8300 def_bool y + select ARCH_32BIT_OFF_T select GENERIC_ATOMIC64 select HAVE_UID16 select VIRT_TO_BUS diff --git a/arch/hexagon/Kconfig b/arch/hexagon/Kconfig index 1941e4b..bbcea8c 100644 --- a/arch/hexagon/Kconfig +++ b/arch/hexagon/Kconfig @@ -3,6 +3,7 @@ comment "Linux Kernel Configuration for Hexagon" config HEXAGON def_bool y + select ARCH_32BIT_OFF_T select HAVE_OPROFILE # Other pending projects/to-do items. # select HAVE_REGS_AND_STACK_ACCESS_API diff --git a/arch/m32r/Kconfig b/arch/m32r/Kconfig index 3cc8498..efa10d3 100644 --- a/arch/m32r/Kconfig +++ b/arch/m32r/Kconfig @@ -1,6 +1,7 @@ config M32R bool default y + select ARCH_32BIT_OFF_T select HAVE_IDE select HAVE_OPROFILE select INIT_ALL_POSSIBLE diff --git a/arch/m68k/Kconfig b/arch/m68k/Kconfig index d140206..ed6f90c 100644 --- a/arch/m68k/Kconfig +++ b/arch/m68k/Kconfig @@ -1,6 +1,7 @@ config M68K bool default y + select ARCH_32BIT_OFF_T select ARCH_MIGHT_HAVE_PC_PARPORT if ISA select HAVE_IDE select HAVE_AOUT if MMU diff --git a/arch/metag/Kconfig b/arch/metag/Kconfig index 5b7a45d..c337192 100644 --- a/arch/metag/Kconfig +++ b/arch/metag/Kconfig @@ -1,5 +1,6 @@ config METAG def_bool y + select ARCH_32BIT_OFF_T select EMBEDDED select GENERIC_ATOMIC64 select GENERIC_CLOCKEVENTS diff --git a/arch/microblaze/Kconfig b/arch/microblaze/Kconfig index 86f6572..3a6146b 100644 --- a/arch/microblaze/Kconfig +++ b/arch/microblaze/Kconfig @@ -1,5 +1,6 @@ config MICROBLAZE def_bool y + select ARCH_32BIT_OFF_T select ARCH_HAS_GCOV_PROFILE_ALL select ARCH_MIGHT_HAVE_PC_PARPORT select ARCH_WANT_IPC_PARSE_VERSION diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig index b3c5bde..a01da24 100644 --- a/arch/mips/Kconfig +++ b/arch/mips/Kconfig @@ -1,6 +1,7 @@ config MIPS bool default y + select ARCH_32BIT_OFF_T if !64BIT select ARCH_SUPPORTS_UPROBES select ARCH_MIGHT_HAVE_PC_PARPORT select ARCH_MIGHT_HAVE_PC_SERIO diff --git a/arch/mn10300/Kconfig b/arch/mn10300/Kconfig index 38e3494..c44c699 100644 --- a/arch/mn10300/Kconfig +++ b/arch/mn10300/Kconfig @@ -1,6 +1,7 @@ config MN10300 def_bool y select HAVE_EXIT_THREAD + select ARCH_32BIT_OFF_T select HAVE_OPROFILE select HAVE_UID16 select GENERIC_IRQ_SHOW diff --git a/arch/nios2/Kconfig b/arch/nios2/Kconfig index 51a56c8..f9273c9 100644 --- a/arch/nios2/Kconfig +++ b/arch/nios2/Kconfig @@ -1,5 +1,6 @@ config NIOS2 def_bool y + select ARCH_32BIT_OFF_T select CLKSRC_OF select GENERIC_ATOMIC64 select GENERIC_CLOCKEVENTS diff --git a/arch/openrisc/Kconfig b/arch/openrisc/Kconfig index 489e7f9..c4c96c9 100644 --- a/arch/openrisc/Kconfig +++ b/arch/openrisc/Kconfig @@ -5,6 +5,7 @@ config OPENRISC def_bool y + select ARCH_32BIT_OFF_T select OF select OF_EARLY_FLATTREE select IRQ_DOMAIN diff --git a/arch/parisc/Kconfig b/arch/parisc/Kconfig index 71c4a3a..025ae12 100644 --- a/arch/parisc/Kconfig +++ b/arch/parisc/Kconfig @@ -1,5 +1,6 @@ config PARISC def_bool y + select ARCH_32BIT_OFF_T if !64BIT select ARCH_MIGHT_HAVE_PC_PARPORT select HAVE_IDE select HAVE_OPROFILE diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig index 65fba4c..22178eb 100644 --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig @@ -80,6 +80,7 @@ config ARCH_HAS_DMA_SET_COHERENT_MASK config PPC bool default y + select ARCH_32BIT_OFF_T if PPC32 select ARCH_MIGHT_HAVE_PC_PARPORT select ARCH_MIGHT_HAVE_PC_SERIO select BINFMT_ELF diff --git a/arch/score/Kconfig b/arch/score/Kconfig index 507d631..0a9484b 100644 --- a/arch/score/Kconfig +++ b/arch/score/Kconfig @@ -2,6 +2,7 @@ menu "Machine selection" config SCORE def_bool y + select ARCH_32BIT_OFF_T select GENERIC_IRQ_SHOW select GENERIC_IOMAP select GENERIC_ATOMIC64 diff --git a/arch/sh/Kconfig b/arch/sh/Kconfig index ee08695..1f99eb3 100644 --- a/arch/sh/Kconfig +++ b/arch/sh/Kconfig @@ -56,6 +56,7 @@ config SUPERH config SUPERH32 def_bool ARCH = "sh" + select ARCH_32BIT_OFF_T select HAVE_KPROBES select HAVE_KRETPROBES select HAVE_IOREMAP_PROT if MMU && !X2TLB diff --git a/arch/sparc/Kconfig b/arch/sparc/Kconfig index b23c76b..36ef669 100644 --- a/arch/sparc/Kconfig +++ b/arch/sparc/Kconfig @@ -46,6 +46,7 @@ config SPARC config SPARC32 def_bool !64BIT + select ARCH_32BIT_OFF_T select GENERIC_ATOMIC64 select CLZ_TAB select HAVE_UID16 diff --git a/arch/tile/Kconfig b/arch/tile/Kconfig index 4583c03..845dcbd 100644 --- a/arch/tile/Kconfig +++ b/arch/tile/Kconfig @@ -3,6 +3,7 @@ config TILE def_bool y + select ARCH_32BIT_OFF_T if !64BIT select ARCH_HAS_DEVMEM_IS_ALLOWED select ARCH_HAVE_NMI_SAFE_CMPXCHG select ARCH_WANT_FRAME_POINTERS diff --git a/arch/tile/kernel/compat.c b/arch/tile/kernel/compat.c index bdaf71d..b38a898 100644 --- a/arch/tile/kernel/compat.c +++ b/arch/tile/kernel/compat.c @@ -103,6 +103,9 @@ COMPAT_SYSCALL_DEFINE5(llseek, unsigned int, fd, unsigned int, offset_high, #define compat_sys_readahead sys32_readahead #define sys_llseek compat_sys_llseek +#define sys_openat compat_sys_openat +#define sys_open_by_handle_at compat_sys_open_by_handle_at + /* Call the assembly trampolines where necessary. */ #define compat_sys_rt_sigreturn _compat_sys_rt_sigreturn #define sys_clone _sys_clone diff --git a/arch/unicore32/Kconfig b/arch/unicore32/Kconfig index 0769066..cc642f9 100644 --- a/arch/unicore32/Kconfig +++ b/arch/unicore32/Kconfig @@ -1,6 +1,7 @@ config UNICORE32 def_bool y select ARCH_HAS_DEVMEM_IS_ALLOWED + select ARCH_32BIT_OFF_T select ARCH_MIGHT_HAVE_PC_PARPORT select ARCH_MIGHT_HAVE_PC_SERIO select HAVE_MEMBLOCK diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index bada636..52d19b4 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -20,6 +20,7 @@ config X86 select ACPI_LEGACY_TABLES_LOOKUP if ACPI select ACPI_SYSTEM_POWER_STATES_SUPPORT if ACPI select ANON_INODES + select ARCH_32BIT_OFF_T if X86_32 select ARCH_CLOCKSOURCE_DATA select ARCH_DISCARD_MEMBLOCK select ARCH_HAS_ACPI_TABLE_UPGRADE if ACPI diff --git a/arch/x86/um/Kconfig b/arch/x86/um/Kconfig index ed56a1c..8436bcd 100644 --- a/arch/x86/um/Kconfig +++ b/arch/x86/um/Kconfig @@ -21,6 +21,7 @@ config 64BIT config X86_32 def_bool !64BIT select HAVE_AOUT + select ARCH_32BIT_OFF_T select ARCH_WANT_IPC_PARSE_VERSION select MODULES_USE_ELF_REL select CLONE_BACKWARDS diff --git a/arch/xtensa/Kconfig b/arch/xtensa/Kconfig index f610586..90c062d 100644 --- a/arch/xtensa/Kconfig +++ b/arch/xtensa/Kconfig @@ -3,6 +3,7 @@ config ZONE_DMA config XTENSA def_bool y + select ARCH_32BIT_OFF_T select ARCH_WANT_FRAME_POINTERS select ARCH_WANT_IPC_PARSE_VERSION select BUILDTIME_EXTABLE_SORT diff --git a/include/linux/fcntl.h b/include/linux/fcntl.h index 76ce329..46960a1 100644 --- a/include/linux/fcntl.h +++ b/include/linux/fcntl.h @@ -5,7 +5,7 @@ #ifndef force_o_largefile -#define force_o_largefile() (BITS_PER_LONG != 32) +#define force_o_largefile() (!IS_ENABLED(CONFIG_ARCH_32BIT_OFF_T)) #endif #if BITS_PER_LONG == 32 diff --git a/include/uapi/asm-generic/unistd.h b/include/uapi/asm-generic/unistd.h index 9b1462e..a6062be 100644 --- a/include/uapi/asm-generic/unistd.h +++ b/include/uapi/asm-generic/unistd.h @@ -178,7 +178,7 @@ __SYSCALL(__NR_fchownat, sys_fchownat) #define __NR_fchown 55 __SYSCALL(__NR_fchown, sys_fchown) #define __NR_openat 56 -__SC_COMP(__NR_openat, sys_openat, compat_sys_openat) +__SYSCALL(__NR_openat, sys_openat) #define __NR_close 57 __SYSCALL(__NR_close, sys_close) #define __NR_vhangup 58 @@ -676,8 +676,7 @@ __SYSCALL(__NR_fanotify_mark, sys_fanotify_mark) #define __NR_name_to_handle_at 264 __SYSCALL(__NR_name_to_handle_at, sys_name_to_handle_at) #define __NR_open_by_handle_at 265 -__SC_COMP(__NR_open_by_handle_at, sys_open_by_handle_at, \ - compat_sys_open_by_handle_at) +__SYSCALL(__NR_open_by_handle_at, sys_open_by_handle_at) #define __NR_clock_adjtime 266 __SC_COMP(__NR_clock_adjtime, sys_clock_adjtime, compat_sys_clock_adjtime) #define __NR_syncfs 267
All new 32-bit architectures should have 64-bit off_t type, but existing architectures has 32-bit ones. To handle it, new config option is added to arch/Kconfig that defaults ARCH_32BIT_OFF_T to be disabled for non-64 bit architectures. All existing 32-bit architectures enable it explicitly here. New option affects force_o_largefile() behaviour. Namely, if off_t is 64-bits long, we have no reason to reject user to open big files. For syscalls sys_openat() and sys_open_by_handle_at() force_o_largefile() is called, to set O_LARGEFILE flag, and this is the only difference comparing to compat versions. All compat ABIs are already turned to use 64-bit off_t, except tile. So, compat versions for this syscalls are not needed anymore. Tile is handled explicitly. Note that even if architectures has only 64-bit off_t in the kernel (arc, c6x, h8300, hexagon, metag, nios2, openrisc, tile32 and unicore32), a libc may use 32-bit off_t, and therefore want to limit the file size to 4GB unless specified differently in the open flags. Signed-off-by: Yury Norov <ynorov@caviumnetworks.com> --- arch/Kconfig | 4 ++++ arch/arc/Kconfig | 1 + arch/arm/Kconfig | 1 + arch/blackfin/Kconfig | 1 + arch/cris/Kconfig | 1 + arch/frv/Kconfig | 1 + arch/h8300/Kconfig | 1 + arch/hexagon/Kconfig | 1 + arch/m32r/Kconfig | 1 + arch/m68k/Kconfig | 1 + arch/metag/Kconfig | 1 + arch/microblaze/Kconfig | 1 + arch/mips/Kconfig | 1 + arch/mn10300/Kconfig | 1 + arch/nios2/Kconfig | 1 + arch/openrisc/Kconfig | 1 + arch/parisc/Kconfig | 1 + arch/powerpc/Kconfig | 1 + arch/score/Kconfig | 1 + arch/sh/Kconfig | 1 + arch/sparc/Kconfig | 1 + arch/tile/Kconfig | 1 + arch/tile/kernel/compat.c | 3 +++ arch/unicore32/Kconfig | 1 + arch/x86/Kconfig | 1 + arch/x86/um/Kconfig | 1 + arch/xtensa/Kconfig | 1 + include/linux/fcntl.h | 2 +- include/uapi/asm-generic/unistd.h | 5 ++--- 29 files changed, 35 insertions(+), 4 deletions(-)