diff options
Diffstat (limited to 'drivers/net/xen-netback/netback.c')
-rw-r--r-- | drivers/net/xen-netback/netback.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/drivers/net/xen-netback/netback.c b/drivers/net/xen-netback/netback.c index f09948b009dd..1d9940d4e8c7 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 | ||