]> git.ozlabs.org Git - ccan/blobdiff - ccan/tdb2/private.h
tdb2: make tdb1 use same low-level lock functions.
[ccan] / ccan / tdb2 / private.h
index 3904442574a34b66d58bac1871e8d860ad18f2aa..fdd505357433fadf607c98d96f385530b509ba6f 100644 (file)
@@ -298,9 +298,6 @@ struct tdb_access_hdr {
 };
 
 struct tdb_file {
-       /* Single list of all TDBs, to detect multiple opens. */
-       struct tdb_file *next;
-
        /* How many are sharing us? */
        unsigned int refcnt;
 
@@ -325,21 +322,12 @@ struct tdb_file {
 };
 
 struct tdb_context {
+       /* Single list of all TDBs, to detect multiple opens. */
+       struct tdb_context *next;
+
        /* Filename of the database. */
        const char *name;
 
-       /* Are we accessing directly? (debugging check). */
-       int direct_access;
-
-       /* Operating read-only? (Opened O_RDONLY, or in traverse_read) */
-       bool read_only;
-
-       /* Open flags passed to tdb_open. */
-       int open_flags;
-
-       /* the flags passed to tdb_open, for tdb_reopen. */
-       uint32_t flags;
-
        /* Logging function */
        void (*log_fn)(struct tdb_context *tdb,
                       enum tdb_log_level level,
@@ -348,16 +336,34 @@ struct tdb_context {
                       void *data);
        void *log_data;
 
-       /* Hash function. */
-       uint64_t (*hash_fn)(const void *key, size_t len, uint64_t seed, void *);
-       void *hash_data;
-       uint64_t hash_seed;
+       /* Last error we returned. */
+       enum TDB_ERROR last_error;
+
+       /* The actual file information */
+       struct tdb_file *file;
+
+       /* Open flags passed to tdb_open. */
+       int open_flags;
 
        /* low level (fnctl) lock functions. */
        int (*lock_fn)(int fd, int rw, off_t off, off_t len, bool w, void *);
        int (*unlock_fn)(int fd, int rw, off_t off, off_t len, void *);
        void *lock_data;
 
+       /* the flags passed to tdb_open. */
+       uint32_t flags;
+
+       /* Our statistics. */
+       struct tdb_attribute_stats stats;
+
+       /* Are we accessing directly? (debugging check). */
+       int direct_access;
+
+       /* Hash function. */
+       uint64_t (*hash_fn)(const void *key, size_t len, uint64_t seed, void *);
+       void *hash_data;
+       uint64_t hash_seed;
+
        /* Set if we are in a transaction. */
        struct tdb_transaction *transaction;
        
@@ -365,20 +371,16 @@ struct tdb_context {
        tdb_off_t ftable_off;
        unsigned int ftable;
 
+       /* Our open hook, if any. */
+       enum TDB_ERROR (*openhook)(int fd, void *data);
+       void *openhook_data;
+
        /* IO methods: changes for transactions. */
        const struct tdb_methods *methods;
 
-       /* Our statistics. */
-       struct tdb_attribute_stats stats;
-
        /* Direct access information */
        struct tdb_access_hdr *access;
 
-       /* Last error we returned. */
-       enum TDB_ERROR last_error;
-
-       /* The actual file information */
-       struct tdb_file *file;
 };
 
 struct tdb_methods {
@@ -543,7 +545,7 @@ bool tdb_has_hash_locks(struct tdb_context *tdb);
 enum TDB_ERROR tdb_allrecord_lock(struct tdb_context *tdb, int ltype,
                                  enum tdb_lock_flags flags, bool upgradable);
 void tdb_allrecord_unlock(struct tdb_context *tdb, int ltype);
-enum TDB_ERROR tdb_allrecord_upgrade(struct tdb_context *tdb);
+enum TDB_ERROR tdb_allrecord_upgrade(struct tdb_context *tdb, off_t start);
 
 /* Serialize db open. */
 enum TDB_ERROR tdb_lock_open(struct tdb_context *tdb,
@@ -559,6 +561,25 @@ bool tdb_has_expansion_lock(struct tdb_context *tdb);
 /* If it needs recovery, grab all the locks and do it. */
 enum TDB_ERROR tdb_lock_and_recover(struct tdb_context *tdb);
 
+/* Byte-range lock wrappers for TDB1 to access. */
+enum TDB_ERROR tdb_brlock(struct tdb_context *tdb,
+                         int rw_type, tdb_off_t offset, tdb_off_t len,
+                         enum tdb_lock_flags flags);
+
+enum TDB_ERROR tdb_brunlock(struct tdb_context *tdb,
+                           int rw_type, tdb_off_t offset, size_t len);
+
+enum TDB_ERROR tdb_nest_lock(struct tdb_context *tdb,
+                            tdb_off_t offset, int ltype,
+                            enum tdb_lock_flags flags);
+
+enum TDB_ERROR tdb_nest_unlock(struct tdb_context *tdb,
+                              tdb_off_t off, int ltype);
+
+enum TDB_ERROR tdb_lock_gradual(struct tdb_context *tdb,
+                               int ltype, enum tdb_lock_flags flags,
+                               tdb_off_t off, tdb_off_t len);
+
 /* Default lock and unlock functions. */
 int tdb_fcntl_lock(int fd, int rw, off_t off, off_t len, bool waitflag, void *);
 int tdb_fcntl_unlock(int fd, int rw, off_t off, off_t len, void *);