vfs_aio_pthread: use SMB_VFS_NEXT_OPENAT() in aio_pthread_openat_fn()
authorMikeLiu <mikeliu@qnap.com>
Tue, 22 Aug 2023 02:01:14 +0000 (10:01 +0800)
committerJule Anger <janger@samba.org>
Mon, 4 Sep 2023 09:35:04 +0000 (09:35 +0000)
1. Set 'aio_allow_open' to false if fsp->fsp_flags.is_pathref
2. Move !(how->flags & O_CREAT) and !(how->flags & O_EXCL) up and set 'aio_allow_open' to false
3. Use SMB_VFS_NEXT_OPENAT() instead of openat() for disable async opens case.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=15453

Signed-off-by: MikeLiu <mikeliu@qnap.com>
Reviewed-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
Autobuild-User(master): Jeremy Allison <jra@samba.org>
Autobuild-Date(master): Tue Aug 22 17:44:00 UTC 2023 on atb-devel-224

Autobuild-User(v4-17-test): Jule Anger <janger@samba.org>
Autobuild-Date(v4-17-test): Mon Sep  4 09:35:04 UTC 2023 on sn-devel-184

source3/modules/vfs_aio_pthread.c

index 0303ff04bc9d4fe5a5358c7357433a14a21d31e0..b099a6b5b52593c5c0c2b610724a62093dbe452e 100644 (file)
@@ -483,28 +483,28 @@ static int aio_pthread_openat_fn(vfs_handle_struct *handle,
                aio_allow_open = false;
        }
 
-       if (!aio_allow_open) {
-               /* aio opens turned off. */
-               return openat(fsp_get_pathref_fd(dirfsp),
-                             smb_fname->base_name,
-                             how->flags,
-                             how->mode);
+       if (fsp->fsp_flags.is_pathref) {
+               /* Use SMB_VFS_NEXT_OPENAT() to call openat() with O_PATH. */
+               aio_allow_open = false;
        }
 
        if (!(how->flags & O_CREAT)) {
                /* Only creates matter. */
-               return openat(fsp_get_pathref_fd(dirfsp),
-                             smb_fname->base_name,
-                             how->flags,
-                             how->mode);
+               aio_allow_open = false;
        }
 
        if (!(how->flags & O_EXCL)) {
                /* Only creates with O_EXCL matter. */
-               return openat(fsp_get_pathref_fd(dirfsp),
-                             smb_fname->base_name,
-                             how->flags,
-                             how->mode);
+               aio_allow_open = false;
+       }
+
+       if (!aio_allow_open) {
+               /* aio opens turned off. */
+               return SMB_VFS_NEXT_OPENAT(handle,
+                             dirfsp,
+                             smb_fname,
+                             fsp,
+                             how);
        }
 
        /*