summaryrefslogtreecommitdiffstats
path: root/include/net/fq_impl.h
diff options
context:
space:
mode:
authorIngo Molnar <mingo@kernel.org>2017-11-08 10:17:15 +0100
committerIngo Molnar <mingo@kernel.org>2017-11-08 10:17:15 +0100
commit8a103df440afea30c91ebd42e61dc644e647f4bd (patch)
tree2cfa99e9c6e1e138e1404bce4294e46cb0034cce /include/net/fq_impl.h
parenta9903f04e0a4ea522d959c2f287cdf0ab029e324 (diff)
parentfbc3edf7d7731d7a22c483c679700589bab936a3 (diff)
downloadcachepc-linux-8a103df440afea30c91ebd42e61dc644e647f4bd.tar.gz
cachepc-linux-8a103df440afea30c91ebd42e61dc644e647f4bd.zip
Merge branch 'linus' into sched/core, to pick up fixes
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'include/net/fq_impl.h')
-rw-r--r--include/net/fq_impl.h9
1 files changed, 6 insertions, 3 deletions
diff --git a/include/net/fq_impl.h b/include/net/fq_impl.h
index 4e6131cd3f43..ac1a2317941e 100644
--- a/include/net/fq_impl.h
+++ b/include/net/fq_impl.h
@@ -146,6 +146,7 @@ static void fq_tin_enqueue(struct fq *fq,
fq_flow_get_default_t get_default_func)
{
struct fq_flow *flow;
+ bool oom;
lockdep_assert_held(&fq->lock);
@@ -167,8 +168,8 @@ static void fq_tin_enqueue(struct fq *fq,
}
__skb_queue_tail(&flow->queue, skb);
-
- if (fq->backlog > fq->limit || fq->memory_usage > fq->memory_limit) {
+ oom = (fq->memory_usage > fq->memory_limit);
+ while (fq->backlog > fq->limit || oom) {
flow = list_first_entry_or_null(&fq->backlogs,
struct fq_flow,
backlogchain);
@@ -183,8 +184,10 @@ static void fq_tin_enqueue(struct fq *fq,
flow->tin->overlimit++;
fq->overlimit++;
- if (fq->memory_usage > fq->memory_limit)
+ if (oom) {
fq->overmemory++;
+ oom = (fq->memory_usage > fq->memory_limit);
+ }
}
}