diff options
| author | 2017-11-08 10:17:15 +0100 | |
|---|---|---|
| committer | 2017-11-08 10:17:15 +0100 | |
| commit | 8a103df440afea30c91ebd42e61dc644e647f4bd (patch) | |
| tree | 2cfa99e9c6e1e138e1404bce4294e46cb0034cce /include/net/fq_impl.h | |
| parent | sched/sysctl: Fix attributes of some extern declarations (diff) | |
| parent | drivers/ide-cd: Handle missing driver data during status check gracefully (diff) | |
| download | linux-dev-8a103df440afea30c91ebd42e61dc644e647f4bd.tar.xz linux-dev-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.h | 9 |
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); + } } } |
