static inline struct rtable *bridge_parent_rtable(const struct net_device *dev)
{
- struct net_bridge_port *port = rcu_dereference(dev->br_port);
-
- return port ? &port->br->fake_rtable : NULL;
+ if (!br_port_exists(dev))
+ return NULL;
+ return &br_port_get_rcu(dev)->br->fake_rtable;
}
static inline struct net_device *bridge_parent(const struct net_device *dev)
{
- struct net_bridge_port *port = rcu_dereference(dev->br_port);
+ if (!br_port_exists(dev))
+ return NULL;
- return port ? port->br->dev : NULL;
+ return br_port_get_rcu(dev)->br->dev;
}
static inline struct nf_bridge_info *nf_bridge_alloc(struct sk_buff *skb)
if (unlikely(!pskb_may_pull(skb, len)))
goto out;
- p = rcu_dereference(in->br_port);
+ p = br_port_get_rcu(in);
if (p == NULL)
goto out;
br = p->br;
struct net_bridge *br;
struct net_device **d = (struct net_device **)(skb->cb);
- p = rcu_dereference(out->br_port);
+ p = br_port_get_rcu(out);
if (p == NULL)
return NF_ACCEPT;
br = p->br;