summaryrefslogtreecommitdiff
path: root/libbcache/keybuf_types.h
diff options
context:
space:
mode:
Diffstat (limited to 'libbcache/keybuf_types.h')
-rw-r--r--libbcache/keybuf_types.h33
1 files changed, 33 insertions, 0 deletions
diff --git a/libbcache/keybuf_types.h b/libbcache/keybuf_types.h
new file mode 100644
index 00000000..3facc4a0
--- /dev/null
+++ b/libbcache/keybuf_types.h
@@ -0,0 +1,33 @@
+#ifndef _BCACHE_KEYBUF_TYPES_H
+#define _BCACHE_KEYBUF_TYPES_H
+
+struct keybuf_key {
+ struct rb_node node;
+ BKEY_PADDED(key);
+ atomic_t ref;
+};
+
+#define KEYBUF_REFILL_BATCH 500
+
+struct keybuf {
+ struct bpos last_scanned;
+ spinlock_t lock;
+
+ /*
+ * Beginning and end of range in rb tree - so that we can skip taking
+ * lock and checking the rb tree when we need to check for overlapping
+ * keys.
+ */
+ struct bpos start;
+ struct bpos end;
+
+ struct rb_root keys;
+
+ unsigned max_in_flight;
+ struct semaphore in_flight;
+
+ DECLARE_ARRAY_ALLOCATOR(struct keybuf_key, freelist,
+ KEYBUF_REFILL_BATCH);
+};
+
+#endif /* _BCACHE_KEYBUF_TYPES_H */