summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2018-01-25 18:37:26 -0500
committerKent Overstreet <kent.overstreet@gmail.com>2018-01-25 18:37:26 -0500
commit3f850c9ed413048cdc7913291322ce822d488d20 (patch)
tree31833c4f18b8da06a192de708918c49fe5fe8608
parent03603659dc82cf76c13c400b1d3a3eb8f814ed25 (diff)
bcachefs: provide an obj_cmpfn to rhashtable code
default is to use memcmp, which isn't getting inlined (due to kernel not using __builtin_memcpy?)
-rw-r--r--fs/bcachefs/btree_cache.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/fs/bcachefs/btree_cache.c b/fs/bcachefs/btree_cache.c
index 78e36299b7a6..a439760a1dfd 100644
--- a/fs/bcachefs/btree_cache.c
+++ b/fs/bcachefs/btree_cache.c
@@ -57,10 +57,20 @@ static void btree_node_data_free(struct bch_fs *c, struct btree *b)
list_move(&b->list, &bc->freed);
}
+static int bch2_btree_cache_cmp_fn(struct rhashtable_compare_arg *arg,
+ const void *obj)
+{
+ const struct btree *b = obj;
+ const u64 *v = arg->key;
+
+ return PTR_HASH(&b->key) == *v ? 0 : 1;
+}
+
static const struct rhashtable_params bch_btree_cache_params = {
.head_offset = offsetof(struct btree, hash),
.key_offset = offsetof(struct btree, key.v),
.key_len = sizeof(struct bch_extent_ptr),
+ .obj_cmpfn = bch2_btree_cache_cmp_fn,
};
static void btree_node_data_alloc(struct bch_fs *c, struct btree *b, gfp_t gfp)