]> xenbits.xensource.com Git - people/dariof/xen.git/commitdiff
xen/gnttab: Clean up goto tangle in grant_table_init()
authorAndrew Cooper <andrew.cooper3@citrix.com>
Fri, 29 Sep 2017 12:29:21 +0000 (13:29 +0100)
committerAndrew Cooper <andrew.cooper3@citrix.com>
Fri, 29 Sep 2017 14:30:16 +0000 (15:30 +0100)
No functional change.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Roger Pau Monné <roger.pau@citrix.com>
Reviewed-by: Juergen Gross <jgross@suse.com>
xen/common/grant_table.c

index 71706f5cba8d9f7725d811c40f997d6c1988fa77..c36f0f868cea23ae61cc4a09f2c559666799bcf7 100644 (file)
@@ -1732,60 +1732,60 @@ active_alloc_failed:
 static int
 grant_table_init(struct domain *d, struct grant_table *gt)
 {
-    int ret;
+    int ret = -ENOMEM;
 
     grant_write_lock(gt);
 
     if ( gt->active )
     {
         ret = -EBUSY;
-        goto unlock;
+        goto out_no_cleanup;
     }
 
     /* Active grant table. */
     gt->active = xzalloc_array(struct active_grant_entry *,
                                max_nr_active_grant_frames);
     if ( gt->active == NULL )
-        goto no_mem;
+        goto out;
 
     /* Tracking of mapped foreign frames table */
     gt->maptrack = vzalloc(max_maptrack_frames * sizeof(*gt->maptrack));
     if ( gt->maptrack == NULL )
-        goto no_mem;
+        goto out;
 
     /* Shared grant table. */
     gt->shared_raw = xzalloc_array(void *, max_grant_frames);
     if ( gt->shared_raw == NULL )
-        goto no_mem;
+        goto out;
 
     /* Status pages for grant table - for version 2 */
     gt->status = xzalloc_array(grant_status_t *,
                                grant_to_status_frames(max_grant_frames));
     if ( gt->status == NULL )
-        goto no_mem;
+        goto out;
 
     ret = gnttab_init_arch(gt);
     if ( ret )
         goto out;
 
     /* gnttab_grow_table() allocates a min number of frames, so 0 is okay. */
-    if ( gnttab_grow_table(d, 0) )
-        goto unlock;
+    ret = gnttab_grow_table(d, 0) ? 0 : -ENOMEM;
 
- no_mem:
-    ret = -ENOMEM;
  out:
-    gnttab_destroy_arch(gt);
-    xfree(gt->status);
-    gt->status = NULL;
-    xfree(gt->shared_raw);
-    gt->shared_raw = NULL;
-    vfree(gt->maptrack);
-    gt->maptrack = NULL;
-    xfree(gt->active);
-    gt->active = NULL;
+    if ( ret )
+    {
+        gnttab_destroy_arch(gt);
+        xfree(gt->status);
+        gt->status = NULL;
+        xfree(gt->shared_raw);
+        gt->shared_raw = NULL;
+        vfree(gt->maptrack);
+        gt->maptrack = NULL;
+        xfree(gt->active);
+        gt->active = NULL;
+    }
 
unlock:
out_no_cleanup:
     grant_write_unlock(gt);
 
     return ret;