summaryrefslogtreecommitdiff
path: root/usr/src/cmd
diff options
context:
space:
mode:
authorJerry Jelinek <jerry.jelinek@joyent.com>2011-05-10 06:01:20 -0700
committerJerry Jelinek <jerry.jelinek@joyent.com>2011-05-10 06:01:20 -0700
commitb2cc8bf6a562b0c924b45a09d8d8754403037810 (patch)
tree13986a3a14245cf553ec356368cecb50e47727e5 /usr/src/cmd
parent9230f57fd5dc4b0898a592a83cfa3f7b18b26718 (diff)
downloadillumos-joyent-b2cc8bf6a562b0c924b45a09d8d8754403037810.tar.gz
OS-406 dlmgmtd deadlock when shutting down large numbers of zones
Diffstat (limited to 'usr/src/cmd')
-rw-r--r--usr/src/cmd/dladm/dladm.c6
-rw-r--r--usr/src/cmd/zoneadmd/vplat.c5
2 files changed, 6 insertions, 5 deletions
diff --git a/usr/src/cmd/dladm/dladm.c b/usr/src/cmd/dladm/dladm.c
index c368a8c21b..cc9bd0097a 100644
--- a/usr/src/cmd/dladm/dladm.c
+++ b/usr/src/cmd/dladm/dladm.c
@@ -4754,6 +4754,12 @@ do_create_vnic(int argc, char *argv[], const char *use)
if ((flags & DLADM_OPT_FORCE) != 0 && vid == 0)
die("-f option can only be used with -v");
+ /*
+ * If creating a transient VNIC for a zone, mark it in the kernel.
+ */
+ if (strstr(propstr, "zone=") != NULL && !(flags & DLADM_OPT_PERSIST))
+ flags |= DLADM_OPT_TRANSIENT;
+
if (mac_prefix_len != 0 && mac_addr_type != VNIC_MAC_ADDR_TYPE_RANDOM &&
mac_addr_type != VNIC_MAC_ADDR_TYPE_FIXED)
usage();
diff --git a/usr/src/cmd/zoneadmd/vplat.c b/usr/src/cmd/zoneadmd/vplat.c
index 54aa111bf3..d2b8c79964 100644
--- a/usr/src/cmd/zoneadmd/vplat.c
+++ b/usr/src/cmd/zoneadmd/vplat.c
@@ -5191,11 +5191,6 @@ vplat_teardown(zlog_t *zlogp, boolean_t unmount_cmd, boolean_t rebooting,
}
break;
case ZS_EXCLUSIVE:
- if (unconfigure_exclusive_network_interfaces(zlogp,
- zoneid) != 0) {
- zerror(zlogp, B_FALSE, "unable to unconfigure "
- "network interfaces in zone");
- }
status = dladm_zone_halt(dld_handle, zoneid);
if (status != DLADM_STATUS_OK) {
zerror(zlogp, B_FALSE, "unable to notify "