summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/os/zone.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/uts/common/os/zone.c')
-rw-r--r--usr/src/uts/common/os/zone.c59
1 files changed, 27 insertions, 32 deletions
diff --git a/usr/src/uts/common/os/zone.c b/usr/src/uts/common/os/zone.c
index c759f7e010..255937c694 100644
--- a/usr/src/uts/common/os/zone.c
+++ b/usr/src/uts/common/os/zone.c
@@ -6315,6 +6315,7 @@ zone_list(zoneid_t *zoneidlist, uint_t *numzones)
return (set_errno(EFAULT));
myzone = curproc->p_zone;
+ ASSERT(zonecount > 0);
if (myzone != global_zone) {
bslabel_t *mybslab;
@@ -6328,28 +6329,25 @@ zone_list(zoneid_t *zoneidlist, uint_t *numzones)
mutex_enter(&zonehash_lock);
real_nzones = zonecount;
domi_nzones = 0;
- if (real_nzones > 0) {
- zoneids = kmem_alloc(real_nzones *
- sizeof (zoneid_t), KM_SLEEP);
- mybslab = label2bslabel(myzone->zone_slabel);
- for (zone = list_head(&zone_active);
- zone != NULL;
- zone = list_next(&zone_active, zone)) {
- if (zone->zone_id == GLOBAL_ZONEID)
- continue;
- if (zone != myzone &&
- (zone->zone_flags & ZF_IS_SCRATCH))
- continue;
- /*
- * Note that a label always dominates
- * itself, so myzone is always included
- * in the list.
- */
- if (bldominates(mybslab,
- label2bslabel(zone->zone_slabel))) {
- zoneids[domi_nzones++] =
- zone->zone_id;
- }
+ zoneids = kmem_alloc(real_nzones *
+ sizeof (zoneid_t), KM_SLEEP);
+ mybslab = label2bslabel(myzone->zone_slabel);
+ for (zone = list_head(&zone_active);
+ zone != NULL;
+ zone = list_next(&zone_active, zone)) {
+ if (zone->zone_id == GLOBAL_ZONEID)
+ continue;
+ if (zone != myzone &&
+ (zone->zone_flags & ZF_IS_SCRATCH))
+ continue;
+ /*
+ * Note that a label always dominates
+ * itself, so myzone is always included
+ * in the list.
+ */
+ if (bldominates(mybslab,
+ label2bslabel(zone->zone_slabel))) {
+ zoneids[domi_nzones++] = zone->zone_id;
}
}
mutex_exit(&zonehash_lock);
@@ -6358,14 +6356,12 @@ zone_list(zoneid_t *zoneidlist, uint_t *numzones)
mutex_enter(&zonehash_lock);
real_nzones = zonecount;
domi_nzones = 0;
- if (real_nzones > 0) {
- zoneids = kmem_alloc(real_nzones * sizeof (zoneid_t),
- KM_SLEEP);
- for (zone = list_head(&zone_active); zone != NULL;
- zone = list_next(&zone_active, zone))
- zoneids[domi_nzones++] = zone->zone_id;
- ASSERT(domi_nzones == real_nzones);
- }
+ zoneids = kmem_alloc(real_nzones * sizeof (zoneid_t), KM_SLEEP);
+ for (zone = list_head(&zone_active); zone != NULL;
+ zone = list_next(&zone_active, zone))
+ zoneids[domi_nzones++] = zone->zone_id;
+
+ ASSERT(domi_nzones == real_nzones);
mutex_exit(&zonehash_lock);
}
@@ -6385,8 +6381,7 @@ zone_list(zoneid_t *zoneidlist, uint_t *numzones)
error = EFAULT;
}
- if (real_nzones > 0)
- kmem_free(zoneids, real_nzones * sizeof (zoneid_t));
+ kmem_free(zoneids, real_nzones * sizeof (zoneid_t));
if (error != 0)
return (set_errno(error));