diff options
Diffstat (limited to 'usr/src/uts/common/os/zone.c')
-rw-r--r-- | usr/src/uts/common/os/zone.c | 59 |
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)); |