summaryrefslogtreecommitdiffstats
path: root/fs/bcachefs/buckets_waiting_for_journal_types.h
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2022-01-04 22:32:09 -0500
committerKent Overstreet <kent.overstreet@linux.dev>2023-10-22 17:09:22 -0400
commit21aec962dfec2df11694350e5b2d3a9a9c298e7d (patch)
treed30158f7891454d5789228e2d1c7e615d5e78cce /fs/bcachefs/buckets_waiting_for_journal_types.h
parentf443fa66c98f012412b677afc4f7096ed24108de (diff)
downloadlinux-21aec962dfec2df11694350e5b2d3a9a9c298e7d.tar.gz
linux-21aec962dfec2df11694350e5b2d3a9a9c298e7d.tar.bz2
linux-21aec962dfec2df11694350e5b2d3a9a9c298e7d.zip
bcachefs: New data structure for buckets waiting on journal commit
Implement a hash table, using cuckoo hashing, for empty buckets that are waiting on a journal commit before they can be reused. This replaces the journal_seq field of bucket_mark, and is part of eventually getting rid of the in memory bucket array. We may need to make bch2_bucket_needs_journal_commit() lockless, pending profiling and testing. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
Diffstat (limited to 'fs/bcachefs/buckets_waiting_for_journal_types.h')
-rw-r--r--fs/bcachefs/buckets_waiting_for_journal_types.h23
1 files changed, 23 insertions, 0 deletions
diff --git a/fs/bcachefs/buckets_waiting_for_journal_types.h b/fs/bcachefs/buckets_waiting_for_journal_types.h
new file mode 100644
index 000000000000..e593db061d81
--- /dev/null
+++ b/fs/bcachefs/buckets_waiting_for_journal_types.h
@@ -0,0 +1,23 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef _BUCKETS_WAITING_FOR_JOURNAL_TYPES_H
+#define _BUCKETS_WAITING_FOR_JOURNAL_TYPES_H
+
+#include <linux/siphash.h>
+
+struct bucket_hashed {
+ u64 dev_bucket;
+ u64 journal_seq;
+};
+
+struct buckets_waiting_for_journal_table {
+ unsigned bits;
+ u64 hash_seeds[3];
+ struct bucket_hashed d[];
+};
+
+struct buckets_waiting_for_journal {
+ struct mutex lock;
+ struct buckets_waiting_for_journal_table *t;
+};
+
+#endif /* _BUCKETS_WAITING_FOR_JOURNAL_TYPES_H */