Commit ac565e5f authored by Patrick McHardy's avatar Patrick McHardy Committed by David S. Miller

[NETFILTER]: nf_conntrack: export hash allocation/destruction functions

Signed-off-by: default avatarPatrick McHardy <kaber@trash.net>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 330f7db5
...@@ -172,6 +172,10 @@ static inline void nf_ct_put(struct nf_conn *ct) ...@@ -172,6 +172,10 @@ static inline void nf_ct_put(struct nf_conn *ct)
extern int nf_ct_l3proto_try_module_get(unsigned short l3proto); extern int nf_ct_l3proto_try_module_get(unsigned short l3proto);
extern void nf_ct_l3proto_module_put(unsigned short l3proto); extern void nf_ct_l3proto_module_put(unsigned short l3proto);
extern struct hlist_head *nf_ct_alloc_hashtable(int *sizep, int *vmalloced);
extern void nf_ct_free_hashtable(struct hlist_head *hash, int vmalloced,
int size);
extern struct nf_conntrack_tuple_hash * extern struct nf_conntrack_tuple_hash *
__nf_conntrack_find(const struct nf_conntrack_tuple *tuple, __nf_conntrack_find(const struct nf_conntrack_tuple *tuple,
const struct nf_conn *ignored_conntrack); const struct nf_conn *ignored_conntrack);
......
...@@ -920,8 +920,7 @@ static int kill_all(struct nf_conn *i, void *data) ...@@ -920,8 +920,7 @@ static int kill_all(struct nf_conn *i, void *data)
return 1; return 1;
} }
static void free_conntrack_hash(struct hlist_head *hash, int vmalloced, void nf_ct_free_hashtable(struct hlist_head *hash, int vmalloced, int size)
int size)
{ {
if (vmalloced) if (vmalloced)
vfree(hash); vfree(hash);
...@@ -929,6 +928,7 @@ static void free_conntrack_hash(struct hlist_head *hash, int vmalloced, ...@@ -929,6 +928,7 @@ static void free_conntrack_hash(struct hlist_head *hash, int vmalloced,
free_pages((unsigned long)hash, free_pages((unsigned long)hash,
get_order(sizeof(struct hlist_head) * size)); get_order(sizeof(struct hlist_head) * size));
} }
EXPORT_SYMBOL_GPL(nf_ct_free_hashtable);
void nf_conntrack_flush(void) void nf_conntrack_flush(void)
{ {
...@@ -962,14 +962,14 @@ void nf_conntrack_cleanup(void) ...@@ -962,14 +962,14 @@ void nf_conntrack_cleanup(void)
kmem_cache_destroy(nf_conntrack_cachep); kmem_cache_destroy(nf_conntrack_cachep);
kmem_cache_destroy(nf_conntrack_expect_cachep); kmem_cache_destroy(nf_conntrack_expect_cachep);
free_conntrack_hash(nf_conntrack_hash, nf_conntrack_vmalloc, nf_ct_free_hashtable(nf_conntrack_hash, nf_conntrack_vmalloc,
nf_conntrack_htable_size); nf_conntrack_htable_size);
nf_conntrack_proto_fini(); nf_conntrack_proto_fini();
nf_conntrack_helper_fini(); nf_conntrack_helper_fini();
} }
static struct hlist_head *alloc_hashtable(int *sizep, int *vmalloced) struct hlist_head *nf_ct_alloc_hashtable(int *sizep, int *vmalloced)
{ {
struct hlist_head *hash; struct hlist_head *hash;
unsigned int size, i; unsigned int size, i;
...@@ -992,6 +992,7 @@ static struct hlist_head *alloc_hashtable(int *sizep, int *vmalloced) ...@@ -992,6 +992,7 @@ static struct hlist_head *alloc_hashtable(int *sizep, int *vmalloced)
return hash; return hash;
} }
EXPORT_SYMBOL_GPL(nf_ct_alloc_hashtable);
int set_hashsize(const char *val, struct kernel_param *kp) int set_hashsize(const char *val, struct kernel_param *kp)
{ {
...@@ -1009,7 +1010,7 @@ int set_hashsize(const char *val, struct kernel_param *kp) ...@@ -1009,7 +1010,7 @@ int set_hashsize(const char *val, struct kernel_param *kp)
if (!hashsize) if (!hashsize)
return -EINVAL; return -EINVAL;
hash = alloc_hashtable(&hashsize, &vmalloced); hash = nf_ct_alloc_hashtable(&hashsize, &vmalloced);
if (!hash) if (!hash)
return -ENOMEM; return -ENOMEM;
...@@ -1037,7 +1038,7 @@ int set_hashsize(const char *val, struct kernel_param *kp) ...@@ -1037,7 +1038,7 @@ int set_hashsize(const char *val, struct kernel_param *kp)
nf_conntrack_hash_rnd = rnd; nf_conntrack_hash_rnd = rnd;
write_unlock_bh(&nf_conntrack_lock); write_unlock_bh(&nf_conntrack_lock);
free_conntrack_hash(old_hash, old_vmalloced, old_size); nf_ct_free_hashtable(old_hash, old_vmalloced, old_size);
return 0; return 0;
} }
...@@ -1066,8 +1067,8 @@ int __init nf_conntrack_init(void) ...@@ -1066,8 +1067,8 @@ int __init nf_conntrack_init(void)
* entries. */ * entries. */
max_factor = 4; max_factor = 4;
} }
nf_conntrack_hash = alloc_hashtable(&nf_conntrack_htable_size, nf_conntrack_hash = nf_ct_alloc_hashtable(&nf_conntrack_htable_size,
&nf_conntrack_vmalloc); &nf_conntrack_vmalloc);
if (!nf_conntrack_hash) { if (!nf_conntrack_hash) {
printk(KERN_ERR "Unable to create nf_conntrack_hash\n"); printk(KERN_ERR "Unable to create nf_conntrack_hash\n");
goto err_out; goto err_out;
...@@ -1122,8 +1123,8 @@ int __init nf_conntrack_init(void) ...@@ -1122,8 +1123,8 @@ int __init nf_conntrack_init(void)
err_free_conntrack_slab: err_free_conntrack_slab:
kmem_cache_destroy(nf_conntrack_cachep); kmem_cache_destroy(nf_conntrack_cachep);
err_free_hash: err_free_hash:
free_conntrack_hash(nf_conntrack_hash, nf_conntrack_vmalloc, nf_ct_free_hashtable(nf_conntrack_hash, nf_conntrack_vmalloc,
nf_conntrack_htable_size); nf_conntrack_htable_size);
err_out: err_out:
return -ENOMEM; return -ENOMEM;
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment