This PCS6 patch was ported to Vz7 by the initial commit (2a8b5de95918). It is only relevant if there is via_phys_dev stuff, which may set BR_ALREADY_SEEN skb->brmark. However, the via_phys_dev feature was removed in the scope of PSBM-12955, so this patch is not needed any more.
Moreover, it is buggy. The point is it may call skb_clone, which does not initialize all skb fields. As a result, some fields may contain junk. One of such fields is skb->csum_bad, which appeared after the last rebase. skb_checksum_validate, which is now called by icmpv6_rcv, identifies an skb as corrupted and drops it if this flag is set. In particular, this results in ping6 failures with "Address unreachable" error. https://jira.sw.ru/browse/PSBM-38924 Signed-off-by: Vladimir Davydov <vdavy...@parallels.com> --- net/bridge/br_input.c | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/net/bridge/br_input.c b/net/bridge/br_input.c index c9c4b3bc7ae6..cf29b38b3b0c 100644 --- a/net/bridge/br_input.c +++ b/net/bridge/br_input.c @@ -68,7 +68,6 @@ int br_handle_frame_finish(struct sk_buff *skb) struct sk_buff *skb2; bool unicast = true; u16 vid = 0; - int err = 0; if (!p || p->state == BR_STATE_DISABLED) goto drop; @@ -124,21 +123,17 @@ int br_handle_frame_finish(struct sk_buff *skb) skb = NULL; } - if (skb2 == skb) - skb2 = skb_clone(skb, GFP_ATOMIC); - - if (skb2) - err = br_pass_frame_up(skb2); - if (skb) { if (dst) { dst->used = jiffies; - br_forward(dst->dst, skb, NULL); + br_forward(dst->dst, skb, skb2); } else - br_flood_forward(br, skb, NULL, unicast); + br_flood_forward(br, skb, skb2, unicast); } - return err; + if (skb2) + return br_pass_frame_up(skb2); + out: return 0; drop: -- 2.1.4 _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel