]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
vfs: Slightly speed up stream_dir()
authorVolker Lendecke <vl@samba.org>
Mon, 9 Dec 2024 09:01:19 +0000 (10:01 +0100)
committerVolker Lendecke <vl@samba.org>
Wed, 18 Dec 2024 08:25:34 +0000 (08:25 +0000)
lp_parm_bool() is a relatively expensive string-based operation. Do it
only when needed.

Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
source3/modules/vfs_streams_depot.c

index 1c909512950f7bd2cde70e048320d7aaddaef211..408ff02e5596716c3fc35360b86180aad4fb4a5f 100644 (file)
@@ -160,7 +160,6 @@ static char *stream_dir(vfs_handle_struct *handle,
        uint8_t first, second;
        struct file_id id;
        uint8_t id_buf[16];
-       bool check_valid;
        char id_hex[sizeof(id_buf) * 2 + 1];
        char *rootdir = NULL;
        struct smb_filename *rootdir_fname = NULL;
@@ -168,9 +167,6 @@ static char *stream_dir(vfs_handle_struct *handle,
        struct vfs_rename_how rhow = { .flags = 0, };
        int ret;
 
-       check_valid = lp_parm_bool(SNUM(handle->conn),
-                     "streams_depot", "check_valid", true);
-
        rootdir = stream_rootdir(handle,
                                 talloc_tos());
        if (rootdir == NULL) {
@@ -247,13 +243,18 @@ static char *stream_dir(vfs_handle_struct *handle,
        if (SMB_VFS_NEXT_STAT(handle, smb_fname_hash) == 0) {
                struct smb_filename *smb_fname_new = NULL;
                char *newname;
-               bool delete_lost;
+               bool check_valid, delete_lost;
 
                if (!S_ISDIR(smb_fname_hash->st.st_ex_mode)) {
                        errno = EINVAL;
                        goto fail;
                }
 
+               check_valid = lp_parm_bool(SNUM(handle->conn),
+                                          "streams_depot",
+                                          "check_valid",
+                                          true);
+
                if (!check_valid ||
                    file_is_valid(handle, smb_fname)) {
                        return result;