]> git.ozlabs.org Git - ccan/blobdiff - ccan/tdb2/private.h
tdb2: trivial optimization for free list
[ccan] / ccan / tdb2 / private.h
index a10d1070d29c3d5f84f09107d032fbb0cf0dac1b..1a81286d5e36280a0fe9329474921ab6c480c9ff 100644 (file)
@@ -92,8 +92,8 @@ typedef uint64_t tdb_off_t;
 /* And 8 entries in each group, ie 8 groups per sublevel. */
 #define TDB_HASH_GROUP_BITS 3
 
-/* Extend file by least 32 times larger than needed. */
-#define TDB_EXTENSION_FACTOR 32
+/* Extend file by least 100 times larger than needed. */
+#define TDB_EXTENSION_FACTOR 100
 
 /* We steal bits from the offsets to store hash info. */
 #define TDB_OFF_HASH_GROUP_MASK ((1ULL << TDB_HASH_GROUP_BITS) - 1)
@@ -331,6 +331,8 @@ struct tdb_context {
        uint64_t num_lockrecs;
        struct tdb_lock_type *lockrecs;
 
+       struct tdb_attribute_stats *stats;
+
        /* Single list of all TDBs, to avoid multiple opens. */
        struct tdb_context *next;
        dev_t device;   
@@ -466,6 +468,13 @@ int tdb_write_convert(struct tdb_context *tdb, tdb_off_t off,
 int tdb_read_convert(struct tdb_context *tdb, tdb_off_t off,
                     void *rec, size_t len);
 
+/* Adds a stat, if it's in range. */
+void add_stat_(struct tdb_context *tdb, uint64_t *stat, size_t val);
+#define add_stat(tdb, statname, val)                                   \
+       do {                                                            \
+               if (unlikely((tdb)->stats))                             \
+                       add_stat_((tdb), &(tdb)->stats->statname, (val)); \
+       } while (0)
 
 /* lock.c: */
 void tdb_lock_init(struct tdb_context *tdb);