Commit bc261db7 authored by Stephen Hemminger's avatar Stephen Hemminger Committed by David S. Miller

[BRIDGE]: Inline and _rcu change.

* Need _rcu on the list_for_each_entry in br_get_port because called in
  read path for some ioctls
* Move two small functions is_root_bridge and is_designated_port into
  inlines because they are so short.
parent 64e535ee
...@@ -116,6 +116,13 @@ struct net_bridge ...@@ -116,6 +116,13 @@ struct net_bridge
extern struct notifier_block br_device_notifier; extern struct notifier_block br_device_notifier;
extern unsigned char bridge_ula[6]; extern unsigned char bridge_ula[6];
/* called under bridge lock */
static inline int br_is_root_bridge(const struct net_bridge *br)
{
return !memcmp(&br->bridge_id, &br->designated_root, 8);
}
/* br_device.c */ /* br_device.c */
extern void br_dev_setup(struct net_device *dev); extern void br_dev_setup(struct net_device *dev);
extern int br_dev_xmit(struct sk_buff *skb, struct net_device *dev); extern int br_dev_xmit(struct sk_buff *skb, struct net_device *dev);
...@@ -182,7 +189,6 @@ extern int br_netfilter_init(void); ...@@ -182,7 +189,6 @@ extern int br_netfilter_init(void);
extern void br_netfilter_fini(void); extern void br_netfilter_fini(void);
/* br_stp.c */ /* br_stp.c */
extern int br_is_root_bridge(struct net_bridge *br);
extern struct net_bridge_port *br_get_port(struct net_bridge *br, extern struct net_bridge_port *br_get_port(struct net_bridge *br,
int port_no); int port_no);
extern void br_init_port(struct net_bridge_port *p); extern void br_init_port(struct net_bridge_port *p);
......
...@@ -32,12 +32,18 @@ struct br_config_bpdu ...@@ -32,12 +32,18 @@ struct br_config_bpdu
int forward_delay; int forward_delay;
}; };
/* called under bridge lock */
static inline int br_is_designated_port(const struct net_bridge_port *p)
{
return !memcmp(&p->designated_bridge, &p->br->bridge_id, 8) &&
(p->designated_port == p->port_id);
}
/* br_stp.c */ /* br_stp.c */
extern void br_become_root_bridge(struct net_bridge *br); extern void br_become_root_bridge(struct net_bridge *br);
extern void br_config_bpdu_generation(struct net_bridge *); extern void br_config_bpdu_generation(struct net_bridge *);
extern void br_configuration_update(struct net_bridge *); extern void br_configuration_update(struct net_bridge *);
extern int br_is_designated_port(struct net_bridge_port *p);
extern int br_is_root_bridge(struct net_bridge *br);
extern void br_port_state_selection(struct net_bridge *); extern void br_port_state_selection(struct net_bridge *);
extern void br_received_config_bpdu(struct net_bridge_port *p, struct br_config_bpdu *bpdu); extern void br_received_config_bpdu(struct net_bridge_port *p, struct br_config_bpdu *bpdu);
extern void br_received_tcn_bpdu(struct net_bridge_port *p); extern void br_received_tcn_bpdu(struct net_bridge_port *p);
......
...@@ -20,27 +20,12 @@ ...@@ -20,27 +20,12 @@
#include "br_private.h" #include "br_private.h"
#include "br_private_stp.h" #include "br_private_stp.h"
/* called under bridge lock */
int br_is_root_bridge(struct net_bridge *br)
{
return !memcmp(&br->bridge_id, &br->designated_root, 8);
}
/* called under bridge lock */
int br_is_designated_port(struct net_bridge_port *p)
{
return !memcmp(&p->designated_bridge, &p->br->bridge_id, 8) &&
(p->designated_port == p->port_id);
}
/* called under bridge lock */ /* called under bridge lock */
struct net_bridge_port *br_get_port(struct net_bridge *br, int port_no) struct net_bridge_port *br_get_port(struct net_bridge *br, int port_no)
{ {
struct net_bridge_port *p; struct net_bridge_port *p;
list_for_each_entry(p, &br->port_list, list) { list_for_each_entry_rcu(p, &br->port_list, list) {
if (p->port_no == port_no) if (p->port_no == port_no)
return p; return p;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment