fs/quota: add kernel_quotactl() helper; remove in-kernel call to syscall
Using the fs-internal kernel_quotactl() helper allows us to get rid of the fs-internal call to the sys_quotactl() syscall. 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 Acked-by: Jan Kara <jack@suse.cz> Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
This commit is contained in:
parent
183caa3c86
commit
cb0b476ab1
|
@ -59,7 +59,7 @@ asmlinkage long sys32_quotactl(unsigned int cmd, const char __user *special,
|
|||
case Q_GETQUOTA:
|
||||
dqblk = compat_alloc_user_space(sizeof(struct if_dqblk));
|
||||
compat_dqblk = addr;
|
||||
ret = sys_quotactl(cmd, special, id, dqblk);
|
||||
ret = kernel_quotactl(cmd, special, id, dqblk);
|
||||
if (ret)
|
||||
break;
|
||||
if (copy_in_user(compat_dqblk, dqblk, sizeof(*compat_dqblk)) ||
|
||||
|
@ -75,12 +75,12 @@ asmlinkage long sys32_quotactl(unsigned int cmd, const char __user *special,
|
|||
get_user(data, &compat_dqblk->dqb_valid) ||
|
||||
put_user(data, &dqblk->dqb_valid))
|
||||
break;
|
||||
ret = sys_quotactl(cmd, special, id, dqblk);
|
||||
ret = kernel_quotactl(cmd, special, id, dqblk);
|
||||
break;
|
||||
case Q_XGETQSTAT:
|
||||
fsqstat = compat_alloc_user_space(sizeof(struct fs_quota_stat));
|
||||
compat_fsqstat = addr;
|
||||
ret = sys_quotactl(cmd, special, id, fsqstat);
|
||||
ret = kernel_quotactl(cmd, special, id, fsqstat);
|
||||
if (ret)
|
||||
break;
|
||||
ret = -EFAULT;
|
||||
|
@ -113,7 +113,7 @@ asmlinkage long sys32_quotactl(unsigned int cmd, const char __user *special,
|
|||
ret = 0;
|
||||
break;
|
||||
default:
|
||||
ret = sys_quotactl(cmd, special, id, addr);
|
||||
ret = kernel_quotactl(cmd, special, id, addr);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -833,8 +833,8 @@ static struct super_block *quotactl_block(const char __user *special, int cmd)
|
|||
* calls. Maybe we need to add the process quotas etc. in the future,
|
||||
* but we probably should use rlimits for that.
|
||||
*/
|
||||
SYSCALL_DEFINE4(quotactl, unsigned int, cmd, const char __user *, special,
|
||||
qid_t, id, void __user *, addr)
|
||||
int kernel_quotactl(unsigned int cmd, const char __user *special,
|
||||
qid_t id, void __user *addr)
|
||||
{
|
||||
uint cmds, type;
|
||||
struct super_block *sb = NULL;
|
||||
|
@ -885,3 +885,9 @@ out:
|
|||
path_put(pathp);
|
||||
return ret;
|
||||
}
|
||||
|
||||
SYSCALL_DEFINE4(quotactl, unsigned int, cmd, const char __user *, special,
|
||||
qid_t, id, void __user *, addr)
|
||||
{
|
||||
return kernel_quotactl(cmd, special, id, addr);
|
||||
}
|
||||
|
|
|
@ -27,6 +27,9 @@ static inline bool is_quota_modification(struct inode *inode, struct iattr *ia)
|
|||
(ia->ia_valid & ATTR_GID && !gid_eq(ia->ia_gid, inode->i_gid));
|
||||
}
|
||||
|
||||
int kernel_quotactl(unsigned int cmd, const char __user *special,
|
||||
qid_t id, void __user *addr);
|
||||
|
||||
#if defined(CONFIG_QUOTA)
|
||||
|
||||
#define quota_error(sb, fmt, args...) \
|
||||
|
|
Loading…
Reference in a new issue