OSDN Git Service

statx: allow system call to be invoked from io_uring
authorBijan Mottahedeh <bijan.mottahedeh@oracle.com>
Sat, 23 May 2020 04:31:17 +0000 (21:31 -0700)
committerJens Axboe <axboe@kernel.dk>
Tue, 26 May 2020 22:48:06 +0000 (16:48 -0600)
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>
fs/internal.h
fs/stat.c

index aa5d455..88a9793 100644 (file)
@@ -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);
index 0300087..65cf51f 100644 (file)
--- a/fs/stat.c
+++ b/fs/stat.c
@@ -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.
@@ -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