Skip to content

Commit

Permalink
statx: allow system call to be invoked from io_uring
Browse files Browse the repository at this point in the history
This is a prepatory patch to allow io_uring to invoke statx directly.

Signed-off-by: Bijan Mottahedeh <bijan.mottahedeh@oracle.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
  • Loading branch information
Bijan Mottahedeh authored and Jens Axboe committed May 26, 2020
1 parent 1d9e128 commit 0018784
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 13 deletions.
2 changes: 2 additions & 0 deletions fs/internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -188,3 +188,5 @@ int sb_init_dio_done_wq(struct super_block *sb);
*/
unsigned vfs_stat_set_lookup_flags(unsigned *lookup_flags, int flags);
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);
32 changes: 19 additions & 13 deletions fs/stat.c
Original file line number Diff line number Diff line change
Expand Up @@ -567,6 +567,24 @@ cp_statx(const struct kstat *stat, struct statx __user *buffer)
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
* @dfd: Base directory to pathwalk from *or* fd to stat.
Expand All @@ -583,19 +601,7 @@ SYSCALL_DEFINE5(statx,
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);
return do_statx(dfd, filename, flags, mask, buffer);
}

#ifdef CONFIG_COMPAT
Expand Down

0 comments on commit 0018784

Please sign in to comment.