From: Jesse Gross Date: Thu, 9 Dec 2010 03:28:32 +0000 (-0800) Subject: datapath: Take advantage of IFF_OVS_DATAPATH. X-Git-Tag: v1.1.0~656 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=055dae4f7f6d3316ca326736f7b731db1bde0f09;p=sliver-openvswitch.git datapath: Take advantage of IFF_OVS_DATAPATH. Starting in 2.6.37 we have our own unique identifier to be able to find ports attached to OVS. Take advantage of it to avoid ugly workarounds. Signed-off-by: Jesse Gross Acked-by: Ben Pfaff --- diff --git a/datapath/vport-netdev.c b/datapath/vport-netdev.c index dfeccac9c..88274732e 100644 --- a/datapath/vport-netdev.c +++ b/datapath/vport-netdev.c @@ -273,15 +273,15 @@ static int netdev_send(struct vport *vport, struct sk_buff *skb) /* Returns null if this device is not attached to a datapath. */ struct vport *netdev_get_vport(struct net_device *dev) { -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36) - /* XXX: The bridge code may have registered the data. - * So check that the handler pointer is the datapath's. - * Once the merge is done and IFF_OVS_DATAPATH stops - * being the same value as IFF_BRIDGE_PORT the check can - * simply be netdev_vport->dev->priv_flags & IFF_OVS_DATAPATH. */ - if (rcu_dereference(dev->rx_handler) != netdev_frame_hook) +#ifdef IFF_BRIDGE_PORT +#if IFF_BRIDGE_PORT != IFF_OVS_DATAPATH + if (likely(dev->priv_flags & IFF_OVS_DATAPATH)) +#else + if (likely(rcu_access_pointer(dev->rx_handler) == netdev_frame_hook)) +#endif + return (struct vport *)rcu_dereference(dev->rx_handler_data); + else return NULL; - return (struct vport *)rcu_dereference(dev->rx_handler_data); #else return (struct vport *)rcu_dereference(dev->br_port); #endif