[ovs-dev] [PATCH 2/3] Delete groups in ofproto_destruct.

Jarno Rajahalme jrajahalme at nicira.com
Fri Aug 30 20:40:17 UTC 2013


Also, since all kinds of groups can refer to other groups, there is no
reason to delete indirect groups first.

Signed-off-by: Jarno Rajahalme <jrajahalme at nicira.com>
---
 ofproto/ofproto.c |   20 +++++++++-----------
 1 file changed, 9 insertions(+), 11 deletions(-)

diff --git a/ofproto/ofproto.c b/ofproto/ofproto.c
index 9a4eda9..0eb1ee7 100644
--- a/ofproto/ofproto.c
+++ b/ofproto/ofproto.c
@@ -1126,6 +1126,8 @@ ofproto_flush__(struct ofproto *ofproto)
     }
 }
 
+static void delete_group(struct ofproto *ofproto, uint32_t group_id);
+
 static void
 ofproto_destroy__(struct ofproto *ofproto)
 {
@@ -1139,6 +1141,9 @@ ofproto_destroy__(struct ofproto *ofproto)
         free(ofproto->meters);
     }
 
+    delete_group(ofproto, OFPG_ALL);
+    hmap_destroy(&ofproto->groups);
+
     connmgr_destroy(ofproto->connmgr);
 
     hmap_remove(&all_ofprotos, &ofproto->hmap_node);
@@ -4952,23 +4957,16 @@ delete_group__(struct ofgroup *ofgroup)
 
 /* Implements OFPGC_DELETE. */
 static void
-delete_group(struct ofproto *ofproto, const struct ofputil_group_mod *gm)
+delete_group(struct ofproto *ofproto, uint32_t group_id)
 {
-    if (gm->group_id == OFPG_ALL) {
+    if (group_id == OFPG_ALL) {
         struct ofgroup *ofgroup, *next;
 
-        /* Remove indirect groups first, to allow other groups to be removed
-         * successfully. */
-        HMAP_FOR_EACH_SAFE (ofgroup, next, hmap_node, &ofproto->groups) {
-            if (ofgroup->type == OFPGT11_INDIRECT) {
-                delete_group__(ofgroup);
-            }
-        }
         HMAP_FOR_EACH_SAFE (ofgroup, next, hmap_node, &ofproto->groups) {
             delete_group__(ofgroup);
         }
     } else {
-        struct ofgroup *ofgroup = ofproto_group_lookup(ofproto, gm->group_id);
+        struct ofgroup *ofgroup = ofproto_group_lookup(ofproto, group_id);
         if (ofgroup) {
             delete_group__(ofgroup);
         }
@@ -5000,7 +4998,7 @@ handle_group_mod(struct ofconn *ofconn, const struct ofp_header *oh)
         return modify_group(ofproto, &gm);
 
     case OFPGC11_DELETE:
-        delete_group(ofproto, &gm);
+        delete_group(ofproto, gm->group_id);
         return 0;
 
     default:
-- 
1.7.10.4




More information about the dev mailing list