提交 a5317669 编写于 作者: B Bijan Mottahedeh 提交者: Xiaoguang Wang

statx: allow system call to be invoked from io_uring

to #28736503

commit 0018784fc84f636d473a0d2a65a34f9d01893c0a upstream

This is a prepatory patch to allow io_uring to invoke statx directly.
Signed-off-by: NBijan Mottahedeh <bijan.mottahedeh@oracle.com>
Signed-off-by: NJens Axboe <axboe@kernel.dk>
Signed-off-by: NXiaoguang Wang <xiaoguang.wang@linux.alibaba.com>
Acked-by: NJoseph Qi <joseph.qi@linux.alibaba.com>
上级 756f2076
...@@ -202,3 +202,5 @@ int sb_init_dio_done_wq(struct super_block *sb); ...@@ -202,3 +202,5 @@ int sb_init_dio_done_wq(struct super_block *sb);
*/ */
unsigned vfs_stat_set_lookup_flags(unsigned *lookup_flags, int flags); unsigned vfs_stat_set_lookup_flags(unsigned *lookup_flags, int flags);
int cp_statx(const struct kstat *stat, struct statx __user *buffer); int cp_statx(const struct kstat *stat, struct statx __user *buffer);
int do_statx(int dfd, const char __user *filename, unsigned flags,
unsigned int mask, struct statx __user *buffer);
...@@ -562,6 +562,24 @@ cp_statx(const struct kstat *stat, struct statx __user *buffer) ...@@ -562,6 +562,24 @@ cp_statx(const struct kstat *stat, struct statx __user *buffer)
return copy_to_user(buffer, &tmp, sizeof(tmp)) ? -EFAULT : 0; return copy_to_user(buffer, &tmp, sizeof(tmp)) ? -EFAULT : 0;
} }
int do_statx(int dfd, const char __user *filename, unsigned flags,
unsigned int mask, struct statx __user *buffer)
{
struct kstat stat;
int error;
if (mask & STATX__RESERVED)
return -EINVAL;
if ((flags & AT_STATX_SYNC_TYPE) == AT_STATX_SYNC_TYPE)
return -EINVAL;
error = vfs_statx(dfd, filename, flags, &stat, mask);
if (error)
return error;
return cp_statx(&stat, buffer);
}
/** /**
* sys_statx - System call to get enhanced stats * sys_statx - System call to get enhanced stats
* @dfd: Base directory to pathwalk from *or* fd to stat. * @dfd: Base directory to pathwalk from *or* fd to stat.
...@@ -578,19 +596,7 @@ SYSCALL_DEFINE5(statx, ...@@ -578,19 +596,7 @@ SYSCALL_DEFINE5(statx,
unsigned int, mask, unsigned int, mask,
struct statx __user *, buffer) struct statx __user *, buffer)
{ {
struct kstat stat; return do_statx(dfd, filename, flags, mask, buffer);
int error;
if (mask & STATX__RESERVED)
return -EINVAL;
if ((flags & AT_STATX_SYNC_TYPE) == AT_STATX_SYNC_TYPE)
return -EINVAL;
error = vfs_statx(dfd, filename, flags, &stat, mask);
if (error)
return error;
return cp_statx(&stat, buffer);
} }
#ifdef CONFIG_COMPAT #ifdef CONFIG_COMPAT
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册