diff options
| author | Jerry Jelinek <jerry.jelinek@joyent.com> | 2014-11-13 10:33:48 -0800 |
|---|---|---|
| committer | Robert Mustacchi <rm@joyent.com> | 2014-12-05 14:57:33 -0800 |
| commit | bafd1f1462c49949e0251d74b4fbfa24d29bc79a (patch) | |
| tree | 03049033757285b88f8fb6ace7da16e061199c5c /usr/src/uts/common/os | |
| parent | 156d6b3a5d0ba06e75f7973c6ba994107ae8df0e (diff) | |
| download | illumos-joyent-bafd1f1462c49949e0251d74b4fbfa24d29bc79a.tar.gz | |
5330 zone brands could control init restart behavior
Reviewed by: Igor Kozhukhov <ikozhukhov@gmail.com>
Reviewed by: Gordon Ross <gwr@nexenta.com>
Reviewed by: Josef 'Jeff' Sipek <josef.sipek@nexenta.com>
Reviewed by: Richard Lowe <richlowe@richlowe.net>
Approved by: Dan McDonald <danmcd@omniti.com>
Diffstat (limited to 'usr/src/uts/common/os')
| -rw-r--r-- | usr/src/uts/common/os/exit.c | 15 | ||||
| -rw-r--r-- | usr/src/uts/common/os/zone.c | 4 |
2 files changed, 15 insertions, 4 deletions
diff --git a/usr/src/uts/common/os/exit.c b/usr/src/uts/common/os/exit.c index 21360145bc..c5d54b5978 100644 --- a/usr/src/uts/common/os/exit.c +++ b/usr/src/uts/common/os/exit.c @@ -21,6 +21,7 @@ /* * Copyright (c) 1988, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, Joyent, Inc. All rights reserved. */ /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */ @@ -388,10 +389,16 @@ proc_exit(int why, int what) if (p->p_pid == z->zone_proc_initpid) { if (z->zone_boot_err == 0 && zone_status_get(z) < ZONE_IS_SHUTTING_DOWN && - zone_status_get(global_zone) < ZONE_IS_SHUTTING_DOWN && - z->zone_restart_init == B_TRUE && - restart_init(what, why) == 0) - return (0); + zone_status_get(global_zone) < ZONE_IS_SHUTTING_DOWN) { + if (z->zone_restart_init == B_TRUE) { + if (restart_init(what, why) == 0) + return (0); + } else { + (void) zone_kadmin(A_SHUTDOWN, AD_HALT, NULL, + CRED()); + } + } + /* * Since we didn't or couldn't restart init, we clear * the zone's init state and proceed with exit diff --git a/usr/src/uts/common/os/zone.c b/usr/src/uts/common/os/zone.c index 884d52b224..5d146c03b5 100644 --- a/usr/src/uts/common/os/zone.c +++ b/usr/src/uts/common/os/zone.c @@ -5525,6 +5525,10 @@ zone_setattr(zoneid_t zoneid, int attr, void *buf, size_t bufsize) case ZONE_ATTR_INITNAME: err = zone_set_initname(zone, (const char *)buf); break; + case ZONE_ATTR_INITNORESTART: + zone->zone_restart_init = B_FALSE; + err = 0; + break; case ZONE_ATTR_BOOTARGS: err = zone_set_bootargs(zone, (const char *)buf); break; |
