mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 18:51:56 -04:00
[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]>
This commit is contained in:
parent
04128f233f
commit
277e650ddf
5 changed files with 28 additions and 66 deletions
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in a new issue