aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv6/reassembly.c
diff options
context:
space:
mode:
authorPavel Emelyanov <xemul@openvz.org>2007-10-15 05:37:18 -0400
committerDavid S. Miller <davem@sunset.davemloft.net>2007-10-15 15:26:41 -0400
commit277e650ddfc6944ef5f5466fd898b8da7f06cd82 (patch)
tree39afdd22384c402e08287a3911455a2bbce721b1 /net/ipv6/reassembly.c
parent04128f233f2b344f3438cde09723e9946463a573 (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/reassembly.c')
-rw-r--r--net/ipv6/reassembly.c23
1 files changed, 1 insertions, 22 deletions
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)
104static int ip6_frag_reasm(struct frag_queue *fq, struct sk_buff *prev, 104static int ip6_frag_reasm(struct frag_queue *fq, struct sk_buff *prev,
105 struct net_device *dev); 105 struct net_device *dev);
106 106
107static __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
114static __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 */
241static __inline__ void fq_kill(struct frag_queue *fq) 227static __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
253static void ip6_evictor(struct inet6_dev *idev) 232static void ip6_evictor(struct inet6_dev *idev)