Initial commit
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
From: Johannes Berg <johannes.berg@intel.com>
|
||||
Date: Thu, 30 Aug 2018 10:55:49 +0200
|
||||
Subject: [PATCH] mac80211: always account for A-MSDU header changes
|
||||
|
||||
In the error path of changing the SKB headroom of the second
|
||||
A-MSDU subframe, we would not account for the already-changed
|
||||
length of the first frame that just got converted to be in
|
||||
A-MSDU format and thus is a bit longer now.
|
||||
|
||||
Fix this by doing the necessary accounting.
|
||||
|
||||
It would be possible to reorder the operations, but that would
|
||||
make the code more complex (to calculate the necessary pad),
|
||||
and the headroom expansion should not fail frequently enough
|
||||
to make that worthwhile.
|
||||
|
||||
Fixes: 6e0456b54545 ("mac80211: add A-MSDU tx support")
|
||||
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
Acked-by: Lorenzo Bianconi <lorenzo.bianconi@redhat.com>
|
||||
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
---
|
||||
|
||||
--- a/net/mac80211/tx.c
|
||||
+++ b/net/mac80211/tx.c
|
||||
@@ -3232,7 +3232,7 @@ static bool ieee80211_amsdu_aggregate(st
|
||||
|
||||
if (!ieee80211_amsdu_realloc_pad(local, skb, sizeof(rfc1042_header) +
|
||||
2 + pad))
|
||||
- goto out;
|
||||
+ goto out_recalc;
|
||||
|
||||
ret = true;
|
||||
data = skb_push(skb, ETH_ALEN + 2);
|
||||
@@ -3249,11 +3249,13 @@ static bool ieee80211_amsdu_aggregate(st
|
||||
head->data_len += skb->len;
|
||||
*frag_tail = skb;
|
||||
|
||||
- flow->backlog += head->len - orig_len;
|
||||
- tin->backlog_bytes += head->len - orig_len;
|
||||
-
|
||||
- fq_recalc_backlog(fq, tin, flow);
|
||||
+out_recalc:
|
||||
+ if (head->len != orig_len) {
|
||||
+ flow->backlog += head->len - orig_len;
|
||||
+ tin->backlog_bytes += head->len - orig_len;
|
||||
|
||||
+ fq_recalc_backlog(fq, tin, flow);
|
||||
+ }
|
||||
out:
|
||||
fq->memory_usage += head->truesize - orig_truesize;
|
||||
|
||||
Reference in New Issue
Block a user