summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSubash Abhinov Kasiviswanathan <subashab@codeaurora.org>2020-06-12 17:56:39 -0600
committerGerrit - the friendly Code Review server <code-review@localhost>2020-06-17 22:33:09 -0700
commit036f4f0274978a8511c05677e0cc0fc9436b302a (patch)
treea39755f351ef5280eb15164cda7f7b1864848f03
parentc2621585f4cd96e5965099eb975c156328775481 (diff)
downloaddata-kernel-036f4f0274978a8511c05677e0cc0fc9436b302a.tar.gz
rmnet_shs: set gso_type when partially segmenting SKBs
Copy the gso_type in segmented SKBs to avoid warning of packets not being able to be forwarded. Change-Id: I163b00233439edead2508f63766d3531053bd57b Acked-by: Ryan Chapman <rchapman@qti.qualcomm.com> Signed-off-by: Subash Abhinov Kasiviswanathan <subashab@codeaurora.org>
-rwxr-xr-xdrivers/rmnet/shs/rmnet_shs_main.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/drivers/rmnet/shs/rmnet_shs_main.c b/drivers/rmnet/shs/rmnet_shs_main.c
index 36ba75d..8d9ed2b 100755
--- a/drivers/rmnet/shs/rmnet_shs_main.c
+++ b/drivers/rmnet/shs/rmnet_shs_main.c
@@ -404,6 +404,7 @@ static struct sk_buff *rmnet_shs_skb_partial_segment(struct sk_buff *skb,
struct sk_buff *segments, *tmp;
u16 gso_size = shinfo->gso_size;
u16 gso_segs = shinfo->gso_segs;
+ unsigned int gso_type = shinfo->gso_type;
if (segments_per_skb >= gso_segs) {
return NULL;
@@ -420,15 +421,19 @@ static struct sk_buff *rmnet_shs_skb_partial_segment(struct sk_buff *skb,
return NULL;
}
- /* Mark correct number of segments and correct size in the new skbs */
+ /* Mark correct number of segments, size, and type in the new skbs */
for (tmp = segments; tmp; tmp = tmp->next) {
struct skb_shared_info *new_shinfo = skb_shinfo(tmp);
- new_shinfo->gso_size = gso_size;
- if (gso_segs >= segments_per_skb)
- new_shinfo->gso_segs = segments_per_skb;
- else
- new_shinfo->gso_segs = gso_segs;
+ if (tmp->len > gso_size) {
+ new_shinfo->gso_type = gso_type;
+ new_shinfo->gso_size = gso_size;
+
+ if (gso_segs >= segments_per_skb)
+ new_shinfo->gso_segs = segments_per_skb;
+ else
+ new_shinfo->gso_segs = gso_segs;
+ }
gso_segs -= segments_per_skb;
}