summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichal Kubeček <mkubecek@suse.cz>2016-05-27 17:53:52 +0200
committerDavid S. Miller <davem@davemloft.net>2016-06-05 22:56:42 -0400
commit30759219f562cfaaebe7b9c1d1c0e6b5445c69b0 (patch)
treed90c737e057e2f7ec97a9d12218c646550adc707
parentb1c6a3a46b8b49ea6344264c1a24f1e51196761e (diff)
downloadlinux-30759219f562cfaaebe7b9c1d1c0e6b5445c69b0.tar.gz
linux-30759219f562cfaaebe7b9c1d1c0e6b5445c69b0.tar.bz2
linux-30759219f562cfaaebe7b9c1d1c0e6b5445c69b0.zip
net: disable fragment reassembly if high_thresh is zero
Before commit 6d7b857d541e ("net: use lib/percpu_counter API for fragmentation mem accounting"), setting the reassembly high threshold to 0 prevented fragment reassembly as first fragment would be always evicted before second could be added to the queue. While inefficient, some users apparently relied on this method. Since the commit mentioned above, a percpu counter is used for reassembly memory accounting and high batch size avoids taking slow path in most common scenarios. As a result, a whole full sized packet can be reassembled without the percpu counter's main counter changing its value so that even with high_thresh set to 0, fragmented packets can be still reassembled and processed. Add explicit check preventing reassembly if high threshold is zero. Signed-off-by: Michal Kubecek <mkubecek@suse.cz> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--net/ipv4/inet_fragment.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/net/ipv4/inet_fragment.c b/net/ipv4/inet_fragment.c
index 3a88b0c73797..b5e9317eaf9e 100644
--- a/net/ipv4/inet_fragment.c
+++ b/net/ipv4/inet_fragment.c
@@ -355,7 +355,7 @@ static struct inet_frag_queue *inet_frag_alloc(struct netns_frags *nf,
{
struct inet_frag_queue *q;
- if (frag_mem_limit(nf) > nf->high_thresh) {
+ if (!nf->high_thresh || frag_mem_limit(nf) > nf->high_thresh) {
inet_frag_schedule_worker(f);
return NULL;
}