struct tbl {
struct rcu_head rcu;
unsigned int n_buckets;
- struct tbl_bucket ***buckets;
+ struct tbl_bucket __rcu ***buckets;
unsigned int count;
void (*obj_destructor)(struct tbl_node *);
};
#define TBL_L1_SIZE (1 << TBL_L1_BITS)
#define TBL_L1_SHIFT TBL_L2_BITS
+/* For 4 kB pages, this is 1,024 on 32-bit or 512 on 64-bit. */
+#define TBL_MIN_BUCKETS TBL_L2_SIZE
+
/* For 4 kB pages, this is 1,048,576 on 32-bit or 262,144 on 64-bit. */
#define TBL_MAX_BUCKETS (TBL_L1_SIZE * TBL_L2_SIZE)
struct tbl *tbl_create(unsigned int n_buckets);
void tbl_destroy(struct tbl *, void (*destructor)(struct tbl_node *));
-struct tbl_node *tbl_lookup(struct tbl *, void *target, u32 hash,
- int (*cmp)(const struct tbl_node *, void *target));
+struct tbl_node *tbl_lookup(struct tbl *, void *target, int len, u32 hash,
+ int (*cmp)(const struct tbl_node *, void *target, int len));
int tbl_insert(struct tbl *, struct tbl_node *, u32 hash);
int tbl_remove(struct tbl *, struct tbl_node *);
unsigned int tbl_count(struct tbl *);
int tbl_foreach(struct tbl *,
int (*callback)(struct tbl_node *, void *aux), void *aux);
+struct tbl_node *tbl_next(struct tbl *, u32 *bucketp, u32 *objp);
int tbl_n_buckets(struct tbl *);
struct tbl *tbl_expand(struct tbl *);