linux: use statx for fstat if neither newfstatat nor fstatat64 is present

Message ID 20220524081159.956560-1-caiyinyu@loongson.cn
State Superseded
Headers
Series linux: use statx for fstat if neither newfstatat nor fstatat64 is present |

Checks

Context Check Description
dj/TryBot-apply_patch success Patch applied to master at the time it was sent
dj/TryBot-32bit success Build for i686

Commit Message

caiyinyu May 24, 2022, 8:11 a.m. UTC
  From: WANG Xuerui <git@xen0n.name>

LoongArch is going to be the first architecture supported by Linux that
has neither fstat* nor newfstatat [1], instead exclusively relying on
statx. So in fstatat64's implementation, we need to also enable statx
usage if neither fstatat64 nor newfstatat is present, to prepare for
this new case of kernel ABI.

[1]: https://lore.kernel.org/all/20220518092619.1269111-1-chenhuacai@loongson.cn/
---
 sysdeps/unix/sysv/linux/fstatat64.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
  

Comments

Adhemerval Zanella May 27, 2022, 3:42 p.m. UTC | #1
On 24/05/2022 05:11, caiyinyu wrote:
> From: WANG Xuerui <git@xen0n.name>
> 
> LoongArch is going to be the first architecture supported by Linux that
> has neither fstat* nor newfstatat [1], instead exclusively relying on
> statx. So in fstatat64's implementation, we need to also enable statx
> usage if neither fstatat64 nor newfstatat is present, to prepare for
> this new case of kernel ABI.
> 
> [1]: https://lore.kernel.org/all/20220518092619.1269111-1-chenhuacai@loongson.cn/

LGTM, thanks.

Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>

> ---
>  sysdeps/unix/sysv/linux/fstatat64.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/sysdeps/unix/sysv/linux/fstatat64.c b/sysdeps/unix/sysv/linux/fstatat64.c
> index 2ab914380d..8b1a1a290d 100644
> --- a/sysdeps/unix/sysv/linux/fstatat64.c
> +++ b/sysdeps/unix/sysv/linux/fstatat64.c
> @@ -42,7 +42,8 @@ _Static_assert (sizeof (__blkcnt_t) == sizeof (__blkcnt64_t),
>  
>  #if (__WORDSIZE == 32 \
>       && (!defined __SYSCALL_WORDSIZE || __SYSCALL_WORDSIZE == 32)) \
> -     || defined STAT_HAS_TIME32
> +     || defined STAT_HAS_TIME32 \
> +     || (!defined __NR_newfstatat && !defined __NR_fstatat64)
>  # define FSTATAT_USE_STATX 1
>  
>  static inline int
  

Patch

diff --git a/sysdeps/unix/sysv/linux/fstatat64.c b/sysdeps/unix/sysv/linux/fstatat64.c
index 2ab914380d..8b1a1a290d 100644
--- a/sysdeps/unix/sysv/linux/fstatat64.c
+++ b/sysdeps/unix/sysv/linux/fstatat64.c
@@ -42,7 +42,8 @@  _Static_assert (sizeof (__blkcnt_t) == sizeof (__blkcnt64_t),
 
 #if (__WORDSIZE == 32 \
      && (!defined __SYSCALL_WORDSIZE || __SYSCALL_WORDSIZE == 32)) \
-     || defined STAT_HAS_TIME32
+     || defined STAT_HAS_TIME32 \
+     || (!defined __NR_newfstatat && !defined __NR_fstatat64)
 # define FSTATAT_USE_STATX 1
 
 static inline int