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>
This commit is contained in:
parent
36028d5dd7
commit
edf292c76b
|
@ -157,6 +157,6 @@ asmlinkage long sys32_fadvise64_64(int fd, int __pad,
|
||||||
asmlinkage long sys32_fallocate(int fd, int mode, unsigned offset_a2,
|
asmlinkage long sys32_fallocate(int fd, int mode, unsigned offset_a2,
|
||||||
unsigned offset_a3, unsigned len_a4, unsigned len_a5)
|
unsigned offset_a3, unsigned len_a4, unsigned len_a5)
|
||||||
{
|
{
|
||||||
return sys_fallocate(fd, mode, merge_64(offset_a2, offset_a3),
|
return ksys_fallocate(fd, mode, merge_64(offset_a2, offset_a3),
|
||||||
merge_64(len_a4, len_a5));
|
merge_64(len_a4, len_a5));
|
||||||
}
|
}
|
||||||
|
|
|
@ -367,7 +367,7 @@ asmlinkage long parisc_sync_file_range(int fd,
|
||||||
asmlinkage long parisc_fallocate(int fd, int mode, u32 offhi, u32 offlo,
|
asmlinkage long parisc_fallocate(int fd, int mode, u32 offhi, u32 offlo,
|
||||||
u32 lenhi, u32 lenlo)
|
u32 lenhi, u32 lenlo)
|
||||||
{
|
{
|
||||||
return sys_fallocate(fd, mode, ((u64)offhi << 32) | offlo,
|
return ksys_fallocate(fd, mode, ((u64)offhi << 32) | offlo,
|
||||||
((u64)lenhi << 32) | lenlo);
|
((u64)lenhi << 32) | lenlo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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,
|
asmlinkage long compat_sys_fallocate(int fd, int mode, u32 offhi, u32 offlo,
|
||||||
u32 lenhi, u32 lenlo)
|
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);
|
((loff_t)lenhi << 32) | lenlo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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,
|
COMPAT_SYSCALL_DEFINE6(s390_fallocate, int, fd, int, mode, u32, offhigh, u32, offlow,
|
||||||
u32, lenhigh, u32, lenlow)
|
u32, lenhigh, u32, lenlow)
|
||||||
{
|
{
|
||||||
return sys_fallocate(fd, mode, ((loff_t)offhigh << 32) + offlow,
|
return ksys_fallocate(fd, mode, ((loff_t)offhigh << 32) + offlow,
|
||||||
((u64)lenhigh << 32) + lenlow);
|
((u64)lenhigh << 32) + lenlow);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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,
|
asmlinkage long compat_sys_fallocate(int fd, int mode, u32 offhi, u32 offlo,
|
||||||
u32 lenhi, u32 lenlo)
|
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);
|
((loff_t)lenhi << 32) | lenlo);
|
||||||
}
|
}
|
||||||
|
|
|
@ -226,7 +226,7 @@ COMPAT_SYSCALL_DEFINE6(x86_fallocate, int, fd, int, mode,
|
||||||
unsigned int, offset_lo, unsigned int, offset_hi,
|
unsigned int, offset_lo, unsigned int, offset_hi,
|
||||||
unsigned int, len_lo, unsigned int, len_hi)
|
unsigned int, len_lo, unsigned int, len_hi)
|
||||||
{
|
{
|
||||||
return sys_fallocate(fd, mode, ((u64)offset_hi << 32) | offset_lo,
|
return ksys_fallocate(fd, mode, ((u64)offset_hi << 32) | offset_lo,
|
||||||
((u64)len_hi << 32) | len_lo);
|
((u64)len_hi << 32) | len_lo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -333,7 +333,7 @@ int vfs_fallocate(struct file *file, int mode, loff_t offset, loff_t len)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(vfs_fallocate);
|
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);
|
struct fd f = fdget(fd);
|
||||||
int error = -EBADF;
|
int error = -EBADF;
|
||||||
|
@ -345,6 +345,11 @@ SYSCALL_DEFINE4(fallocate, int, fd, int, mode, loff_t, offset, loff_t, len)
|
||||||
return error;
|
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.
|
* access() needs to use the real uid/gid, not the effective uid/gid.
|
||||||
* We do this by temporarily clearing all FS-related capabilities and
|
* We do this by temporarily clearing all FS-related capabilities and
|
||||||
|
|
|
@ -969,6 +969,7 @@ ssize_t ksys_pread64(unsigned int fd, char __user *buf, size_t count,
|
||||||
loff_t pos);
|
loff_t pos);
|
||||||
ssize_t ksys_pwrite64(unsigned int fd, const char __user *buf,
|
ssize_t ksys_pwrite64(unsigned int fd, const char __user *buf,
|
||||||
size_t count, loff_t pos);
|
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
|
* The following kernel syscall equivalents are just wrappers to fs-internal
|
||||||
|
|
Loading…
Reference in New Issue