mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-28 22:54:05 +08:00
rhashtable: provide len to obj_hashfn
nftables sets will be converted to use so called setextensions, moving the key to a non-fixed position. To hash it, the obj_hashfn must be used, however it so far doesn't receive the length parameter. Pass the key length to obj_hashfn() and convert existing users. Signed-off-by: Patrick McHardy <kaber@trash.net> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
This commit is contained in:
parent
14d14a5d29
commit
49f7b33e63
@ -88,7 +88,7 @@ struct rhashtable_compare_arg {
|
|||||||
};
|
};
|
||||||
|
|
||||||
typedef u32 (*rht_hashfn_t)(const void *data, u32 len, u32 seed);
|
typedef u32 (*rht_hashfn_t)(const void *data, u32 len, u32 seed);
|
||||||
typedef u32 (*rht_obj_hashfn_t)(const void *data, u32 seed);
|
typedef u32 (*rht_obj_hashfn_t)(const void *data, u32 len, u32 seed);
|
||||||
typedef int (*rht_obj_cmpfn_t)(struct rhashtable_compare_arg *arg,
|
typedef int (*rht_obj_cmpfn_t)(struct rhashtable_compare_arg *arg,
|
||||||
const void *obj);
|
const void *obj);
|
||||||
|
|
||||||
@ -242,7 +242,9 @@ static inline unsigned int rht_head_hashfn(
|
|||||||
const char *ptr = rht_obj(ht, he);
|
const char *ptr = rht_obj(ht, he);
|
||||||
|
|
||||||
return likely(params.obj_hashfn) ?
|
return likely(params.obj_hashfn) ?
|
||||||
rht_bucket_index(tbl, params.obj_hashfn(ptr, tbl->hash_rnd)) :
|
rht_bucket_index(tbl, params.obj_hashfn(ptr, params.key_len ?:
|
||||||
|
ht->p.key_len,
|
||||||
|
tbl->hash_rnd)) :
|
||||||
rht_key_hashfn(ht, tbl, ptr + params.key_offset, params);
|
rht_key_hashfn(ht, tbl, ptr + params.key_offset, params);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -691,7 +691,7 @@ static u32 rhashtable_jhash2(const void *key, u32 length, u32 seed)
|
|||||||
* struct rhash_head node;
|
* struct rhash_head node;
|
||||||
* };
|
* };
|
||||||
*
|
*
|
||||||
* u32 my_hash_fn(const void *data, u32 seed)
|
* u32 my_hash_fn(const void *data, u32 len, u32 seed)
|
||||||
* {
|
* {
|
||||||
* struct test_obj *obj = data;
|
* struct test_obj *obj = data;
|
||||||
*
|
*
|
||||||
|
@ -3127,7 +3127,7 @@ static struct pernet_operations __net_initdata netlink_net_ops = {
|
|||||||
.exit = netlink_net_exit,
|
.exit = netlink_net_exit,
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline u32 netlink_hash(const void *data, u32 seed)
|
static inline u32 netlink_hash(const void *data, u32 len, u32 seed)
|
||||||
{
|
{
|
||||||
const struct netlink_sock *nlk = data;
|
const struct netlink_sock *nlk = data;
|
||||||
struct netlink_compare_arg arg;
|
struct netlink_compare_arg arg;
|
||||||
|
Loading…
Reference in New Issue
Block a user