From: Tonghao Zhang <xiangxia.m....@gmail.com>

use the specified functions to init resource.

Signed-off-by: Tonghao Zhang <xiangxia.m....@gmail.com>
Tested-by: Greg Rose <gvrose8...@gmail.com>
---
 net/openvswitch/datapath.c | 60 +++++++++++++++++++++++++++++-----------------
 1 file changed, 38 insertions(+), 22 deletions(-)

diff --git a/net/openvswitch/datapath.c b/net/openvswitch/datapath.c
index aeb76e4..4d48e48 100644
--- a/net/openvswitch/datapath.c
+++ b/net/openvswitch/datapath.c
@@ -1576,6 +1576,31 @@ static int ovs_dp_change(struct datapath *dp, struct 
nlattr *a[])
        return 0;
 }
 
+static int ovs_dp_stats_init(struct datapath *dp)
+{
+       dp->stats_percpu = netdev_alloc_pcpu_stats(struct dp_stats_percpu);
+       if (!dp->stats_percpu)
+               return -ENOMEM;
+
+       return 0;
+}
+
+static int ovs_dp_vport_init(struct datapath *dp)
+{
+       int i;
+
+       dp->ports = kmalloc_array(DP_VPORT_HASH_BUCKETS,
+                                 sizeof(struct hlist_head),
+                                 GFP_KERNEL);
+       if (!dp->ports)
+               return -ENOMEM;
+
+       for (i = 0; i < DP_VPORT_HASH_BUCKETS; i++)
+               INIT_HLIST_HEAD(&dp->ports[i]);
+
+       return 0;
+}
+
 static int ovs_dp_cmd_new(struct sk_buff *skb, struct genl_info *info)
 {
        struct nlattr **a = info->attrs;
@@ -1584,7 +1609,7 @@ static int ovs_dp_cmd_new(struct sk_buff *skb, struct 
genl_info *info)
        struct datapath *dp;
        struct vport *vport;
        struct ovs_net *ovs_net;
-       int err, i;
+       int err;
 
        err = -EINVAL;
        if (!a[OVS_DP_ATTR_NAME] || !a[OVS_DP_ATTR_UPCALL_PID])
@@ -1597,35 +1622,26 @@ static int ovs_dp_cmd_new(struct sk_buff *skb, struct 
genl_info *info)
        err = -ENOMEM;
        dp = kzalloc(sizeof(*dp), GFP_KERNEL);
        if (dp == NULL)
-               goto err_free_reply;
+               goto err_destroy_reply;
 
        ovs_dp_set_net(dp, sock_net(skb->sk));
 
        /* Allocate table. */
        err = ovs_flow_tbl_init(&dp->table);
        if (err)
-               goto err_free_dp;
+               goto err_destroy_dp;
 
-       dp->stats_percpu = netdev_alloc_pcpu_stats(struct dp_stats_percpu);
-       if (!dp->stats_percpu) {
-               err = -ENOMEM;
+       err = ovs_dp_stats_init(dp);
+       if (err)
                goto err_destroy_table;
-       }
 
-       dp->ports = kmalloc_array(DP_VPORT_HASH_BUCKETS,
-                                 sizeof(struct hlist_head),
-                                 GFP_KERNEL);
-       if (!dp->ports) {
-               err = -ENOMEM;
-               goto err_destroy_percpu;
-       }
-
-       for (i = 0; i < DP_VPORT_HASH_BUCKETS; i++)
-               INIT_HLIST_HEAD(&dp->ports[i]);
+       err = ovs_dp_vport_init(dp);
+       if (err)
+               goto err_destroy_stats;
 
        err = ovs_meters_init(dp);
        if (err)
-               goto err_destroy_ports_array;
+               goto err_destroy_ports;
 
        /* Set up our datapath device. */
        parms.name = nla_data(a[OVS_DP_ATTR_NAME]);
@@ -1675,15 +1691,15 @@ static int ovs_dp_cmd_new(struct sk_buff *skb, struct 
genl_info *info)
 
 err_destroy_meters:
        ovs_meters_exit(dp);
-err_destroy_ports_array:
+err_destroy_ports:
        kfree(dp->ports);
-err_destroy_percpu:
+err_destroy_stats:
        free_percpu(dp->stats_percpu);
 err_destroy_table:
        ovs_flow_tbl_destroy(&dp->table);
-err_free_dp:
+err_destroy_dp:
        kfree(dp);
-err_free_reply:
+err_destroy_reply:
        kfree_skb(reply);
 err:
        return err;
-- 
1.8.3.1

_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to