]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
s3/brlock: add brl_get_locks_for_cleanup()
authorRalph Boehme <slow@samba.org>
Tue, 17 Sep 2019 18:43:08 +0000 (11:43 -0700)
committerRalph Boehme <slow@samba.org>
Fri, 17 Jul 2026 10:18:37 +0000 (10:18 +0000)
Takes the file_id to locate the brl record instead of an fsp. Prepares for being
called from the scavenger where we don't have fsps.

Signed-off-by: Ralph Boehme <slow@samba.org>
Reviewed-by: Anoop C S <anoopcs@samba.org>
source3/locking/brlock.c
source3/locking/proto.h

index 3d99941d4f36dccba7c3be4a6b1a06fd5572a3e2..f02689680812791a200c8315bbbb49205ee7b05a 100644 (file)
@@ -1727,7 +1727,8 @@ static bool brl_parse_data(struct byte_range_lock *br_lck, TDB_DATA data)
  TALLOC_FREE(brl) will release the lock in the destructor.
 ********************************************************************/
 
-struct byte_range_lock *brl_get_locks(TALLOC_CTX *mem_ctx, files_struct *fsp)
+static struct byte_range_lock *brl_get_locks_internal(TALLOC_CTX *mem_ctx,
+                                                     struct file_id *file_id)
 {
        TDB_DATA key, data;
        struct byte_range_lock *br_lck;
@@ -1737,9 +1738,7 @@ struct byte_range_lock *brl_get_locks(TALLOC_CTX *mem_ctx, files_struct *fsp)
                return NULL;
        }
 
-       br_lck->fsp = fsp;
-
-       key.dptr = (uint8_t *)&fsp->file_id;
+       key.dptr = (uint8_t *)file_id;
        key.dsize = sizeof(struct file_id);
 
        br_lck->record = dbwrap_fetch_locked(brlock_db, br_lck, key);
@@ -1765,7 +1764,7 @@ struct byte_range_lock *brl_get_locks(TALLOC_CTX *mem_ctx, files_struct *fsp)
                struct lock_struct *locks = br_lck->lock_data;
                DBG_DEBUG("%u current locks on file_id %s\n",
                          br_lck->num_locks,
-                         file_id_str_buf(fsp->file_id, &buf));
+                         file_id_str_buf(*file_id, &buf));
                for( i = 0; i < br_lck->num_locks; i++) {
                        print_lock_struct(i, &locks[i]);
                }
@@ -1774,6 +1773,25 @@ struct byte_range_lock *brl_get_locks(TALLOC_CTX *mem_ctx, files_struct *fsp)
        return br_lck;
 }
 
+struct byte_range_lock *brl_get_locks(TALLOC_CTX *mem_ctx,
+                                     files_struct *fsp)
+{
+       struct byte_range_lock *brl = NULL;
+
+       brl = brl_get_locks_internal(mem_ctx, &fsp->file_id);
+       if (brl == NULL) {
+               return NULL;
+       }
+       brl->fsp = fsp;
+       return brl;
+}
+
+struct byte_range_lock *brl_get_locks_for_cleanup(TALLOC_CTX *mem_ctx,
+                                                 struct file_id *file_id)
+{
+       return brl_get_locks_internal(mem_ctx, file_id);
+}
+
 struct brl_get_locks_readonly_state {
        TALLOC_CTX *mem_ctx;
        struct byte_range_lock **br_lock;
index 0cb19a25a56434873d9c7cbdac0bd34de40d7c65..8c151a42090b77bd881551b1d3f4a3c1f22a0f20 100644 (file)
@@ -103,6 +103,8 @@ NTSTATUS share_mode_do_locked_brl(files_struct *fsp,
                 void *private_data);
 struct byte_range_lock *brl_get_locks(TALLOC_CTX *mem_ctx,
                                        files_struct *fsp);
+struct byte_range_lock *brl_get_locks_for_cleanup(TALLOC_CTX *mem_ctx,
+                                                 struct file_id *file_id);
 struct byte_range_lock *brl_get_locks_readonly(files_struct *fsp);
 bool brl_cleanup_disconnected(struct file_id fid, uint64_t open_persistent_id);
 void brl_set_modified(struct byte_range_lock *br_lck, bool modified);