fs: add ksys_fallocate() wrapper; remove in-kernel calls to sys_fallocate()
authorDominik Brodowski <linux@dominikbrodowski.net>
Mon, 19 Mar 2018 16:46:32 +0000 (17:46 +0100)
committerDominik Brodowski <linux@dominikbrodowski.net>
Mon, 2 Apr 2018 18:16:09 +0000 (20:16 +0200)
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>
arch/mips/kernel/linux32.c
arch/parisc/kernel/sys_parisc.c
arch/powerpc/kernel/sys_ppc32.c
arch/s390/kernel/compat_linux.c
arch/sparc/kernel/sys_sparc32.c
arch/x86/ia32/sys_ia32.c
fs/open.c
include/linux/syscalls.h

index 91e85e2f8aa59dd7fbd19525b116fbce94221a28..0779d474c8ad14387c3740058ce31532a3e482ba 100644 (file)
@@ -157,6 +157,6 @@ asmlinkage long sys32_fadvise64_64(int fd, int __pad,
 asmlinkage long sys32_fallocate(int fd, int mode, unsigned offset_a2,
        unsigned offset_a3, unsigned len_a4, unsigned len_a5)
 {
-       return sys_fallocate(fd, mode, merge_64(offset_a2, offset_a3),
-                            merge_64(len_a4, len_a5));
+       return ksys_fallocate(fd, mode, merge_64(offset_a2, offset_a3),
+                             merge_64(len_a4, len_a5));
 }
index 4f47e8379854b78dbbb0aa2afc42bfcaefb85056..588fab336ddd011e7a6476f0468d720262bc5c4b 100644 (file)
@@ -367,8 +367,8 @@ asmlinkage long parisc_sync_file_range(int fd,
 asmlinkage long parisc_fallocate(int fd, int mode, u32 offhi, u32 offlo,
                                u32 lenhi, u32 lenlo)
 {
-        return sys_fallocate(fd, mode, ((u64)offhi << 32) | offlo,
-                             ((u64)lenhi << 32) | lenlo);
+       return ksys_fallocate(fd, mode, ((u64)offhi << 32) | offlo,
+                             ((u64)lenhi << 32) | lenlo);
 }
 
 long parisc_personality(unsigned long personality)
index 36a651e6e03322f50a07b423af164eda6ebffae2..68f11e1065f87849ca0b72798849520f15a7061b 100644 (file)
@@ -100,7 +100,7 @@ asmlinkage int compat_sys_truncate64(const char __user * path, u32 reg4,
 asmlinkage long compat_sys_fallocate(int fd, int mode, u32 offhi, u32 offlo,
                                     u32 lenhi, u32 lenlo)
 {
-       return sys_fallocate(fd, mode, ((loff_t)offhi << 32) | offlo,
+       return ksys_fallocate(fd, mode, ((loff_t)offhi << 32) | offlo,
                             ((loff_t)lenhi << 32) | lenlo);
 }
 
index 71e2c5bc49265f34f6d9f1e0a2d38796e1722356..039858f9f1285cee2327cf5271f6da51c4081ca9 100644 (file)
@@ -516,6 +516,6 @@ COMPAT_SYSCALL_DEFINE6(s390_sync_file_range, int, fd, u32, offhigh, u32, offlow,
 COMPAT_SYSCALL_DEFINE6(s390_fallocate, int, fd, int, mode, u32, offhigh, u32, offlow,
                       u32, lenhigh, u32, lenlow)
 {
-       return sys_fallocate(fd, mode, ((loff_t)offhigh << 32) + offlow,
-                            ((u64)lenhigh << 32) + lenlow);
+       return ksys_fallocate(fd, mode, ((loff_t)offhigh << 32) + offlow,
+                             ((u64)lenhigh << 32) + lenlow);
 }
index 40c0d2e1db1d46fbcd30c02cceb98bed0e969b32..4ba62d676632a7819cfae889a79ee4f433f76cfb 100644 (file)
@@ -250,6 +250,6 @@ long sys32_sync_file_range(unsigned int fd, unsigned long off_high, unsigned lon
 asmlinkage long compat_sys_fallocate(int fd, int mode, u32 offhi, u32 offlo,
                                     u32 lenhi, u32 lenlo)
 {
-       return sys_fallocate(fd, mode, ((loff_t)offhi << 32) | offlo,
-                            ((loff_t)lenhi << 32) | lenlo);
+       return ksys_fallocate(fd, mode, ((loff_t)offhi << 32) | offlo,
+                             ((loff_t)lenhi << 32) | lenlo);
 }
index c08c25f73d792c82bb809e1e24bec5d5aa77371c..df2acb13623f12968ccc1f33ac7a96db5264782b 100644 (file)
@@ -226,8 +226,8 @@ COMPAT_SYSCALL_DEFINE6(x86_fallocate, int, fd, int, mode,
                       unsigned int, offset_lo, unsigned int, offset_hi,
                       unsigned int, len_lo, unsigned int, len_hi)
 {
-       return sys_fallocate(fd, mode, ((u64)offset_hi << 32) | offset_lo,
-                            ((u64)len_hi << 32) | len_lo);
+       return ksys_fallocate(fd, mode, ((u64)offset_hi << 32) | offset_lo,
+                             ((u64)len_hi << 32) | len_lo);
 }
 
 /*
index 2e816fc7bd5613596a623c35c5d77203e7b76018..d0e955b558ad84ce2d6f98f6ccb490185bc36cc2 100644 (file)
--- a/fs/open.c
+++ b/fs/open.c
@@ -333,7 +333,7 @@ int vfs_fallocate(struct file *file, int mode, loff_t offset, loff_t len)
 }
 EXPORT_SYMBOL_GPL(vfs_fallocate);
 
-SYSCALL_DEFINE4(fallocate, int, fd, int, mode, loff_t, offset, loff_t, len)
+int ksys_fallocate(int fd, int mode, loff_t offset, loff_t len)
 {
        struct fd f = fdget(fd);
        int error = -EBADF;
@@ -345,6 +345,11 @@ SYSCALL_DEFINE4(fallocate, int, fd, int, mode, loff_t, offset, loff_t, len)
        return error;
 }
 
+SYSCALL_DEFINE4(fallocate, int, fd, int, mode, loff_t, offset, loff_t, len)
+{
+       return ksys_fallocate(fd, mode, offset, len);
+}
+
 /*
  * access() needs to use the real uid/gid, not the effective uid/gid.
  * We do this by temporarily clearing all FS-related capabilities and
index a30e4c2d0c27ca285a81d558da7f5a6dcb2c460e..613b8127834dc3c5a057302befd447e8aa0ef9e8 100644 (file)
@@ -969,6 +969,7 @@ ssize_t ksys_pread64(unsigned int fd, char __user *buf, size_t count,
                     loff_t pos);
 ssize_t ksys_pwrite64(unsigned int fd, const char __user *buf,
                      size_t count, loff_t pos);
+int ksys_fallocate(int fd, int mode, loff_t offset, loff_t len);
 
 /*
  * The following kernel syscall equivalents are just wrappers to fs-internal