aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/xen-netback/netback.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/xen-netback/netback.c')
-rw-r--r--drivers/net/xen-netback/netback.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/drivers/net/xen-netback/netback.c b/drivers/net/xen-netback/netback.c
index 80aae3a32c2a..c801a832851c 100644
--- a/drivers/net/xen-netback/netback.c
+++ b/drivers/net/xen-netback/netback.c
@@ -1169,15 +1169,24 @@ static int xenvif_tx_submit(struct xenvif_queue *queue)
1169 continue; 1169 continue;
1170 } 1170 }
1171 1171
1172 skb_probe_transport_header(skb, 0); 1172 skb_probe_transport_header(skb);
1173 1173
1174 /* If the packet is GSO then we will have just set up the 1174 /* If the packet is GSO then we will have just set up the
1175 * transport header offset in checksum_setup so it's now 1175 * transport header offset in checksum_setup so it's now
1176 * straightforward to calculate gso_segs. 1176 * straightforward to calculate gso_segs.
1177 */ 1177 */
1178 if (skb_is_gso(skb)) { 1178 if (skb_is_gso(skb)) {
1179 int mss = skb_shinfo(skb)->gso_size; 1179 int mss, hdrlen;
1180 int hdrlen = skb_transport_header(skb) - 1180
1181 /* GSO implies having the L4 header. */
1182 WARN_ON_ONCE(!skb_transport_header_was_set(skb));
1183 if (unlikely(!skb_transport_header_was_set(skb))) {
1184 kfree_skb(skb);
1185 continue;
1186 }
1187
1188 mss = skb_shinfo(skb)->gso_size;
1189 hdrlen = skb_transport_header(skb) -
1181 skb_mac_header(skb) + 1190 skb_mac_header(skb) +
1182 tcp_hdrlen(skb); 1191 tcp_hdrlen(skb);
1183 1192