datapath: Fix memory leak in port group.
authorBen Pfaff <blp@nicira.com>
Thu, 30 Apr 2009 19:57:20 +0000 (12:57 -0700)
committerBen Pfaff <blp@nicira.com>
Fri, 1 May 2009 17:10:28 +0000 (10:10 -0700)
When we destroy a datapath, we need to free its port groups also.

This is a fairly small memory leak: a few hundred bytes, at most, and
it only occurred each time a datapath was destroyed.

datapath/datapath.c

index 2be82df0b0d94e71f314f27e4d0ad3df4af19abc..f6ad8a697a6ca85592a607e299f53b70deaebc6a 100644 (file)
@@ -307,6 +307,13 @@ static void do_destroy_dp(struct datapath *dp)
        dp_table_destroy(dp->table, 1);
        for (i = 0; i < DP_N_QUEUES; i++)
                skb_queue_purge(&dp->queues[i]);
+       for (i = 0; i < DP_MAX_GROUPS; i++) {
+               struct odp_port_group *pg = dp->groups[i];
+               if (pg) {
+                       kfree(dp->groups[i]->ports);
+                       kfree(dp->groups[i]);
+               }
+       }
        free_percpu(dp->stats_percpu);
        kfree(dp);
        module_put(THIS_MODULE);