diff options
author | Dominik Brodowski <linux@dominikbrodowski.net> | 2018-03-11 11:34:47 +0100 |
---|---|---|
committer | Dominik Brodowski <linux@dominikbrodowski.net> | 2018-04-02 20:15:52 +0200 |
commit | 0f32ab8cfac478be053cb526ced8918ef6f4df47 (patch) | |
tree | 60a5fdeb99d3630f8b7a25881e70f9021b8a1602 /include | |
parent | 447016e9681965fda8dcd9e4fd3c55308a6fd166 (diff) | |
download | linux-0f32ab8cfac478be053cb526ced8918ef6f4df47.tar.gz linux-0f32ab8cfac478be053cb526ced8918ef6f4df47.tar.bz2 linux-0f32ab8cfac478be053cb526ced8918ef6f4df47.zip |
fs: add ksys_unlink() wrapper; remove in-kernel calls to sys_unlink()
Using this wrapper allows us to avoid the in-kernel calls to the
sys_unlink() syscall. The ksys_ prefix denotes that this function is meant
s a drop-in replacement for the syscall. In particular, it uses the same
calling convention as sys_unlink().
In the near future, all callers of ksys_unlink() should be converted to
call do_unlinkat() directly or, at least, to operate on regular kernel
pointers.
This patch is part of a series which removes in-kernel calls to syscalls.
On this basis, the syscall entry path can be streamlined. For details, see
http://lkml.kernel.org/r/20180325162527.GA17492@light.dominikbrodowski.net
Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/syscalls.h | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h index 090645b48447..7cbfb41e666b 100644 --- a/include/linux/syscalls.h +++ b/include/linux/syscalls.h @@ -954,4 +954,15 @@ int ksys_chroot(const char __user *filename); ssize_t ksys_write(unsigned int fd, const char __user *buf, size_t count); int ksys_chdir(const char __user *filename); +/* + * The following kernel syscall equivalents are just wrappers to fs-internal + * functions. Therefore, provide stubs to be inlined at the callsites. + */ +extern long do_unlinkat(int dfd, struct filename *name); + +static inline long ksys_unlink(const char __user *pathname) +{ + return do_unlinkat(AT_FDCWD, getname(pathname)); +} + #endif |