smbd: Simplify fsp_lease_update()
authorVolker Lendecke <vl@samba.org>
Fri, 24 May 2019 13:58:09 +0000 (15:58 +0200)
committerJeremy Allison <jra@samba.org>
Tue, 28 May 2019 20:27:15 +0000 (20:27 +0000)
We don't need a share mode lock from a data dependency point of view
anymore, the leases data moved to leases.tdb. However, from a
coherency point of view it's probably wise to do this under a share
mode lock.

Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
source3/smbd/open.c
source3/smbd/oplock.c
source3/smbd/proto.h

index 8e9de5e11b44ff24649268f65403337e2ba3be66..dc8003c6dd6de6b3e15e918983a25a7c23256fdf 100644 (file)
@@ -2108,7 +2108,7 @@ static NTSTATUS try_lease_upgrade(struct files_struct *fsp,
                }
        }
 
-       fsp_lease_update(lck, fsp_client_guid(fsp), fsp->lease);
+       fsp_lease_update(fsp);
 
        return NT_STATUS_OK;
 }
index 1c7a4c8d29de90b9a90aa773a4db4a6e3fe8fb6c..ba5db38daef5081d0de385aae2b2b1e22b6c8dfd 100644 (file)
@@ -391,7 +391,7 @@ static void lease_timeout_handler(struct tevent_context *ctx,
                return;
        }
 
-       fsp_lease_update(lck, fsp_client_guid(fsp), fsp->lease);
+       fsp_lease_update(fsp);
 
        if (lease->lease.lease_epoch != old_epoch) {
                /*
@@ -426,18 +426,18 @@ static void lease_timeout_handler(struct tevent_context *ctx,
        TALLOC_FREE(lck);
 }
 
-bool fsp_lease_update(struct share_mode_lock *lck,
-                     const struct GUID *client_guid,
-                     struct fsp_lease *lease)
+bool fsp_lease_update(struct files_struct *fsp)
 {
+       const struct GUID *client_guid = fsp_client_guid(fsp);
+       struct fsp_lease *lease = fsp->lease;
        uint32_t current_state;
        bool breaking;
        uint16_t lease_version, epoch;
        NTSTATUS status;
 
        status = leases_db_get(client_guid,
-                              &lease->lease.lease_key,
-                              &lck->data->id,
+                              &fsp->lease->lease.lease_key,
+                              &fsp->file_id,
                               &current_state,
                               &breaking,
                               NULL, /* breaking_to_requested */
@@ -545,7 +545,7 @@ static struct files_struct *downgrade_lease_fsps(struct files_struct *fsp,
                return NULL;
        }
 
-       fsp_lease_update(state->lck, fsp_client_guid(fsp), fsp->lease);
+       fsp_lease_update(fsp);
 
        return NULL;
 }
@@ -1110,7 +1110,7 @@ static void process_oplock_break_message(struct messaging_context *msg_ctx,
                }
 
                /* Ensure we're in sync with current lease state. */
-               fsp_lease_update(lck, fsp_client_guid(fsp), fsp->lease);
+               fsp_lease_update(fsp);
 
                TALLOC_FREE(lck);
        }
index 7d4f7757ec3645b6213a3d2bb3e20e81d336f004..7b2a752d2fdc2a7e453e19b7a644690a6f08851a 100644 (file)
@@ -733,9 +733,7 @@ NTSTATUS set_file_oplock(files_struct *fsp);
 bool remove_oplock_under_lock(files_struct *fsp, struct share_mode_lock *lck);
 bool remove_oplock(files_struct *fsp);
 bool downgrade_oplock(files_struct *fsp);
-bool fsp_lease_update(struct share_mode_lock *lck,
-                     const struct GUID *client_guid,
-                     struct fsp_lease *lease);
+bool fsp_lease_update(struct files_struct *fsp);
 NTSTATUS downgrade_lease(struct smbXsrv_connection *xconn,
                        uint32_t num_file_ids,
                        const struct file_id *ids,