Commit 0473c9b5 authored by Heiko Carstens's avatar Heiko Carstens

compat: let architectures define __ARCH_WANT_COMPAT_SYS_GETDENTS64

For architecture dependent compat syscalls in common code an architecture
must define something like __ARCH_WANT_<WHATEVER> if it wants to use the
code.
This however is not true for compat_sys_getdents64 for which architectures
must define __ARCH_OMIT_COMPAT_SYS_GETDENTS64 if they do not want the code.

This leads to the situation where all architectures, except mips, get the
compat code but only x86_64, arm64 and the generic syscall architectures
actually use it.

So invert the logic, so that architectures actively must do something to
get the compat code.

This way a couple of architectures get rid of otherwise dead code.
Signed-off-by: default avatarHeiko Carstens <heiko.carstens@de.ibm.com>
parent 0414855f
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#ifdef CONFIG_COMPAT #ifdef CONFIG_COMPAT
#define __ARCH_WANT_COMPAT_SYS_GETDENTS64
#define __ARCH_WANT_COMPAT_STAT64 #define __ARCH_WANT_COMPAT_STAT64
#define __ARCH_WANT_SYS_GETHOSTNAME #define __ARCH_WANT_SYS_GETHOSTNAME
#define __ARCH_WANT_SYS_PAUSE #define __ARCH_WANT_SYS_PAUSE
......
...@@ -24,7 +24,6 @@ ...@@ -24,7 +24,6 @@
#ifndef __ASSEMBLY__ #ifndef __ASSEMBLY__
#define __ARCH_OMIT_COMPAT_SYS_GETDENTS64
#define __ARCH_WANT_OLD_READDIR #define __ARCH_WANT_OLD_READDIR
#define __ARCH_WANT_SYS_ALARM #define __ARCH_WANT_SYS_ALARM
#define __ARCH_WANT_SYS_GETHOSTNAME #define __ARCH_WANT_SYS_GETHOSTNAME
......
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
# include <asm/unistd_64.h> # include <asm/unistd_64.h>
# include <asm/unistd_64_x32.h> # include <asm/unistd_64_x32.h>
# define __ARCH_WANT_COMPAT_SYS_TIME # define __ARCH_WANT_COMPAT_SYS_TIME
# define __ARCH_WANT_COMPAT_SYS_GETDENTS64
# endif # endif
......
...@@ -981,7 +981,7 @@ asmlinkage long compat_sys_getdents(unsigned int fd, ...@@ -981,7 +981,7 @@ asmlinkage long compat_sys_getdents(unsigned int fd,
return error; return error;
} }
#ifndef __ARCH_OMIT_COMPAT_SYS_GETDENTS64 #ifdef __ARCH_WANT_COMPAT_SYS_GETDENTS64
struct compat_getdents_callback64 { struct compat_getdents_callback64 {
struct dir_context ctx; struct dir_context ctx;
...@@ -1066,7 +1066,7 @@ asmlinkage long compat_sys_getdents64(unsigned int fd, ...@@ -1066,7 +1066,7 @@ asmlinkage long compat_sys_getdents64(unsigned int fd,
fdput(f); fdput(f);
return error; return error;
} }
#endif /* ! __ARCH_OMIT_COMPAT_SYS_GETDENTS64 */ #endif /* __ARCH_WANT_COMPAT_SYS_GETDENTS64 */
/* /*
* Exactly like fs/open.c:sys_open(), except that it doesn't set the * Exactly like fs/open.c:sys_open(), except that it doesn't set the
......
...@@ -502,9 +502,11 @@ asmlinkage long compat_sys_old_readdir(unsigned int fd, ...@@ -502,9 +502,11 @@ asmlinkage long compat_sys_old_readdir(unsigned int fd,
asmlinkage long compat_sys_getdents(unsigned int fd, asmlinkage long compat_sys_getdents(unsigned int fd,
struct compat_linux_dirent __user *dirent, struct compat_linux_dirent __user *dirent,
unsigned int count); unsigned int count);
#ifdef __ARCH_WANT_COMPAT_SYS_GETDENTS64
asmlinkage long compat_sys_getdents64(unsigned int fd, asmlinkage long compat_sys_getdents64(unsigned int fd,
struct linux_dirent64 __user *dirent, struct linux_dirent64 __user *dirent,
unsigned int count); unsigned int count);
#endif
asmlinkage long compat_sys_vmsplice(int fd, const struct compat_iovec __user *, asmlinkage long compat_sys_vmsplice(int fd, const struct compat_iovec __user *,
unsigned int nr_segs, unsigned int flags); unsigned int nr_segs, unsigned int flags);
asmlinkage long compat_sys_open(const char __user *filename, int flags, asmlinkage long compat_sys_open(const char __user *filename, int flags,
......
...@@ -191,6 +191,7 @@ __SYSCALL(__NR_quotactl, sys_quotactl) ...@@ -191,6 +191,7 @@ __SYSCALL(__NR_quotactl, sys_quotactl)
/* fs/readdir.c */ /* fs/readdir.c */
#define __NR_getdents64 61 #define __NR_getdents64 61
#define __ARCH_WANT_COMPAT_SYS_GETDENTS64
__SC_COMP(__NR_getdents64, sys_getdents64, compat_sys_getdents64) __SC_COMP(__NR_getdents64, sys_getdents64, compat_sys_getdents64)
/* fs/read_write.c */ /* fs/read_write.c */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment