diff options
| author | Maxime Ripard <maxime@cerno.tech> | 2023-01-03 08:32:12 +0100 |
|---|---|---|
| committer | Maxime Ripard <maxime@cerno.tech> | 2023-01-03 08:32:12 +0100 |
| commit | 2c55d703391acf7e9101da596d0c15ee03b318a3 (patch) | |
| tree | 422ef671343624b56d333b47d20a538eeedbfe10 /include/net/fq_impl.h | |
| parent | 92d43bd3bc9728c1fb114d7011d46f5ea9489e28 (diff) | |
| parent | 88603b6dc419445847923fcb7fe5080067a30f98 (diff) | |
Merge drm/drm-fixes into drm-misc-fixes
Let's start the fixes cycle.
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
Diffstat (limited to 'include/net/fq_impl.h')
| -rw-r--r-- | include/net/fq_impl.h | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/include/net/fq_impl.h b/include/net/fq_impl.h index 524b510f1c68..9467e33dfb36 100644 --- a/include/net/fq_impl.h +++ b/include/net/fq_impl.h @@ -200,6 +200,7 @@ static void fq_tin_enqueue(struct fq *fq, fq_skb_free_t free_func) { struct fq_flow *flow; + struct sk_buff *next; bool oom; lockdep_assert_held(&fq->lock); @@ -214,11 +215,15 @@ static void fq_tin_enqueue(struct fq *fq, } flow->tin = tin; - flow->backlog += skb->len; - tin->backlog_bytes += skb->len; - tin->backlog_packets++; - fq->memory_usage += skb->truesize; - fq->backlog++; + skb_list_walk_safe(skb, skb, next) { + skb_mark_not_on_list(skb); + flow->backlog += skb->len; + tin->backlog_bytes += skb->len; + tin->backlog_packets++; + fq->memory_usage += skb->truesize; + fq->backlog++; + __skb_queue_tail(&flow->queue, skb); + } if (list_empty(&flow->flowchain)) { flow->deficit = fq->quantum; @@ -226,7 +231,6 @@ static void fq_tin_enqueue(struct fq *fq, &tin->new_flows); } - __skb_queue_tail(&flow->queue, skb); oom = (fq->memory_usage > fq->memory_limit); while (fq->backlog > fq->limit || oom) { flow = fq_find_fattest_flow(fq); |
