Revert "net: Make accesses to ->br_port safe for sparse RCU"
authorPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Thu, 1 Jul 2010 19:45:34 +0000 (12:45 -0700)
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Thu, 1 Jul 2010 19:45:34 +0000 (12:45 -0700)
This reverts commit 81bdf5bd7349bd4523538cbd7878f334bc2bfe14, which is
obsoleted by commit f350a0a87374 from the net tree.

include/linux/if_bridge.h
net/bridge/br_fdb.c
net/bridge/br_private.h
net/bridge/netfilter/ebt_redirect.c
net/bridge/netfilter/ebt_ulog.c
net/bridge/netfilter/ebtables.c
net/netfilter/nfnetlink_log.c
net/netfilter/nfnetlink_queue.c

index d001d782922d635c3d8aa21b121199c82a582176..938b7e81df9527a96a8fca8035d6a08dc1769550 100644 (file)
@@ -101,9 +101,6 @@ struct __fdb_entry {
 
 #include <linux/netdevice.h>
 
-/* br_handle_frame_hook() needs the following forward declaration. */
-struct net_bridge_port;
-
 extern void brioctl_set(int (*ioctl_hook)(struct net *, unsigned int, void __user *));
 extern struct sk_buff *(*br_handle_frame_hook)(struct net_bridge_port *p,
                                               struct sk_buff *skb);
index 09c479e0562324796abed3e0358680b10311e31c..b01dde35a69ed3f1cecf30ebe604cc1808d72a69 100644 (file)
@@ -244,7 +244,7 @@ int br_fdb_test_addr(struct net_device *dev, unsigned char *addr)
                return 0;
 
        rcu_read_lock();
-       fdb = __br_fdb_get(br_port(dev)->br, addr);
+       fdb = __br_fdb_get(dev->br_port->br, addr);
        ret = fdb && fdb->dst->dev != dev &&
                fdb->dst->state == BR_STATE_FORWARDING;
        rcu_read_unlock();
index 3255188355b570806ac10da154336b743cf56940..0f4a74bc6a9b58e06b34194117577d7817b8be01 100644 (file)
@@ -268,11 +268,6 @@ static inline int br_is_root_bridge(const struct net_bridge *br)
        return !memcmp(&br->bridge_id, &br->designated_root, 8);
 }
 
-static inline struct net_bridge_port *br_port(const struct net_device *dev)
-{
-       return rcu_dereference(dev->br_port);
-}
-
 /* br_device.c */
 extern void br_dev_setup(struct net_device *dev);
 extern netdev_tx_t br_dev_xmit(struct sk_buff *skb,
index a39df0ae0f818b950cad7a82aab0d2de6b6842d5..9e19166ba4534321ad2a9139960fd247dd958e36 100644 (file)
@@ -25,7 +25,7 @@ ebt_redirect_tg(struct sk_buff *skb, const struct xt_action_param *par)
 
        if (par->hooknum != NF_BR_BROUTING)
                memcpy(eth_hdr(skb)->h_dest,
-                      br_port(par->in)->br->dev->dev_addr, ETH_ALEN);
+                      par->in->br_port->br->dev->dev_addr, ETH_ALEN);
        else
                memcpy(eth_hdr(skb)->h_dest, par->in->dev_addr, ETH_ALEN);
        skb->pkt_type = PACKET_HOST;
index 5a4996bbb090c32e9688eb53322d94e0dd246e2b..ae3c7cef1484ff16c0a5ff187e23ea4c799de775 100644 (file)
@@ -178,7 +178,7 @@ static void ebt_ulog_packet(unsigned int hooknr, const struct sk_buff *skb,
                strcpy(pm->physindev, in->name);
                /* If in isn't a bridge, then physindev==indev */
                if (in->br_port)
-                       strcpy(pm->indev, br_port(in)->br->dev->name);
+                       strcpy(pm->indev, in->br_port->br->dev->name);
                else
                        strcpy(pm->indev, in->name);
        } else
@@ -187,7 +187,7 @@ static void ebt_ulog_packet(unsigned int hooknr, const struct sk_buff *skb,
        if (out) {
                /* If out exists, then out is a bridge port */
                strcpy(pm->physoutdev, out->name);
-               strcpy(pm->outdev, br_port(out)->br->dev->name);
+               strcpy(pm->outdev, out->br_port->br->dev->name);
        } else
                pm->outdev[0] = pm->physoutdev[0] = '\0';
 
index 4c2aab8cbfc713a0b11768fdd6e1b5f904a7dbae..59ca00e40dec2401b483bad4a7799775766e9f0d 100644 (file)
@@ -141,10 +141,10 @@ ebt_basic_match(const struct ebt_entry *e, const struct ethhdr *h,
        if (FWINV2(ebt_dev_check(e->out, out), EBT_IOUT))
                return 1;
        if ((!in || !in->br_port) ? 0 : FWINV2(ebt_dev_check(
-          e->logical_in, br_port(in)->br->dev), EBT_ILOGICALIN))
+          e->logical_in, in->br_port->br->dev), EBT_ILOGICALIN))
                return 1;
        if ((!out || !out->br_port) ? 0 : FWINV2(ebt_dev_check(
-          e->logical_out, br_port(out)->br->dev), EBT_ILOGICALOUT))
+          e->logical_out, out->br_port->br->dev), EBT_ILOGICALOUT))
                return 1;
 
        if (e->bitmask & EBT_SOURCEMAC) {
index 78957cfa3bdd2919573311e4fb956c1bd04edfc6..fc9a211e629e499bbc15eed8f593157a284cc1b7 100644 (file)
@@ -404,7 +404,7 @@ __build_packet_message(struct nfulnl_instance *inst,
                                     htonl(indev->ifindex));
                        /* this is the bridge group "brX" */
                        NLA_PUT_BE32(inst->skb, NFULA_IFINDEX_INDEV,
-                                    htonl(br_port(indev)->br->dev->ifindex));
+                                    htonl(indev->br_port->br->dev->ifindex));
                } else {
                        /* Case 2: indev is bridge group, we need to look for
                         * physical device (when called from ipv4) */
@@ -431,7 +431,7 @@ __build_packet_message(struct nfulnl_instance *inst,
                                     htonl(outdev->ifindex));
                        /* this is the bridge group "brX" */
                        NLA_PUT_BE32(inst->skb, NFULA_IFINDEX_OUTDEV,
-                                    htonl(br_port(outdev)->br->dev->ifindex));
+                                    htonl(outdev->br_port->br->dev->ifindex));
                } else {
                        /* Case 2: indev is a bridge group, we need to look
                         * for physical device (when called from ipv4) */
index c3c17498298e8ac62664184dcf0cc7d4861dd429..12e1ab37fcd8f400151f8bced1b13a873b328e77 100644 (file)
@@ -297,7 +297,7 @@ nfqnl_build_packet_message(struct nfqnl_instance *queue,
                                     htonl(indev->ifindex));
                        /* this is the bridge group "brX" */
                        NLA_PUT_BE32(skb, NFQA_IFINDEX_INDEV,
-                                    htonl(br_port(indev)->br->dev->ifindex));
+                                    htonl(indev->br_port->br->dev->ifindex));
                } else {
                        /* Case 2: indev is bridge group, we need to look for
                         * physical device (when called from ipv4) */
@@ -322,7 +322,7 @@ nfqnl_build_packet_message(struct nfqnl_instance *queue,
                                     htonl(outdev->ifindex));
                        /* this is the bridge group "brX" */
                        NLA_PUT_BE32(skb, NFQA_IFINDEX_OUTDEV,
-                                    htonl(br_port(outdev)->br->dev->ifindex));
+                                    htonl(outdev->br_port->br->dev->ifindex));
                } else {
                        /* Case 2: outdev is bridge group, we need to look for
                         * physical output device (when called from ipv4) */