]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
smbd: Avoid "share_mode_lock" dependency in rename_lease_fn()
authorVolker Lendecke <vl@samba.org>
Tue, 10 Sep 2019 19:12:23 +0000 (21:12 +0200)
committerJeremy Allison <jra@samba.org>
Tue, 17 Sep 2019 22:49:37 +0000 (22:49 +0000)
share_mode_forall_leases() will stop passing "lck" soon.

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

index f26f5821a5e9e1b4de965e33a89fc921d5c5eb3c..a8b05a40ea955abfbaf63e5371dedc36aedcec41 100644 (file)
@@ -469,11 +469,21 @@ struct share_mode_lock *get_existing_share_mode_lock(TALLOC_CTX *mem_ctx,
        return get_share_mode_lock(mem_ctx, id, NULL, NULL, NULL);
 }
 
+struct rename_share_filename_state {
+       struct share_mode_lock *lck;
+       struct messaging_context *msg_ctx;
+       struct server_id self;
+       uint32_t orig_name_hash;
+       uint32_t new_name_hash;
+       struct file_rename_message msg;
+};
+
 static bool rename_lease_fn(struct share_mode_lock *lck,
                            struct share_mode_entry *e,
                            void *private_data)
 {
-       struct share_mode_data *d = lck->data;
+       struct rename_share_filename_state *state = private_data;
+       struct share_mode_data *d = state->lck->data;
        NTSTATUS status;
 
        status = leases_db_rename(&e->client_guid,
@@ -502,14 +512,6 @@ static bool rename_lease_fn(struct share_mode_lock *lck,
  Based on an initial code idea from SATOH Fumiyasu <fumiya@samba.gr.jp>
 ********************************************************************/
 
-struct rename_share_filename_state {
-       struct messaging_context *msg_ctx;
-       struct server_id self;
-       uint32_t orig_name_hash;
-       uint32_t new_name_hash;
-       struct file_rename_message msg;
-};
-
 static bool rename_share_filename_fn(
        struct share_mode_entry *e,
        bool *modified,
@@ -570,6 +572,7 @@ bool rename_share_filename(struct messaging_context *msg_ctx,
                        const struct smb_filename *smb_fname_dst)
 {
        struct rename_share_filename_state state = {
+               .lck = lck,
                .msg_ctx = msg_ctx,
                .self = messaging_server_id(msg_ctx),
                .orig_name_hash = orig_name_hash,
@@ -611,7 +614,7 @@ bool rename_share_filename(struct messaging_context *msg_ctx,
                DBG_WARNING("share_mode_forall_entries failed\n");
        }
 
-       ok = share_mode_forall_leases(lck, rename_lease_fn, NULL);
+       ok = share_mode_forall_leases(lck, rename_lease_fn, &state);
        if (!ok) {
                /*
                 * Ignore error here. Not sure what to do..