]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
s3:locking: split out del_share_mode_open_id()
authorStefan Metzmacher <metze@samba.org>
Fri, 11 Oct 2019 15:42:18 +0000 (17:42 +0200)
committerJeremy Allison <jra@samba.org>
Fri, 9 Dec 2022 23:11:38 +0000 (23:11 +0000)
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Ralph Boehme <slow@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
source3/locking/share_mode_lock.c
source3/locking/share_mode_lock.h

index a30ab3921ee9fdb418e3e498cd655632968c4e31..909bfdfbccecbb88a54a5dfb052f7d596767d369 100644 (file)
@@ -2495,7 +2495,9 @@ static void del_share_mode_fn(
        state->ok = true;
 }
 
-bool del_share_mode(struct share_mode_lock *lck, files_struct *fsp)
+bool del_share_mode_open_id(struct share_mode_lock *lck,
+                           struct server_id open_pid,
+                           uint64_t open_file_id)
 {
        struct del_share_mode_state state = { .ok = false };
        struct share_mode_data *d = NULL;
@@ -2504,21 +2506,14 @@ bool del_share_mode(struct share_mode_lock *lck, files_struct *fsp)
 
        status = share_mode_lock_access_private_data(lck, &d);
        if (!NT_STATUS_IS_OK(status)) {
-               struct file_id id = share_mode_lock_file_id(lck);
-               struct file_id_buf id_buf;
                /* Any error recovery possible here ? */
-               DBG_ERR("share_mode_lock_access_private_data() failed for "
-                       "%s %s - %s\n",
-                       file_id_str_buf(id, &id_buf),
-                       fsp_str_dbg(fsp),
-                       nt_errstr(status));
                return false;
        }
 
        ok = share_mode_entry_do(
                d,
-               messaging_server_id(fsp->conn->sconn->msg_ctx),
-               fh_get_gen_id(fsp->fh),
+               open_pid,
+               open_file_id,
                del_share_mode_fn,
                &state);
        if (!ok) {
@@ -2532,6 +2527,25 @@ bool del_share_mode(struct share_mode_lock *lck, files_struct *fsp)
        return true;
 }
 
+bool del_share_mode(struct share_mode_lock *lck, files_struct *fsp)
+{
+       struct server_id pid =
+               messaging_server_id(fsp->conn->sconn->msg_ctx);
+       bool ok;
+
+       ok = del_share_mode_open_id(lck, pid, fh_get_gen_id(fsp->fh));
+       if (!ok) {
+               struct file_id id = share_mode_lock_file_id(lck);
+               struct file_id_buf id_buf;
+               DBG_ERR("share_mode_lock_access_private_data() failed for "
+                       "%s %s\n",
+                       file_id_str_buf(id, &id_buf),
+                       fsp_str_dbg(fsp));
+               return false;
+       }
+       return true;
+}
+
 struct remove_share_oplock_state {
        bool ok;
 };
index 0ce539229b544f68d39a6f5cc152be4517263832..eb74144a77d05160bb743fa35b70cc9a3be556f6 100644 (file)
@@ -37,6 +37,9 @@ struct file_id share_mode_lock_file_id(const struct share_mode_lock *lck);
 struct share_mode_lock *get_existing_share_mode_lock(TALLOC_CTX *mem_ctx,
                                                     struct file_id id);
 
+bool del_share_mode_open_id(struct share_mode_lock *lck,
+                           struct server_id open_pid,
+                           uint64_t open_file_id);
 bool del_share_mode(struct share_mode_lock *lck,
                    struct files_struct *fsp);
 bool downgrade_share_oplock(struct share_mode_lock *lck,