The commit is pushed to "branch-rh7-3.10.0-229.7.2-ovz" and will appear at 
https://src.openvz.org/scm/ovz/vzkernel.git
after rh7-3.10.0-229.7.2.vz7.6.5
------>
commit 019b0e9d6ccaf0c0ec064ec0c2b2045a6e17dc0d
Author: Vladimir Davydov <vdavy...@parallels.com>
Date:   Tue Sep 1 17:12:29 2015 +0400

    ve/bridge: Revert diff-ve-net-bridge-fix-deliver-vs-close-seq
    
    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 c9c4b3b..cf29b38 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:
_______________________________________________
Devel mailing list
Devel@openvz.org
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to