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-30 20:41:32 -0500 |
commit | e56cb043ca86008902eee5110e4fce86a66a10cb (patch) | |
tree | 9fd7a54b9de1b695827422c4a892d4d7b56916f9 | |
parent | d6f39b55f575b9ec135e1aba09f489b55b5cf7f7 (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) |