Re: [PATCH net] net: dsa: ksz: fix padding size of skb

Vladimir Oltean
2020-10-16T18:13:25Z

On Fri, Oct 16, 2020 at 11:03:11AM -0700, Jakub Kicinski wrote:
> On Fri, 16 Oct 2020 18:56:45 +0300 Vladimir Oltean wrote:
> > > 3. "Manually" unsharing in dsa_slave_xmit(), reserving enough tailroom
> > > for the tail tag (and ETH_ZLEN?). Would moving the "else" clause from
> > > ksz_common_xmit() to dsa_slave_xmit() do the job correctly?
> >
> > I was thinking about something like that, indeed. DSA knows everything
> > about the tagger: its overhead, whether it's a tail tag or not. The xmit
> > callback of the tagger should only be there to populate the tag where it
> > needs to be. But reallocation, padding, etc etc, should all be dealt
> > with by the common DSA xmit procedure. We want the taggers to be simple
> > and reuse as much logic as possible, not to be bloated.
>
> FWIW if you want to avoid the reallocs you may want to set
> needed_tailroom on the netdev.

Tell me more about that, I've been meaning since forever to try it out.
I read about needed_headroom and needed_tailroom, and it's one of the
reasons why I added the .tail_tag option in the DSA tagger (to
distinguish whether a switch needs headroom or tailroom), but I can't
figure out, just from static analysis of the code, where exactly is the
needed tailroom being accounted for. For example, if I'm in Christian's
situation, e.g. I have a packet smaller than ETH_ZLEN, would the
tailroom be enough to hold just the dev->needed_tailroom, or would there
be enough space in the skb for the entire ETH_ZLEN + dev->needed_tailroom?