Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=277e650ddfc6944ef5f5466fd898b8da7f06cd82
Commit:     277e650ddfc6944ef5f5466fd898b8da7f06cd82
Parent:     04128f233f2b344f3438cde09723e9946463a573
Author:     Pavel Emelyanov <[EMAIL PROTECTED]>
AuthorDate: Mon Oct 15 02:37:18 2007 -0700
Committer:  David S. Miller <[EMAIL PROTECTED]>
CommitDate: Mon Oct 15 12:26:41 2007 -0700

    [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 <[EMAIL PROTECTED]>
    Signed-off-by: David S. Miller <[EMAIL PROTECTED]>
---
 include/net/inet_frag.h                 |    2 ++
 net/ipv4/inet_fragment.c                |   23 +++++++++++++++++++++++
 net/ipv4/ip_fragment.c                  |   23 +----------------------
 net/ipv6/netfilter/nf_conntrack_reasm.c |   23 +----------------------
 net/ipv6/reassembly.c                   |   23 +----------------------
 5 files changed, 28 insertions(+), 66 deletions(-)

diff --git a/include/net/inet_frag.h b/include/net/inet_frag.h
index ada03ba..9902363 100644
--- a/include/net/inet_frag.h
+++ b/include/net/inet_frag.h
@@ -41,4 +41,6 @@ struct inet_frags {
 void inet_frags_init(struct inet_frags *);
 void inet_frags_fini(struct inet_frags *);
 
+void inet_frag_kill(struct inet_frag_queue *q, struct inet_frags *f);
+
 #endif
diff --git a/net/ipv4/inet_fragment.c b/net/ipv4/inet_fragment.c
index 69623ff..534eaa8 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)
 {
 }
 EXPORT_SYMBOL(inet_frags_fini);
+
+static inline void fq_unlink(struct inet_frag_queue *fq, struct inet_frags *f)
+{
+       write_lock(&f->lock);
+       hlist_del(&fq->list);
+       list_del(&fq->lru_list);
+       f->nqueues--;
+       write_unlock(&f->lock);
+}
+
+void inet_frag_kill(struct inet_frag_queue *fq, struct inet_frags *f)
+{
+       if (del_timer(&fq->timer))
+               atomic_dec(&fq->refcnt);
+
+       if (!(fq->last_in & COMPLETE)) {
+               fq_unlink(fq, f);
+               atomic_dec(&fq->refcnt);
+               fq->last_in |= COMPLETE;
+       }
+}
+
+EXPORT_SYMBOL(inet_frag_kill);
diff --git a/net/ipv4/ip_fragment.c b/net/ipv4/ip_fragment.c
index 0dd9a31..7416c05 100644
--- a/net/ipv4/ip_fragment.c
+++ b/net/ipv4/ip_fragment.c
@@ -108,20 +108,6 @@ int ip_frag_mem(void)
 static int ip_frag_reasm(struct ipq *qp, struct sk_buff *prev,
                         struct net_device *dev);
 
-static __inline__ void __ipq_unlink(struct ipq *qp)
-{
-       hlist_del(&qp->q.list);
-       list_del(&qp->q.lru_list);
-       ip4_frags.nqueues--;
-}
-
-static __inline__ void ipq_unlink(struct ipq *ipq)
-{
-       write_lock(&ip4_frags.lock);
-       __ipq_unlink(ipq);
-       write_unlock(&ip4_frags.lock);
-}
-
 static unsigned int ipqhashfn(__be16 id, __be32 saddr, __be32 daddr, u8 prot)
 {
        return jhash_3words((__force u32)id << 16 | prot,
@@ -222,14 +208,7 @@ static __inline__ void ipq_put(struct ipq *ipq, int *work)
  */
 static void ipq_kill(struct ipq *ipq)
 {
-       if (del_timer(&ipq->q.timer))
-               atomic_dec(&ipq->q.refcnt);
-
-       if (!(ipq->q.last_in & COMPLETE)) {
-               ipq_unlink(ipq);
-               atomic_dec(&ipq->q.refcnt);
-               ipq->q.last_in |= COMPLETE;
-       }
+       inet_frag_kill(&ipq->q, &ip4_frags);
 }
 
 /* Memory limiting on fragments.  Evictor trashes the oldest
diff --git a/net/ipv6/netfilter/nf_conntrack_reasm.c 
b/net/ipv6/netfilter/nf_conntrack_reasm.c
index 966a888..2ebe515 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 = {
 
 static struct inet_frags nf_frags;
 
-static __inline__ void __fq_unlink(struct nf_ct_frag6_queue *fq)
-{
-       hlist_del(&fq->q.list);
-       list_del(&fq->q.lru_list);
-       nf_frags.nqueues--;
-}
-
-static __inline__ void fq_unlink(struct nf_ct_frag6_queue *fq)
-{
-       write_lock(&nf_frags.lock);
-       __fq_unlink(fq);
-       write_unlock(&nf_frags.lock);
-}
-
 static unsigned int ip6qhashfn(__be32 id, struct in6_addr *saddr,
                               struct in6_addr *daddr)
 {
@@ -213,14 +199,7 @@ static __inline__ void fq_put(struct nf_ct_frag6_queue 
*fq, unsigned int *work)
  */
 static __inline__ void fq_kill(struct nf_ct_frag6_queue *fq)
 {
-       if (del_timer(&fq->q.timer))
-               atomic_dec(&fq->q.refcnt);
-
-       if (!(fq->q.last_in & COMPLETE)) {
-               fq_unlink(fq);
-               atomic_dec(&fq->q.refcnt);
-               fq->q.last_in |= COMPLETE;
-       }
+       inet_frag_kill(&fq->q, &nf_frags);
 }
 
 static void nf_ct_frag6_evictor(void)
diff --git a/net/ipv6/reassembly.c b/net/ipv6/reassembly.c
index ced1a5f..db129a7 100644
--- a/net/ipv6/reassembly.c
+++ b/net/ipv6/reassembly.c
@@ -104,20 +104,6 @@ int ip6_frag_mem(void)
 static int ip6_frag_reasm(struct frag_queue *fq, struct sk_buff *prev,
                          struct net_device *dev);
 
-static __inline__ void __fq_unlink(struct frag_queue *fq)
-{
-       hlist_del(&fq->q.list);
-       list_del(&fq->q.lru_list);
-       ip6_frags.nqueues--;
-}
-
-static __inline__ void fq_unlink(struct frag_queue *fq)
-{
-       write_lock(&ip6_frags.lock);
-       __fq_unlink(fq);
-       write_unlock(&ip6_frags.lock);
-}
-
 /*
  * callers should be careful not to use the hash value outside the ipfrag_lock
  * 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)
  */
 static __inline__ void fq_kill(struct frag_queue *fq)
 {
-       if (del_timer(&fq->q.timer))
-               atomic_dec(&fq->q.refcnt);
-
-       if (!(fq->q.last_in & COMPLETE)) {
-               fq_unlink(fq);
-               atomic_dec(&fq->q.refcnt);
-               fq->q.last_in |= COMPLETE;
-       }
+       inet_frag_kill(&fq->q, &ip6_frags);
 }
 
 static void ip6_evictor(struct inet6_dev *idev)
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to