diff options
Diffstat (limited to 'net/ipv4/inet_fragment.c')
-rw-r--r-- | net/ipv4/inet_fragment.c | 23 |
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 | } |
44 | EXPORT_SYMBOL(inet_frags_fini); | 44 | EXPORT_SYMBOL(inet_frags_fini); |
45 | |||
46 | static 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 | |||
55 | void 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 | |||
67 | EXPORT_SYMBOL(inet_frag_kill); | ||