diff options
Diffstat (limited to 'arch/s390/kernel/compat_linux.c')
-rw-r--r-- | arch/s390/kernel/compat_linux.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/arch/s390/kernel/compat_linux.c b/arch/s390/kernel/compat_linux.c index cc20f0e3a7d3..2d021626c1a6 100644 --- a/arch/s390/kernel/compat_linux.c +++ b/arch/s390/kernel/compat_linux.c | |||
@@ -905,6 +905,26 @@ asmlinkage long sys32_fstat64(unsigned long fd, struct stat64_emu31 __user * sta | |||
905 | return ret; | 905 | return ret; |
906 | } | 906 | } |
907 | 907 | ||
908 | asmlinkage long sys32_fstatat(unsigned int dfd, char __user *filename, | ||
909 | struct stat64_emu31 __user* statbuf, int flag) | ||
910 | { | ||
911 | struct kstat stat; | ||
912 | int error = -EINVAL; | ||
913 | |||
914 | if ((flag & ~AT_SYMLINK_NOFOLLOW) != 0) | ||
915 | goto out; | ||
916 | |||
917 | if (flag & AT_SYMLINK_NOFOLLOW) | ||
918 | error = vfs_lstat_fd(dfd, filename, &stat); | ||
919 | else | ||
920 | error = vfs_stat_fd(dfd, filename, &stat); | ||
921 | |||
922 | if (!error) | ||
923 | error = cp_stat64(statbuf, &stat); | ||
924 | out: | ||
925 | return error; | ||
926 | } | ||
927 | |||
908 | /* | 928 | /* |
909 | * Linux/i386 didn't use to be able to handle more than | 929 | * Linux/i386 didn't use to be able to handle more than |
910 | * 4 system call parameters, so these system calls used a memory | 930 | * 4 system call parameters, so these system calls used a memory |