ipv6: unify fragment thresh handling code
Cc: Herbert Xu <herbert@gondor.apana.org.au> Cc: Michal Kubeček <mkubecek@suse.cz> Cc: David Miller <davem@davemloft.net> Signed-off-by: Cong Wang <amwang@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
d4915c087f
commit
6b102865e7
@@ -89,7 +89,7 @@ void inet_frags_exit_net(struct netns_frags *nf, struct inet_frags *f)
|
||||
nf->low_thresh = 0;
|
||||
|
||||
local_bh_disable();
|
||||
inet_frag_evictor(nf, f);
|
||||
inet_frag_evictor(nf, f, true);
|
||||
local_bh_enable();
|
||||
}
|
||||
EXPORT_SYMBOL(inet_frags_exit_net);
|
||||
@@ -158,11 +158,16 @@ void inet_frag_destroy(struct inet_frag_queue *q, struct inet_frags *f,
|
||||
}
|
||||
EXPORT_SYMBOL(inet_frag_destroy);
|
||||
|
||||
int inet_frag_evictor(struct netns_frags *nf, struct inet_frags *f)
|
||||
int inet_frag_evictor(struct netns_frags *nf, struct inet_frags *f, bool force)
|
||||
{
|
||||
struct inet_frag_queue *q;
|
||||
int work, evicted = 0;
|
||||
|
||||
if (!force) {
|
||||
if (atomic_read(&nf->mem) <= nf->high_thresh)
|
||||
return 0;
|
||||
}
|
||||
|
||||
work = atomic_read(&nf->mem) - nf->low_thresh;
|
||||
while (work > 0) {
|
||||
read_lock(&f->lock);
|
||||
|
@@ -219,7 +219,7 @@ static void ip_evictor(struct net *net)
|
||||
{
|
||||
int evicted;
|
||||
|
||||
evicted = inet_frag_evictor(&net->ipv4.frags, &ip4_frags);
|
||||
evicted = inet_frag_evictor(&net->ipv4.frags, &ip4_frags, false);
|
||||
if (evicted)
|
||||
IP_ADD_STATS_BH(net, IPSTATS_MIB_REASMFAILS, evicted);
|
||||
}
|
||||
@@ -684,8 +684,7 @@ int ip_defrag(struct sk_buff *skb, u32 user)
|
||||
IP_INC_STATS_BH(net, IPSTATS_MIB_REASMREQDS);
|
||||
|
||||
/* Start by cleaning up the memory. */
|
||||
if (atomic_read(&net->ipv4.frags.mem) > net->ipv4.frags.high_thresh)
|
||||
ip_evictor(net);
|
||||
ip_evictor(net);
|
||||
|
||||
/* Lookup (or create) queue header */
|
||||
if ((qp = ip_find(net, ip_hdr(skb), user)) != NULL) {
|
||||
|
Reference in New Issue
Block a user