Skip to content

Commit

Permalink
net: tap: use skb_list_walk_safe helper for gso segments
Browse files Browse the repository at this point in the history
This is a straight-forward conversion case for the new function, and
while we're at it, we can remove a null write to skb->next by replacing
it with skb_mark_not_on_list.

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Jason A. Donenfeld authored and David S. Miller committed Jan 8, 2020
1 parent dcfea72 commit 5643a55
Showing 1 changed file with 6 additions and 8 deletions.
14 changes: 6 additions & 8 deletions drivers/net/tap.c
Original file line number Diff line number Diff line change
Expand Up @@ -341,6 +341,7 @@ rx_handler_result_t tap_handle_frame(struct sk_buff **pskb)
features |= tap->tap_features;
if (netif_needs_gso(skb, features)) {
struct sk_buff *segs = __skb_gso_segment(skb, features, false);
struct sk_buff *next;

if (IS_ERR(segs))
goto drop;
Expand All @@ -352,16 +353,13 @@ rx_handler_result_t tap_handle_frame(struct sk_buff **pskb)
}

consume_skb(skb);
while (segs) {
struct sk_buff *nskb = segs->next;

segs->next = NULL;
if (ptr_ring_produce(&q->ring, segs)) {
kfree_skb(segs);
kfree_skb_list(nskb);
skb_list_walk_safe(segs, skb, next) {
skb_mark_not_on_list(skb);
if (ptr_ring_produce(&q->ring, skb)) {
kfree_skb(skb);
kfree_skb_list(next);
break;
}
segs = nskb;
}
} else {
/* If we receive a partial checksum and the tap side
Expand Down

0 comments on commit 5643a55

Please sign in to comment.