diff options
author | Patrick McHardy <kaber@trash.net> | 2007-07-08 01:35:21 -0400 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2007-07-11 01:18:01 -0400 |
commit | 31f15875c5ad98a13b528aaf19c839e22b43dc9a (patch) | |
tree | 3ede173710f42917ed228a2494af3b891a7ff4cf /net/netfilter/nf_conntrack_helper.c | |
parent | 5d08ad440feae11b8d6e7599147a8a20ac60f99a (diff) |
[NETFILTER]: nf_conntrack_helper/nf_conntrack_netlink: convert to expectation hash
Convert from the global expectation list to the hash table.
Signed-off-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/netfilter/nf_conntrack_helper.c')
-rw-r--r-- | net/netfilter/nf_conntrack_helper.c | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/net/netfilter/nf_conntrack_helper.c b/net/netfilter/nf_conntrack_helper.c index fdabf823f8c..cc8ae7404ac 100644 --- a/net/netfilter/nf_conntrack_helper.c +++ b/net/netfilter/nf_conntrack_helper.c | |||
@@ -114,22 +114,25 @@ EXPORT_SYMBOL_GPL(nf_conntrack_helper_register); | |||
114 | 114 | ||
115 | void nf_conntrack_helper_unregister(struct nf_conntrack_helper *me) | 115 | void nf_conntrack_helper_unregister(struct nf_conntrack_helper *me) |
116 | { | 116 | { |
117 | unsigned int i; | ||
118 | struct nf_conntrack_tuple_hash *h; | 117 | struct nf_conntrack_tuple_hash *h; |
119 | struct nf_conntrack_expect *exp, *tmp; | 118 | struct nf_conntrack_expect *exp; |
120 | struct hlist_node *n; | 119 | struct hlist_node *n, *next; |
120 | unsigned int i; | ||
121 | 121 | ||
122 | /* Need write lock here, to delete helper. */ | 122 | /* Need write lock here, to delete helper. */ |
123 | write_lock_bh(&nf_conntrack_lock); | 123 | write_lock_bh(&nf_conntrack_lock); |
124 | list_del(&me->list); | 124 | list_del(&me->list); |
125 | 125 | ||
126 | /* Get rid of expectations */ | 126 | /* Get rid of expectations */ |
127 | list_for_each_entry_safe(exp, tmp, &nf_ct_expect_list, list) { | 127 | for (i = 0; i < nf_ct_expect_hsize; i++) { |
128 | struct nf_conn_help *help = nfct_help(exp->master); | 128 | hlist_for_each_entry_safe(exp, n, next, |
129 | if ((help->helper == me || exp->helper == me) && | 129 | &nf_ct_expect_hash[i], hnode) { |
130 | del_timer(&exp->timeout)) { | 130 | struct nf_conn_help *help = nfct_help(exp->master); |
131 | nf_ct_unlink_expect(exp); | 131 | if ((help->helper == me || exp->helper == me) && |
132 | nf_ct_expect_put(exp); | 132 | del_timer(&exp->timeout)) { |
133 | nf_ct_unlink_expect(exp); | ||
134 | nf_ct_expect_put(exp); | ||
135 | } | ||
133 | } | 136 | } |
134 | } | 137 | } |
135 | 138 | ||