diff options
author | stephen hemminger <shemminger@vyatta.com> | 2010-07-27 04:26:30 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-07-28 13:50:55 -0400 |
commit | eeaf61d8891f9c9ed12c1a667e72bf83f0857954 (patch) | |
tree | daeda447800df1349559268d8f6e79c90dcd22dd /net/bridge/br_input.c | |
parent | ff847ac2d3e90edd94674c28bade25ae1e6a2e49 (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.c | 6 |
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 */ |
41 | int br_handle_frame_finish(struct sk_buff *skb) | 41 | int 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 */ |
112 | static int br_handle_local_finish(struct sk_buff *skb) | 112 | static 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 | */ |
138 | struct sk_buff *br_handle_frame(struct net_bridge_port *p, struct sk_buff *skb) | 138 | struct sk_buff *br_handle_frame(struct net_bridge_port *p, struct sk_buff *skb) |
139 | { | 139 | { |