aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv4/inet_fragment.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/ipv4/inet_fragment.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/ipv4/inet_fragment.c')
-rw-r--r--net/ipv4/inet_fragment.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/net/ipv4/inet_fragment.c b/net/ipv4/inet_fragment.c
index 69623ff4e4c6..534eaa8cdcf3 100644
--- a/net/ipv4/inet_fragment.c
+++ b/net/ipv4/inet_fragment.c
@@ -42,3 +42,26 @@ void inet_frags_fini(struct inet_frags *f)
42{ 42{
43} 43}
44EXPORT_SYMBOL(inet_frags_fini); 44EXPORT_SYMBOL(inet_frags_fini);
45
46static inline void fq_unlink(struct inet_frag_queue *fq, struct inet_frags *f)
47{
48 write_lock(&f->lock);
49 hlist_del(&fq->list);
50 list_del(&fq->lru_list);
51 f->nqueues--;
52 write_unlock(&f->lock);
53}
54
55void inet_frag_kill(struct inet_frag_queue *fq, struct inet_frags *f)
56{
57 if (del_timer(&fq->timer))
58 atomic_dec(&fq->refcnt);
59
60 if (!(fq->last_in & COMPLETE)) {
61 fq_unlink(fq, f);
62 atomic_dec(&fq->refcnt);
63 fq->last_in |= COMPLETE;
64 }
65}
66
67EXPORT_SYMBOL(inet_frag_kill);