diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2018-01-25 18:37:26 -0500 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@gmail.com> | 2018-01-25 18:37:26 -0500 |
commit | 3f850c9ed413048cdc7913291322ce822d488d20 (patch) | |
tree | 31833c4f18b8da06a192de708918c49fe5fe8608 | |
parent | 03603659dc82cf76c13c400b1d3a3eb8f814ed25 (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.c | 10 |
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) |