aboutsummaryrefslogtreecommitdiffstats
path: root/net/bridge/br_input.c
diff options
context:
space:
mode:
authorstephen hemminger <shemminger@vyatta.com>2010-07-27 04:26:30 -0400
committerDavid S. Miller <davem@davemloft.net>2010-07-28 13:50:55 -0400
commiteeaf61d8891f9c9ed12c1a667e72bf83f0857954 (patch)
treedaeda447800df1349559268d8f6e79c90dcd22dd /net/bridge/br_input.c
parentff847ac2d3e90edd94674c28bade25ae1e6a2e49 (diff)
bridge: add rcu_read_lock on transmit
Long ago, when bridge was converted to RCU, rcu lock was equivalent to having preempt disabled. RCU has changed a lot since then and bridge code was still assuming the since transmit was called with bottom half disabled, it was RCU safe. Signed-off-by: Stephen Hemminger <shemminger@vyatta.com> Tested-by: Johannes Berg <johannes@sipsolutions.net> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/bridge/br_input.c')
-rw-r--r--net/bridge/br_input.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/net/bridge/br_input.c b/net/bridge/br_input.c
index d36e700f7a26..114365c9eb1c 100644
--- a/net/bridge/br_input.c
+++ b/net/bridge/br_input.c
@@ -37,7 +37,7 @@ static int br_pass_frame_up(struct sk_buff *skb)
37 netif_receive_skb); 37 netif_receive_skb);
38} 38}
39 39
40/* note: already called with rcu_read_lock (preempt_disabled) */ 40/* note: already called with rcu_read_lock */
41int br_handle_frame_finish(struct sk_buff *skb) 41int br_handle_frame_finish(struct sk_buff *skb)
42{ 42{
43 const unsigned char *dest = eth_hdr(skb)->h_dest; 43 const unsigned char *dest = eth_hdr(skb)->h_dest;
@@ -108,7 +108,7 @@ drop:
108 goto out; 108 goto out;
109} 109}
110 110
111/* note: already called with rcu_read_lock (preempt_disabled) */ 111/* note: already called with rcu_read_lock */
112static int br_handle_local_finish(struct sk_buff *skb) 112static int br_handle_local_finish(struct sk_buff *skb)
113{ 113{
114 struct net_bridge_port *p = rcu_dereference(skb->dev->br_port); 114 struct net_bridge_port *p = rcu_dereference(skb->dev->br_port);
@@ -133,7 +133,7 @@ static inline int is_link_local(const unsigned char *dest)
133/* 133/*
134 * Called via br_handle_frame_hook. 134 * Called via br_handle_frame_hook.
135 * Return NULL if skb is handled 135 * Return NULL if skb is handled
136 * note: already called with rcu_read_lock (preempt_disabled) 136 * note: already called with rcu_read_lock
137 */ 137 */
138struct sk_buff *br_handle_frame(struct net_bridge_port *p, struct sk_buff *skb) 138struct sk_buff *br_handle_frame(struct net_bridge_port *p, struct sk_buff *skb)
139{ 139{