From: Willem de Bruijn <willemdebruijn.kernel@gmail.com>
To: Ilya Maximets <i.maximets@ovn.org>,
Willem de Bruijn <willemdebruijn.kernel@gmail.com>,
Ilya Maximets <i.maximets@ovn.org>,
Jakub Kicinski <kuba@kernel.org>
Cc: Norbert Szetei <norbert@doyensec.com>,
netdev@vger.kernel.org, "David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Paolo Abeni <pabeni@redhat.com>,
Simon Horman <horms@kernel.org>,
Aaron Conole <aconole@redhat.com>,
Eelco Chaudron <echaudro@redhat.com>,
Steffen Klassert <steffen.klassert@secunet.com>,
Kuan-Ting Chen <h3xrabbit@gmail.com>,
"Michael S. Tsirkin" <mst@redhat.com>,
linux-kernel@vger.kernel.org, dev@openvswitch.org,
Jongmin Jang <payload.jang@gmail.com>,
Willem de Bruijn <willemb@google.com>
Subject: Re: [PATCH net v3 0/3] net: don't strip zerocopy frag markers from a forwarded skb
Date: Mon, 24 Aug 2026 15:14:18 -0400 [thread overview]
Message-ID: <willemdebruijn.kernel.9d29fd4385c5@gmail.com> (raw)
In-Reply-To: <c96b6c6f-1155-45d2-a117-489f1c48c8ef@ovn.org>
Ilya Maximets wrote:
> On 8/22/26 10:55 PM, Willem de Bruijn wrote:
> > Ilya Maximets wrote:
> >> On 8/22/26 2:09 AM, Jakub Kicinski wrote:
> >>> On Fri, 21 Aug 2026 23:45:41 +0200 Ilya Maximets wrote:
> >>>> Unfortunately, this needs a rebase now that a conflicting change
> >>>> for skb_zerocopy() was merged:
> >>>
> >>> Ugh, I was supposed to merge this first, wasn't I? Sorry.
> >>
> >> Not a huge deal, I guess, the conflict is mechanical and the patches
> >> are simple. I can take care of manual backports once we get the
> >> 'failed to apply' emails. Just a bit of busy work.
> >>
> >>> I was hoping for Willem to TAL since skb_tx_error() is a tx ZC
> >>> thing, now I realized that he wasn't CCed :S (please do so on v4)
> >>
> >> FWIW, I CCed a few people on v1 to have a conversation about a proper
> >> fix, but that wasn't fruitful. So, if I were Norbert, I wouldn't
> >> include them for the new versions either as doing so always feels like
> >> me being annoying. :)
> >
> > Having a look now.
>
> Thanks!
>
> >
> >> For now, the plan is to get v4 of these targeted fixes into net and
> >> stable and then remove skb_tx_error() entirely once net-next is open,
> >> as it seems to have lost all of its prior meaning.
> >
> > The original use case in tun_net_xmit introduced in commit
> > 149d36f7187c ("tun: report orphan frags errors to zero copy callback")
> > still exists. Not sure you can remove the function entirely.
>
> The skb_tx_error() prescribes to call kfree_skb() right after it and
> all the callers more or less do that (with the fixes applied).
>
> skb_tx_error() does two things:
>
> 1. skb_zcopy_downgrade_managed() that takes extra references on frags.
> 2. Calls skb_zcopy_clear(skb, true);
>
> The kfree_skb() called right after does:
>
> __kfree_skb
> skb_release_all
> skb_release_data
> if (skb_zcopy)
> bool skip_unref = shinfo->flags & SKBFL_MANAGED_FRAG_REFS;
> skb_zcopy_clear(skb, true);
> if (skip_unref)
> <skip unreferencing the frags, which is the same as taking
> the extra reference>
>
> So, unless I'm missing something, the kfree_skb() already does everything
> that skb_tx_error() does.
Good point. I agree.
> The fact that skb_tx_error() calls skb_zcopy_clear() with 'true' though
> feels weird. I would understand the need for the function, if it was
> actually signalling the error and not success. But you switched false
> to true in commit 1f8b977ab32d ("sock: enable MSG_ZEROCOPY") nine years
> ago and it seems like nobody complained so far...
I don't immediately recall the rationale. Probably not intentional
and I should have left the original call-sites, notably tun_net_xmit,
as is.
With MSG_ZEROCOPY, goal is to only set zerocopy_success to false if
a transmission could not be fully completed in zerocopy mode. Falling
back to copying deep in the stack is usually more expensive than doing
it from the start. And if the sendmsg otherwise succeeds, the caller
receives no other signal that MSG_ZEROCOPY is counterproductive.
skb_copy_ubufs will indeed call skb_zcopy_clear(.., false).
General transmit failures are signaled through the normal error path.
IMHO this includes allocation failure with GFP_ATOMIC.
That said, while I don't fully agree with these skb_tx_error()'s with
!zerocopy_success in the skb_orphan_frags() error paths, they did
precede my code. If we want to preserve them we would need to keep
skb_tx_error, with an extra zerocopy_success argument.
prev parent reply other threads:[~2026-08-24 19:14 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-18 8:43 Norbert Szetei
2026-08-18 8:45 ` [PATCH net v3 1/3] openvswitch: only skb_tx_error() a packet we are about to drop Norbert Szetei
2026-08-18 8:46 ` [PATCH net v3 2/3] net: skbuff: don't skb_tx_error() the source skb in skb_zerocopy() Norbert Szetei
2026-08-18 8:47 ` [PATCH net v3 3/3] net: skbuff: don't touch shared zerocopy state in skb_tx_error() Norbert Szetei
2026-08-18 15:59 ` Ilya Maximets
2026-08-21 21:45 ` [PATCH net v3 0/3] net: don't strip zerocopy frag markers from a forwarded skb Ilya Maximets
2026-08-22 0:09 ` Jakub Kicinski
2026-08-22 19:26 ` Ilya Maximets
2026-08-22 20:55 ` Willem de Bruijn
2026-08-24 11:38 ` Ilya Maximets
2026-08-24 19:14 ` Willem de Bruijn [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=willemdebruijn.kernel.9d29fd4385c5@gmail.com \
--to=willemdebruijn.kernel@gmail.com \
--cc=aconole@redhat.com \
--cc=davem@davemloft.net \
--cc=dev@openvswitch.org \
--cc=echaudro@redhat.com \
--cc=edumazet@google.com \
--cc=h3xrabbit@gmail.com \
--cc=horms@kernel.org \
--cc=i.maximets@ovn.org \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mst@redhat.com \
--cc=netdev@vger.kernel.org \
--cc=norbert@doyensec.com \
--cc=pabeni@redhat.com \
--cc=payload.jang@gmail.com \
--cc=steffen.klassert@secunet.com \
--cc=willemb@google.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®