> Hi Zhangjin, > > On Wed, Jul 12, 2023 at 05:16:34PM +0800, Zhangjin Wu wrote: > > __NR_statx has been added from v4.10: > > > > commit a528d35e8bfc ("statx: Add a system call to make enhanced file info available") > > > > It has been supported by all of the platforms since at least from v4.20 > > and glibc 2.28. > > > > Let's remove the old arch related and dependent sys_stat support > > completely. > > > > This is friendly to the future new architecture porting. > > As I previously said, I'd like that we at least preserve compatibility > with supported stable branches. 4.14 and 4.19 are still supported, so > does this mean that if I rebuild my preinit against the updated nolibc > it will fail to boot on such older systems for the archs that we support? > > Because if it means that in order to support all currently active > kernels, one must only build from an older copy of the lib, that becomes > a disservice to its development and usage. Thus if you checked that aarch64, > arm, i386, mips, riscv, s390 and x86_64 had already adopted statx by 4.14, > then I'm fine and we can drop stat(), but then it must be mentioned in > the commit message, because here it's not explicit. > Yeah, we used 'git blame' before and found the last related change is v4.20, but it is not really the first change. Just read the statx manpage again: https://man7.org/linux/man-pages/man2/statx.2.html It shows something about "Linux 4.11, glibc 2.28. And 'git grep' shows it is true: $ git grep -r statx v4.11 arch/ include/uapi/asm-generic/unistd.h | grep -E "aarch64|arm|mips|s390|x86|:include/uapi" v4.11:arch/arm/tools/syscall.tbl:397 common statx sys_statx v4.11:arch/arm64/include/asm/unistd32.h:#define __NR_statx 397 v4.11:arch/arm64/include/asm/unistd32.h:__SYSCALL(__NR_statx, sys_statx) v4.11:arch/mips/include/uapi/asm/unistd.h:#define __NR_statx (__NR_Linux + 366) v4.11:arch/mips/include/uapi/asm/unistd.h:#define __NR_statx (__NR_Linux + 326) v4.11:arch/mips/include/uapi/asm/unistd.h:#define __NR_statx (__NR_Linux + 330) v4.11:arch/mips/kernel/scall32-o32.S: PTR sys_statx v4.11:arch/mips/kernel/scall64-64.S: PTR sys_statx v4.11:arch/mips/kernel/scall64-n32.S: PTR sys_statx /* 6330 */ v4.11:arch/mips/kernel/scall64-o32.S: PTR sys_statx v4.11:arch/s390/include/uapi/asm/unistd.h:#define __NR_statx 379 v4.11:arch/s390/kernel/compat_wrapper.c:COMPAT_SYSCALL_WRAP5(statx, int, dfd, const char __user *, path, unsigned, flags, unsigned, mask, struct statx __user *, buffer); v4.11:arch/s390/kernel/syscalls.S:SYSCALL(sys_statx,compat_sys_statx) v4.11:arch/x86/entry/syscalls/syscall_32.tbl:383 i386 statx sys_statx v4.11:arch/x86/entry/syscalls/syscall_64.tbl:332 common statx sys_statx v4.11:include/uapi/asm-generic/unistd.h:#define __NR_statx 291 v4.11:include/uapi/asm-generic/unistd.h:__SYSCALL(__NR_statx, sys_statx) both riscv and loongarch use the generic unistd.h, so, all of our supported archs should work as-is. riscv itself is added from v4.15, loongarch itself is added from v5.19. The powerpc we plan to support is from v4.11: $ git grep -r statx v4.11 arch/powerpc/ v4.11:arch/powerpc/include/asm/systbl.h:SYSCALL(statx) v4.11:arch/powerpc/include/uapi/asm/unistd.h:#define __NR_statx 383 So, let's simply correct the commit message (the old v4.10 has a wrong -1 offset, I wrongly used 'git show a528d35e8bfc:Makefile' before). sys_statx has been supported from Linux v4.11 and glibc 2.28: $ git grep -r statx v4.11 arch/ include/uapi/asm-generic/unistd.h Both riscv (firstly added from v4.15) and loongarch (firstly added from v5.19) use the generic unistd.h, the others are supported from arch/. Let's remove the old arch related and dependent sys_stat support completely. Since the current oldest stable branch is v4.14, so, using statx instead of sys_stat preserves compatibility with all of the supported stable branches. This is friendly to the future new architecture porting. Best regards, Zhangjin > Thanks! > Willy