|
@@ -1521,7 +1521,16 @@ static int xenvif_tx_submit(struct xenvif_queue *queue)
|
|
|
|
|
|
/* Check the remap error code. */
|
|
/* Check the remap error code. */
|
|
if (unlikely(xenvif_tx_check_gop(queue, skb, &gop_map, &gop_copy))) {
|
|
if (unlikely(xenvif_tx_check_gop(queue, skb, &gop_map, &gop_copy))) {
|
|
|
|
+ /* If there was an error, xenvif_tx_check_gop is
|
|
|
|
+ * expected to release all the frags which were mapped,
|
|
|
|
+ * so kfree_skb shouldn't do it again
|
|
|
|
+ */
|
|
skb_shinfo(skb)->nr_frags = 0;
|
|
skb_shinfo(skb)->nr_frags = 0;
|
|
|
|
+ if (skb_has_frag_list(skb)) {
|
|
|
|
+ struct sk_buff *nskb =
|
|
|
|
+ skb_shinfo(skb)->frag_list;
|
|
|
|
+ skb_shinfo(nskb)->nr_frags = 0;
|
|
|
|
+ }
|
|
kfree_skb(skb);
|
|
kfree_skb(skb);
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|