2021-11-23 17:13:32

by Fabian Frédérick

[permalink] [raw]
Subject: vxlan: Possible regression in vxlan_rcv()

Hi,

Last year I sent the following

2ae2904b5bac
("vxlan: don't collect metadata if remote checksum is wrong")


thinking it was an optimization and noticed it was managed in that order
before patch

f14ecebb3a4e
("vxlan: clean up extension handling on rx")


I was not able to create some script to test that code and had no
feedback on it but lately, looking at it again I noticed that metadata
sequence (if (vxlan_collect_metadata(vs))) was updating skb in
skb_dst_set(skb, (struct dst_entry *)tun_dst); which was not the case
during the clean up above.

Can someone tell me if the update is really ok or how I could check
that code ?
if VXLAN_F_REMCSUM_RX involves metadata checking I can ask to remove the
patch.

Best regards,
Fabian


2021-11-24 17:14:32

by Jiri Benc

[permalink] [raw]
Subject: Re: vxlan: Possible regression in vxlan_rcv()

On Tue, 23 Nov 2021 18:13:26 +0100 (CET), Fabian Frédérick wrote:
> Can someone tell me if the update is really ok or how I could check
> that code ?
> if VXLAN_F_REMCSUM_RX involves metadata checking I can ask to remove the
> patch.

I don't think it matters.

I doubt anyone is using remote checksum offloading (RCO). It was based
on a half thought-through idea. Local checksum offloading is superior,
it gives you the same performance for free, with full compatibility with
the base VXLAN standard. And even trying hard, I can't imagine anyone
could be using RCO with metadata dst.

I wouldn't object against removing RCO completely from VXLAN (and
moving the "generic" RCO pieces to net/ipv4/fou.c, which would become
its only user). It would simplify the code and I doubt anyone would
notice. I'm serious. Try googling for remcsumtx or remcsumrx and see
for yourself.

And, in case you still wonder, your patch seems fine to me. It's somehow
pointless, since it optimizes drops for an extension that nobody uses,
but it should not affect the code correctness. Probably. Whatever.

Jiri