]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
s3:locking: move fsp_update_share_mode_flags* related functions further down
authorStefan Metzmacher <metze@samba.org>
Mon, 22 Aug 2022 21:26:06 +0000 (23:26 +0200)
committerJeremy Allison <jra@samba.org>
Tue, 20 Sep 2022 00:34:35 +0000 (00:34 +0000)
It will soon need to use 'struct locking_tdb_data'

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

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
source3/locking/share_mode_lock.c

index 939afe430c8964409bd412dba0ea64c46111878d..9fc54b5c74f8f9cd34ddc750b93181ba49e416d6 100644 (file)
@@ -212,68 +212,6 @@ static enum ndr_err_code get_share_mode_blob_header(
        return NDR_ERR_SUCCESS;
 }
 
-struct fsp_update_share_mode_flags_state {
-       enum ndr_err_code ndr_err;
-       uint16_t share_mode_flags;
-};
-
-static void fsp_update_share_mode_flags_fn(
-       const uint8_t *buf,
-       size_t buflen,
-       bool *modified_dependent,
-       void *private_data)
-{
-       struct fsp_update_share_mode_flags_state *state = private_data;
-       uint64_t seq;
-
-       state->ndr_err = get_share_mode_blob_header(
-               buf, buflen, &seq, &state->share_mode_flags);
-}
-
-static NTSTATUS fsp_update_share_mode_flags(struct files_struct *fsp)
-{
-       struct fsp_update_share_mode_flags_state state = {0};
-       int seqnum = g_lock_seqnum(lock_ctx);
-       NTSTATUS status;
-
-       if (seqnum == fsp->share_mode_flags_seqnum) {
-               return NT_STATUS_OK;
-       }
-
-       status = share_mode_do_locked(
-               fsp->file_id, fsp_update_share_mode_flags_fn, &state);
-       if (!NT_STATUS_IS_OK(status)) {
-               /* no DBG_GET_SHARE_MODE_LOCK here! */
-               DBG_ERR("share_mode_do_locked returned %s\n",
-                       nt_errstr(status));
-               return status;
-       }
-
-       if (!NDR_ERR_CODE_IS_SUCCESS(state.ndr_err)) {
-               DBG_ERR("get_share_mode_blob_header returned %s\n",
-                       ndr_errstr(state.ndr_err));
-               return ndr_map_error2ntstatus(state.ndr_err);
-       }
-
-       fsp->share_mode_flags_seqnum = seqnum;
-       fsp->share_mode_flags = state.share_mode_flags;
-
-       return NT_STATUS_OK;
-}
-
-bool file_has_read_lease(struct files_struct *fsp)
-{
-       NTSTATUS status;
-
-       status = fsp_update_share_mode_flags(fsp);
-       if (!NT_STATUS_IS_OK(status)) {
-               /* Safe default for leases */
-               return true;
-       }
-
-       return (fsp->share_mode_flags & SHARE_MODE_LEASE_READ) != 0;
-}
-
 static int share_mode_data_nofree_destructor(struct share_mode_data *d)
 {
        return -1;
@@ -1171,6 +1109,68 @@ NTSTATUS share_mode_wakeup_waiters(struct file_id id)
        return share_mode_do_locked(id, share_mode_wakeup_waiters_fn, NULL);
 }
 
+struct fsp_update_share_mode_flags_state {
+       enum ndr_err_code ndr_err;
+       uint16_t share_mode_flags;
+};
+
+static void fsp_update_share_mode_flags_fn(
+       const uint8_t *buf,
+       size_t buflen,
+       bool *modified_dependent,
+       void *private_data)
+{
+       struct fsp_update_share_mode_flags_state *state = private_data;
+       uint64_t seq;
+
+       state->ndr_err = get_share_mode_blob_header(
+               buf, buflen, &seq, &state->share_mode_flags);
+}
+
+static NTSTATUS fsp_update_share_mode_flags(struct files_struct *fsp)
+{
+       struct fsp_update_share_mode_flags_state state = {0};
+       int seqnum = g_lock_seqnum(lock_ctx);
+       NTSTATUS status;
+
+       if (seqnum == fsp->share_mode_flags_seqnum) {
+               return NT_STATUS_OK;
+       }
+
+       status = share_mode_do_locked(
+               fsp->file_id, fsp_update_share_mode_flags_fn, &state);
+       if (!NT_STATUS_IS_OK(status)) {
+               /* no DBG_GET_SHARE_MODE_LOCK here! */
+               DBG_ERR("share_mode_do_locked returned %s\n",
+                       nt_errstr(status));
+               return status;
+       }
+
+       if (!NDR_ERR_CODE_IS_SUCCESS(state.ndr_err)) {
+               DBG_ERR("get_share_mode_blob_header returned %s\n",
+                       ndr_errstr(state.ndr_err));
+               return ndr_map_error2ntstatus(state.ndr_err);
+       }
+
+       fsp->share_mode_flags_seqnum = seqnum;
+       fsp->share_mode_flags = state.share_mode_flags;
+
+       return NT_STATUS_OK;
+}
+
+bool file_has_read_lease(struct files_struct *fsp)
+{
+       NTSTATUS status;
+
+       status = fsp_update_share_mode_flags(fsp);
+       if (!NT_STATUS_IS_OK(status)) {
+               /* Safe default for leases */
+               return true;
+       }
+
+       return (fsp->share_mode_flags & SHARE_MODE_LEASE_READ) != 0;
+}
+
 NTTIME share_mode_changed_write_time(struct share_mode_lock *lck)
 {
        return lck->data->changed_write_time;