Thread (18 messages) 18 messages, 4 authors, 2019-01-28

Re: [PATCH RFC 1/3] net: Prepare GSO return values for fraglist GSO.

From: Paolo Abeni <pabeni@redhat.com>
Date: 2019-01-08 13:53:55

On Fri, 2018-12-21 at 08:53 +0100, Steffen Klassert wrote:
On fraglist GSO, we don't need to clone the original
skb. So we don't have anything to return to free.
Prepare GSO that it frees the original skb only
if the return pointer really changed. Fraglist
GSO frees the original skb itself on error and
returns -EREMOTE in this case.
I think it would be nicer preseving the same sematic with gro list, so
that we don't have to add this special handling.

e.g. calling skb_get(skb) in skb_segment_list() when successful, would
avoid the special handling for the no error case (at the cost of 2
atomic ops per gso_list packet)
quoted hunk ↗ jump to hunk
diff --git a/net/xfrm/xfrm_output.c b/net/xfrm/xfrm_output.c
index 4ae87c5ce2e3..1941dc2a80a0 100644
--- a/net/xfrm/xfrm_output.c
+++ b/net/xfrm/xfrm_output.c
@@ -183,7 +183,8 @@ static int xfrm_output_gso(struct net *net, struct sock *sk, struct sk_buff *skb
 	BUILD_BUG_ON(sizeof(*IPCB(skb)) > SKB_SGO_CB_OFFSET);
 	BUILD_BUG_ON(sizeof(*IP6CB(skb)) > SKB_SGO_CB_OFFSET);
 	segs = skb_gso_segment(skb, 0);
-	kfree_skb(skb);
+	if (segs != skb)
+		kfree_skb(skb);
 	if (IS_ERR(segs))
what if IS_ERR(segs) == -EREMOTE here?
 		return PTR_ERR(segs);
 	if (segs == NULL)
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help