[ovs-dev] [PATCH] datapath: internal-dev: Disable rtnl_link_ops register under linux < 3.17
Zhang Dongya
fortitude.zhang at gmail.com
Wed Dec 14 03:44:25 UTC 2016
From: "fortitude.zhang" <fortitude.zhang at gmail.com>
Under linux < 3.17, b0ab2fabb5b91da99c189db02e91ae10bc8355c5 is not introduced,
which allow internal-dev created by openvswitch datapath deleted by using rtnl
interface, this causes data related to internal-dev not freed and stops datapath
working correctly.
Signed-off-by: fortitude.zhang <fortitude.zhang at gmail.com>
---
datapath/vport-internal_dev.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/datapath/vport-internal_dev.c b/datapath/vport-internal_dev.c
index 482af37..7650561 100644
--- a/datapath/vport-internal_dev.c
+++ b/datapath/vport-internal_dev.c
@@ -157,9 +157,11 @@ static const struct net_device_ops internal_dev_netdev_ops = {
#endif
};
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,17,0)
static struct rtnl_link_ops internal_dev_link_ops __read_mostly = {
.kind = "openvswitch",
};
+#endif
static void do_setup(struct net_device *netdev)
{
@@ -172,7 +174,9 @@ static void do_setup(struct net_device *netdev)
IFF_PHONY_HEADROOM | IFF_NO_QUEUE;
netdev->destructor = internal_dev_destructor;
netdev->ethtool_ops = &internal_dev_ethtool_ops;
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,17,0)
netdev->rtnl_link_ops = &internal_dev_link_ops;
+#endif
#ifndef HAVE_IFF_NO_QUEUE
netdev->tx_queue_len = 0;
@@ -312,13 +316,17 @@ int ovs_internal_dev_rtnl_link_register(void)
{
int err;
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,17,0)
err = rtnl_link_register(&internal_dev_link_ops);
if (err < 0)
return err;
+#endif
err = ovs_vport_ops_register(&ovs_internal_vport_ops);
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,17,0)
if (err < 0)
rtnl_link_unregister(&internal_dev_link_ops);
+#endif
return err;
}
@@ -326,5 +334,7 @@ int ovs_internal_dev_rtnl_link_register(void)
void ovs_internal_dev_rtnl_link_unregister(void)
{
ovs_vport_ops_unregister(&ovs_internal_vport_ops);
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,17,0)
rtnl_link_unregister(&internal_dev_link_ops);
+#endif
}
--
2.10.2
More information about the dev
mailing list