diff options
author | Pavel Emelyanov <xemul@openvz.org> | 2007-10-15 05:37:18 -0400 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2007-10-15 15:26:41 -0400 |
commit | 277e650ddfc6944ef5f5466fd898b8da7f06cd82 (patch) | |
tree | 39afdd22384c402e08287a3911455a2bbce721b1 /net/ipv6 | |
parent | 04128f233f2b344f3438cde09723e9946463a573 (diff) |
[INET]: Consolidate the xxx_frag_kill
Since now all the xxx_frag_kill functions now work
with the generic inet_frag_queue data type, this can
be moved into a common place.
The xxx_unlink() code is moved as well.
Signed-off-by: Pavel Emelyanov <xemul@openvz.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv6')
-rw-r--r-- | net/ipv6/netfilter/nf_conntrack_reasm.c | 23 | ||||
-rw-r--r-- | net/ipv6/reassembly.c | 23 |
2 files changed, 2 insertions, 44 deletions
diff --git a/net/ipv6/netfilter/nf_conntrack_reasm.c b/net/ipv6/netfilter/nf_conntrack_reasm.c index 966a88848406..2ebe515d914e 100644 --- a/net/ipv6/netfilter/nf_conntrack_reasm.c +++ b/net/ipv6/netfilter/nf_conntrack_reasm.c | |||
@@ -79,20 +79,6 @@ struct inet_frags_ctl nf_frags_ctl __read_mostly = { | |||
79 | 79 | ||
80 | static struct inet_frags nf_frags; | 80 | static struct inet_frags nf_frags; |
81 | 81 | ||
82 | static __inline__ void __fq_unlink(struct nf_ct_frag6_queue *fq) | ||
83 | { | ||
84 | hlist_del(&fq->q.list); | ||
85 | list_del(&fq->q.lru_list); | ||
86 | nf_frags.nqueues--; | ||
87 | } | ||
88 | |||
89 | static __inline__ void fq_unlink(struct nf_ct_frag6_queue *fq) | ||
90 | { | ||
91 | write_lock(&nf_frags.lock); | ||
92 | __fq_unlink(fq); | ||
93 | write_unlock(&nf_frags.lock); | ||
94 | } | ||
95 | |||
96 | static unsigned int ip6qhashfn(__be32 id, struct in6_addr *saddr, | 82 | static unsigned int ip6qhashfn(__be32 id, struct in6_addr *saddr, |
97 | struct in6_addr *daddr) | 83 | struct in6_addr *daddr) |
98 | { | 84 | { |
@@ -213,14 +199,7 @@ static __inline__ void fq_put(struct nf_ct_frag6_queue *fq, unsigned int *work) | |||
213 | */ | 199 | */ |
214 | static __inline__ void fq_kill(struct nf_ct_frag6_queue *fq) | 200 | static __inline__ void fq_kill(struct nf_ct_frag6_queue *fq) |
215 | { | 201 | { |
216 | if (del_timer(&fq->q.timer)) | 202 | inet_frag_kill(&fq->q, &nf_frags); |
217 | atomic_dec(&fq->q.refcnt); | ||
218 | |||
219 | if (!(fq->q.last_in & COMPLETE)) { | ||
220 | fq_unlink(fq); | ||
221 | atomic_dec(&fq->q.refcnt); | ||
222 | fq->q.last_in |= COMPLETE; | ||
223 | } | ||
224 | } | 203 | } |
225 | 204 | ||
226 | static void nf_ct_frag6_evictor(void) | 205 | static void nf_ct_frag6_evictor(void) |
diff --git a/net/ipv6/reassembly.c b/net/ipv6/reassembly.c index ced1a5f5b776..db129a7a6192 100644 --- a/net/ipv6/reassembly.c +++ b/net/ipv6/reassembly.c | |||
@@ -104,20 +104,6 @@ int ip6_frag_mem(void) | |||
104 | static int ip6_frag_reasm(struct frag_queue *fq, struct sk_buff *prev, | 104 | static int ip6_frag_reasm(struct frag_queue *fq, struct sk_buff *prev, |
105 | struct net_device *dev); | 105 | struct net_device *dev); |
106 | 106 | ||
107 | static __inline__ void __fq_unlink(struct frag_queue *fq) | ||
108 | { | ||
109 | hlist_del(&fq->q.list); | ||
110 | list_del(&fq->q.lru_list); | ||
111 | ip6_frags.nqueues--; | ||
112 | } | ||
113 | |||
114 | static __inline__ void fq_unlink(struct frag_queue *fq) | ||
115 | { | ||
116 | write_lock(&ip6_frags.lock); | ||
117 | __fq_unlink(fq); | ||
118 | write_unlock(&ip6_frags.lock); | ||
119 | } | ||
120 | |||
121 | /* | 107 | /* |
122 | * callers should be careful not to use the hash value outside the ipfrag_lock | 108 | * callers should be careful not to use the hash value outside the ipfrag_lock |
123 | * as doing so could race with ipfrag_hash_rnd being recalculated. | 109 | * as doing so could race with ipfrag_hash_rnd being recalculated. |
@@ -240,14 +226,7 @@ static __inline__ void fq_put(struct frag_queue *fq, int *work) | |||
240 | */ | 226 | */ |
241 | static __inline__ void fq_kill(struct frag_queue *fq) | 227 | static __inline__ void fq_kill(struct frag_queue *fq) |
242 | { | 228 | { |
243 | if (del_timer(&fq->q.timer)) | 229 | inet_frag_kill(&fq->q, &ip6_frags); |
244 | atomic_dec(&fq->q.refcnt); | ||
245 | |||
246 | if (!(fq->q.last_in & COMPLETE)) { | ||
247 | fq_unlink(fq); | ||
248 | atomic_dec(&fq->q.refcnt); | ||
249 | fq->q.last_in |= COMPLETE; | ||
250 | } | ||
251 | } | 230 | } |
252 | 231 | ||
253 | static void ip6_evictor(struct inet6_dev *idev) | 232 | static void ip6_evictor(struct inet6_dev *idev) |