Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 69422
b: refs/heads/master
c: 277e650
h: refs/heads/master
v: v3
  • Loading branch information
Pavel Emelyanov authored and David S. Miller committed Oct 15, 2007
1 parent 50780f4 commit 65e5cda
Show file tree
Hide file tree
Showing 6 changed files with 29 additions and 67 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 04128f233f2b344f3438cde09723e9946463a573
refs/heads/master: 277e650ddfc6944ef5f5466fd898b8da7f06cd82
2 changes: 2 additions & 0 deletions trunk/include/net/inet_frag.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
23 changes: 23 additions & 0 deletions trunk/net/ipv4/inet_fragment.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
23 changes: 1 addition & 22 deletions trunk/net/ipv4/ip_fragment.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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
Expand Down
23 changes: 1 addition & 22 deletions trunk/net/ipv6/netfilter/nf_conntrack_reasm.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand Down Expand Up @@ -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)
Expand Down
23 changes: 1 addition & 22 deletions trunk/net/ipv6/reassembly.c
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -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)
Expand Down

0 comments on commit 65e5cda

Please sign in to comment.