diff options
author | Dominik Brodowski <linux@dominikbrodowski.net> | 2018-03-19 12:46:32 -0400 |
---|---|---|
committer | Dominik Brodowski <linux@dominikbrodowski.net> | 2018-04-02 14:16:09 -0400 |
commit | edf292c76b884a499cc60ad5cdada2663cc39a2f (patch) | |
tree | 834848d30e257f66bf879a49a358438f05172166 | |
parent | 36028d5dd71175c332ab634e089e16dbdfe3812b (diff) |
fs: add ksys_fallocate() wrapper; remove in-kernel calls to sys_fallocate()
Using the ksys_fallocate() wrapper allows us to get rid of in-kernel
calls to the sys_fallocate() syscall. The ksys_ prefix denotes that this
function is meant as a drop-in replacement for the syscall. In
particular, it uses the same calling convention as sys_fallocate().
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>
-rw-r--r-- | arch/mips/kernel/linux32.c | 4 | ||||
-rw-r--r-- | arch/parisc/kernel/sys_parisc.c | 4 | ||||
-rw-r--r-- | arch/powerpc/kernel/sys_ppc32.c | 2 | ||||
-rw-r--r-- | arch/s390/kernel/compat_linux.c | 4 | ||||
-rw-r--r-- | arch/sparc/kernel/sys_sparc32.c | 4 | ||||
-rw-r--r-- | arch/x86/ia32/sys_ia32.c | 4 | ||||
-rw-r--r-- | fs/open.c | 7 | ||||
-rw-r--r-- | include/linux/syscalls.h | 1 |
8 files changed, 18 insertions, 12 deletions
diff --git a/arch/mips/kernel/linux32.c b/arch/mips/kernel/linux32.c index 91e85e2f8aa5..0779d474c8ad 100644 --- a/arch/mips/kernel/linux32.c +++ b/arch/mips/kernel/linux32.c | |||
@@ -157,6 +157,6 @@ asmlinkage long sys32_fadvise64_64(int fd, int __pad, | |||
157 | asmlinkage long sys32_fallocate(int fd, int mode, unsigned offset_a2, | 157 | asmlinkage long sys32_fallocate(int fd, int mode, unsigned offset_a2, |
158 | unsigned offset_a3, unsigned len_a4, unsigned len_a5) | 158 | unsigned offset_a3, unsigned len_a4, unsigned len_a5) |
159 | { | 159 | { |
160 | return sys_fallocate(fd, mode, merge_64(offset_a2, offset_a3), | 160 | return ksys_fallocate(fd, mode, merge_64(offset_a2, offset_a3), |
161 | merge_64(len_a4, len_a5)); | 161 | merge_64(len_a4, len_a5)); |
162 | } | 162 | } |
diff --git a/arch/parisc/kernel/sys_parisc.c b/arch/parisc/kernel/sys_parisc.c index 4f47e8379854..588fab336ddd 100644 --- a/arch/parisc/kernel/sys_parisc.c +++ b/arch/parisc/kernel/sys_parisc.c | |||
@@ -367,8 +367,8 @@ asmlinkage long parisc_sync_file_range(int fd, | |||
367 | asmlinkage long parisc_fallocate(int fd, int mode, u32 offhi, u32 offlo, | 367 | asmlinkage long parisc_fallocate(int fd, int mode, u32 offhi, u32 offlo, |
368 | u32 lenhi, u32 lenlo) | 368 | u32 lenhi, u32 lenlo) |
369 | { | 369 | { |
370 | return sys_fallocate(fd, mode, ((u64)offhi << 32) | offlo, | 370 | return ksys_fallocate(fd, mode, ((u64)offhi << 32) | offlo, |
371 | ((u64)lenhi << 32) | lenlo); | 371 | ((u64)lenhi << 32) | lenlo); |
372 | } | 372 | } |
373 | 373 | ||
374 | long parisc_personality(unsigned long personality) | 374 | long parisc_personality(unsigned long personality) |
diff --git a/arch/powerpc/kernel/sys_ppc32.c b/arch/powerpc/kernel/sys_ppc32.c index 36a651e6e033..68f11e1065f8 100644 --- a/arch/powerpc/kernel/sys_ppc32.c +++ b/arch/powerpc/kernel/sys_ppc32.c | |||
@@ -100,7 +100,7 @@ asmlinkage int compat_sys_truncate64(const char __user * path, u32 reg4, | |||
100 | asmlinkage long compat_sys_fallocate(int fd, int mode, u32 offhi, u32 offlo, | 100 | asmlinkage long compat_sys_fallocate(int fd, int mode, u32 offhi, u32 offlo, |
101 | u32 lenhi, u32 lenlo) | 101 | u32 lenhi, u32 lenlo) |
102 | { | 102 | { |
103 | return sys_fallocate(fd, mode, ((loff_t)offhi << 32) | offlo, | 103 | return ksys_fallocate(fd, mode, ((loff_t)offhi << 32) | offlo, |
104 | ((loff_t)lenhi << 32) | lenlo); | 104 | ((loff_t)lenhi << 32) | lenlo); |
105 | } | 105 | } |
106 | 106 | ||
diff --git a/arch/s390/kernel/compat_linux.c b/arch/s390/kernel/compat_linux.c index 71e2c5bc4926..039858f9f128 100644 --- a/arch/s390/kernel/compat_linux.c +++ b/arch/s390/kernel/compat_linux.c | |||
@@ -516,6 +516,6 @@ COMPAT_SYSCALL_DEFINE6(s390_sync_file_range, int, fd, u32, offhigh, u32, offlow, | |||
516 | COMPAT_SYSCALL_DEFINE6(s390_fallocate, int, fd, int, mode, u32, offhigh, u32, offlow, | 516 | COMPAT_SYSCALL_DEFINE6(s390_fallocate, int, fd, int, mode, u32, offhigh, u32, offlow, |
517 | u32, lenhigh, u32, lenlow) | 517 | u32, lenhigh, u32, lenlow) |
518 | { | 518 | { |
519 | return sys_fallocate(fd, mode, ((loff_t)offhigh << 32) + offlow, | 519 | return ksys_fallocate(fd, mode, ((loff_t)offhigh << 32) + offlow, |
520 | ((u64)lenhigh << 32) + lenlow); | 520 | ((u64)lenhigh << 32) + lenlow); |
521 | } | 521 | } |
diff --git a/arch/sparc/kernel/sys_sparc32.c b/arch/sparc/kernel/sys_sparc32.c index 40c0d2e1db1d..4ba62d676632 100644 --- a/arch/sparc/kernel/sys_sparc32.c +++ b/arch/sparc/kernel/sys_sparc32.c | |||
@@ -250,6 +250,6 @@ long sys32_sync_file_range(unsigned int fd, unsigned long off_high, unsigned lon | |||
250 | asmlinkage long compat_sys_fallocate(int fd, int mode, u32 offhi, u32 offlo, | 250 | asmlinkage long compat_sys_fallocate(int fd, int mode, u32 offhi, u32 offlo, |
251 | u32 lenhi, u32 lenlo) | 251 | u32 lenhi, u32 lenlo) |
252 | { | 252 | { |
253 | return sys_fallocate(fd, mode, ((loff_t)offhi << 32) | offlo, | 253 | return ksys_fallocate(fd, mode, ((loff_t)offhi << 32) | offlo, |
254 | ((loff_t)lenhi << 32) | lenlo); | 254 | ((loff_t)lenhi << 32) | lenlo); |
255 | } | 255 | } |
diff --git a/arch/x86/ia32/sys_ia32.c b/arch/x86/ia32/sys_ia32.c index c08c25f73d79..df2acb13623f 100644 --- a/arch/x86/ia32/sys_ia32.c +++ b/arch/x86/ia32/sys_ia32.c | |||
@@ -226,8 +226,8 @@ COMPAT_SYSCALL_DEFINE6(x86_fallocate, int, fd, int, mode, | |||
226 | unsigned int, offset_lo, unsigned int, offset_hi, | 226 | unsigned int, offset_lo, unsigned int, offset_hi, |
227 | unsigned int, len_lo, unsigned int, len_hi) | 227 | unsigned int, len_lo, unsigned int, len_hi) |
228 | { | 228 | { |
229 | return sys_fallocate(fd, mode, ((u64)offset_hi << 32) | offset_lo, | 229 | return ksys_fallocate(fd, mode, ((u64)offset_hi << 32) | offset_lo, |
230 | ((u64)len_hi << 32) | len_lo); | 230 | ((u64)len_hi << 32) | len_lo); |
231 | } | 231 | } |
232 | 232 | ||
233 | /* | 233 | /* |
@@ -333,7 +333,7 @@ int vfs_fallocate(struct file *file, int mode, loff_t offset, loff_t len) | |||
333 | } | 333 | } |
334 | EXPORT_SYMBOL_GPL(vfs_fallocate); | 334 | EXPORT_SYMBOL_GPL(vfs_fallocate); |
335 | 335 | ||
336 | SYSCALL_DEFINE4(fallocate, int, fd, int, mode, loff_t, offset, loff_t, len) | 336 | int ksys_fallocate(int fd, int mode, loff_t offset, loff_t len) |
337 | { | 337 | { |
338 | struct fd f = fdget(fd); | 338 | struct fd f = fdget(fd); |
339 | int error = -EBADF; | 339 | int error = -EBADF; |
@@ -345,6 +345,11 @@ SYSCALL_DEFINE4(fallocate, int, fd, int, mode, loff_t, offset, loff_t, len) | |||
345 | return error; | 345 | return error; |
346 | } | 346 | } |
347 | 347 | ||
348 | SYSCALL_DEFINE4(fallocate, int, fd, int, mode, loff_t, offset, loff_t, len) | ||
349 | { | ||
350 | return ksys_fallocate(fd, mode, offset, len); | ||
351 | } | ||
352 | |||
348 | /* | 353 | /* |
349 | * access() needs to use the real uid/gid, not the effective uid/gid. | 354 | * access() needs to use the real uid/gid, not the effective uid/gid. |
350 | * We do this by temporarily clearing all FS-related capabilities and | 355 | * We do this by temporarily clearing all FS-related capabilities and |
diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h index a30e4c2d0c27..613b8127834d 100644 --- a/include/linux/syscalls.h +++ b/include/linux/syscalls.h | |||
@@ -969,6 +969,7 @@ ssize_t ksys_pread64(unsigned int fd, char __user *buf, size_t count, | |||
969 | loff_t pos); | 969 | loff_t pos); |
970 | ssize_t ksys_pwrite64(unsigned int fd, const char __user *buf, | 970 | ssize_t ksys_pwrite64(unsigned int fd, const char __user *buf, |
971 | size_t count, loff_t pos); | 971 | size_t count, loff_t pos); |
972 | int ksys_fallocate(int fd, int mode, loff_t offset, loff_t len); | ||
972 | 973 | ||
973 | /* | 974 | /* |
974 | * The following kernel syscall equivalents are just wrappers to fs-internal | 975 | * The following kernel syscall equivalents are just wrappers to fs-internal |