]> rtime.felk.cvut.cz Git - lisovros/linux_canprio.git/blobdiff - net/bridge/br_netfilter.c
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/kaber/nf-next-2.6
[lisovros/linux_canprio.git] / net / bridge / br_netfilter.c
index f1d49ae234117b9fa0b933391ffd036257eeb88f..9fdf1b116bd733ad764d3aff542a8ea6768597ff 100644 (file)
@@ -130,16 +130,17 @@ void br_netfilter_rtable_init(struct net_bridge *br)
 
 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)
@@ -554,7 +555,7 @@ static unsigned int br_nf_pre_routing(unsigned int hook, 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;
@@ -726,7 +727,7 @@ static unsigned int br_nf_forward_arp(unsigned int hook, struct sk_buff *skb,
        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;