|
@@ -38,6 +38,7 @@ EXPORT_SYMBOL_GPL(nf_ct_expect_hsize);
|
|
|
unsigned int nf_ct_expect_max __read_mostly;
|
|
|
|
|
|
static struct kmem_cache *nf_ct_expect_cachep __read_mostly;
|
|
|
+static unsigned int nf_ct_expect_hashrnd __read_mostly;
|
|
|
|
|
|
/* nf_conntrack_expect helper functions */
|
|
|
void nf_ct_unlink_expect_report(struct nf_conntrack_expect *exp,
|
|
@@ -76,13 +77,11 @@ static unsigned int nf_ct_expect_dst_hash(const struct nf_conntrack_tuple *tuple
|
|
|
{
|
|
|
unsigned int hash;
|
|
|
|
|
|
- if (unlikely(!nf_conntrack_hash_rnd)) {
|
|
|
- init_nf_conntrack_hash_rnd();
|
|
|
- }
|
|
|
+ get_random_once(&nf_ct_expect_hashrnd, sizeof(nf_ct_expect_hashrnd));
|
|
|
|
|
|
hash = jhash2(tuple->dst.u3.all, ARRAY_SIZE(tuple->dst.u3.all),
|
|
|
(((tuple->dst.protonum ^ tuple->src.l3num) << 16) |
|
|
|
- (__force __u16)tuple->dst.u.all) ^ nf_conntrack_hash_rnd);
|
|
|
+ (__force __u16)tuple->dst.u.all) ^ nf_ct_expect_hashrnd);
|
|
|
|
|
|
return reciprocal_scale(hash, nf_ct_expect_hsize);
|
|
|
}
|