summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2020-07-09 13:50:08 -0700
committerLinux Build Service Account <lnxbuild@localhost>2020-07-09 13:50:08 -0700
commit65b4e9defb94e35400f7b030fbe51f0caeeecd39 (patch)
tree4ed960f26a805ff63ac6b278f064c1ca12445aeb
parent5020d900b1c4d4cd4064d36a0f39d778d87f601e (diff)
parentc7f0fbe8f0d8f723000441c4afc2270c88fd011e (diff)
downloaddata-kernel-65b4e9defb94e35400f7b030fbe51f0caeeecd39.tar.gz
Merge c7f0fbe8f0d8f723000441c4afc2270c88fd011e on remote branch
Change-Id: I6d05f236a2a497aa5b050800f0cbdd724b7a21c4
-rwxr-xr-xdrivers/rmnet/shs/rmnet_shs_main.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/drivers/rmnet/shs/rmnet_shs_main.c b/drivers/rmnet/shs/rmnet_shs_main.c
index 36ba75d..c65298b 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,17 +421,27 @@ 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 */
+ /* No need to set gso info if single segments */
+ if (segments_per_skb <= 1)
+ return segments;
+
+ /* 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_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;
+
+ if (gso_segs <= 1) {
+ break;
+ }
}
return segments;