diff options
author | Josh Boyer <jwboyer@redhat.com> | 2013-06-26 07:50:55 -0400 |
---|---|---|
committer | Josh Boyer <jwboyer@redhat.com> | 2013-06-26 07:51:29 -0400 |
commit | 69c0bf478219b2fbb38fb3c707b220b75bfa4129 (patch) | |
tree | 05c8bb10cd71353428b266b9078c40c5c4adb01d /bridge-send-query-as-soon-as-leave-is-received.patch | |
parent | 0a517e3c24f320b2b6336a3413fd9884bc36c954 (diff) | |
download | kernel-69c0bf478219b2fbb38fb3c707b220b75bfa4129.tar.gz kernel-69c0bf478219b2fbb38fb3c707b220b75bfa4129.tar.xz kernel-69c0bf478219b2fbb38fb3c707b220b75bfa4129.zip |
Add two patches to fix bridge networking issues (rhbz 880035)
Diffstat (limited to 'bridge-send-query-as-soon-as-leave-is-received.patch')
-rw-r--r-- | bridge-send-query-as-soon-as-leave-is-received.patch | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/bridge-send-query-as-soon-as-leave-is-received.patch b/bridge-send-query-as-soon-as-leave-is-received.patch new file mode 100644 index 000000000..8b6652e7e --- /dev/null +++ b/bridge-send-query-as-soon-as-leave-is-received.patch @@ -0,0 +1,57 @@ +From 6b7df111ece130fa979a0c4f58e53674c1e47d3e Mon Sep 17 00:00:00 2001 +From: Cong Wang <amwang@redhat.com> +Date: Tue, 21 May 2013 21:52:56 +0000 +Subject: bridge: send query as soon as leave is received + +Continue sending queries when leave is received if the user marks +it as a querier. + +Cc: Herbert Xu <herbert@gondor.apana.org.au> +Cc: Stephen Hemminger <stephen@networkplumber.org> +Cc: "David S. Miller" <davem@davemloft.net> +Cc: Adam Baker <linux@baker-net.org.uk> +Signed-off-by: Cong Wang <amwang@redhat.com> +Acked-by: Herbert Xu <herbert@gondor.apana.org.au> +Signed-off-by: David S. Miller <davem@davemloft.net> +--- +(limited to 'net/bridge') + +diff --git a/net/bridge/br_multicast.c b/net/bridge/br_multicast.c +index 40bda80..37a4676 100644 +--- a/net/bridge/br_multicast.c ++++ b/net/bridge/br_multicast.c +@@ -1250,6 +1250,32 @@ static void br_multicast_leave_group(struct net_bridge *br, + if (!mp) + goto out; + ++ if (br->multicast_querier && ++ !timer_pending(&br->multicast_querier_timer)) { ++ __br_multicast_send_query(br, port, &mp->addr); ++ ++ time = jiffies + br->multicast_last_member_count * ++ br->multicast_last_member_interval; ++ mod_timer(port ? &port->multicast_query_timer : ++ &br->multicast_query_timer, time); ++ ++ for (p = mlock_dereference(mp->ports, br); ++ p != NULL; ++ p = mlock_dereference(p->next, br)) { ++ if (p->port != port) ++ continue; ++ ++ if (!hlist_unhashed(&p->mglist) && ++ (timer_pending(&p->timer) ? ++ time_after(p->timer.expires, time) : ++ try_to_del_timer_sync(&p->timer) >= 0)) { ++ mod_timer(&p->timer, time); ++ } ++ ++ break; ++ } ++ } ++ + if (port && (port->flags & BR_MULTICAST_FAST_LEAVE)) { + struct net_bridge_port_group __rcu **pp; + +-- +cgit v0.9.2 |