brcompat: Fix netdevice refcount in non-2.6.18 when sysfs is available.
authorBen Pfaff <blp@nicira.com>
Sun, 15 Mar 2009 00:22:09 +0000 (17:22 -0700)
committerBen Pfaff <blp@nicira.com>
Sun, 15 Mar 2009 00:22:09 +0000 (17:22 -0700)
When sysfs is enabled, brcompat is responsible for releasing the netdevice
reference and freeing the net_bridge_port in brc_sysfs_del_if().  However,
when we're not building against 2.6.18, it was stubbed out to a function
that did nothing.

datapath/brc_sysfs.h
datapath/brc_sysfs_dp.c

index fa972b0026b7f1f2929909c39532b0279f2f0c77..8a550e3c1b3c01529762c7085cacaf510c48d0b2 100644 (file)
@@ -4,7 +4,6 @@
 struct datapath;
 
 #include <linux/version.h>
-#if LINUX_VERSION_CODE == KERNEL_VERSION(2,6,18)
 /* brc_sysfs_dp.c */
 int brc_sysfs_add_dp(struct datapath *dp);
 int brc_sysfs_del_dp(struct datapath *dp);
@@ -12,12 +11,6 @@ int brc_sysfs_del_dp(struct datapath *dp);
 /* brc_sysfs_if.c */
 int brc_sysfs_add_if(struct net_bridge_port *p);
 int brc_sysfs_del_if(struct net_bridge_port *p);
-#else
-static inline int brc_sysfs_add_dp(struct datapath *dp) { return 0; }
-static inline int brc_sysfs_del_dp(struct datapath *dp) { return 0; }
-static inline int brc_sysfs_add_if(struct net_bridge_port *p) { return 0; }
-static inline int brc_sysfs_del_if(struct net_bridge_port *p) { return 0; }
-#endif
 
 #endif /* brc_sysfs.h */
 
index b1b27ed1f09474841aa0cae7df1e4ad2390ae305..a1b3c8e33239badfa2b2df17af5ff95167f61cfa 100644 (file)
@@ -1,5 +1,4 @@
 #include <linux/version.h>
-#if LINUX_VERSION_CODE == KERNEL_VERSION(2,6,18)
 
 /*
  *     Sysfs attributes of bridge for OpenFlow
@@ -21,6 +20,7 @@
 #include "datapath.h"
 #include "dp_dev.h"
 
+#if LINUX_VERSION_CODE == KERNEL_VERSION(2,6,18)
 #define to_dev(obj)    container_of(obj, struct device, kobj)
 
 /* Hack to attempt to build on more platforms. */
@@ -516,4 +516,14 @@ int brc_sysfs_del_dp(struct datapath *dp)
 
        return 0;
 }
-#endif /* Only support 2.6.18 */
+#else
+int brc_sysfs_add_dp(struct datapath *dp) { return 0; }
+int brc_sysfs_del_dp(struct datapath *dp) { return 0; }
+int brc_sysfs_add_if(struct net_bridge_port *p) { return 0; }
+int brc_sysfs_del_if(struct net_bridge_port *p)
+{
+       dev_put(p->dev);
+       kfree(p);
+       return 0;
+}
+#endif