Print this page
patch zone-auto-create-be
@@ -23,10 +23,11 @@
* Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
*/
/*
* Copyright 2013 Nexenta Systems, Inc. All rights reserved.
* Copyright 2015 EveryCity Ltd.
+ * Copyright 2015 Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
*/
/*
* System includes
*/
@@ -2340,33 +2341,34 @@
* Private
*/
static int
be_mount_zones(zfs_handle_t *be_zhp, be_mount_data_t *md)
{
- zoneBrandList_t *brands = NULL;
zoneList_t zlst = NULL;
char *zonename = NULL;
char *zonepath = NULL;
char *zonepath_ds = NULL;
int k;
int ret = BE_SUCCESS;
+ boolean_t auto_create;
z_set_zone_root(md->altroot);
- if ((brands = be_get_supported_brandlist()) == NULL) {
- be_print_err(gettext("be_mount_zones: "
- "no supported brands\n"));
+ zlst = z_get_nonglobal_branded_zone_list();
+ if (zlst == NULL)
return (BE_SUCCESS);
- }
- zlst = z_get_nonglobal_zone_list_by_brand(brands);
- if (zlst == NULL) {
- z_free_brand_list(brands);
- return (BE_SUCCESS);
+ for (k = 0; (zonename = z_zlist_get_zonename(zlst, k)) != NULL; k++) {
+ if (z_zlist_is_zone_auto_create_be(zlst, k, &auto_create) != 0) {
+ be_print_err(gettext("be_mount_zones: failed to"
+ " get auto-create-be brand property\n"));
+ goto done;
}
- for (k = 0; (zonename = z_zlist_get_zonename(zlst, k)) != NULL; k++) {
+ if (!auto_create)
+ continue;
+
if (z_zlist_get_current_state(zlst, k) ==
ZONE_STATE_INSTALLED) {
zonepath = z_zlist_get_zonepath(zlst, k);
/*
@@ -2415,11 +2417,10 @@
}
}
}
done:
- z_free_brand_list(brands);
z_free_zone_list(zlst);
/*
* libinstzones caches mnttab and uses cached version for resolving lofs
* mounts when we call z_resolve_lofs. It creates the cached version
* when the first call to z_resolve_lofs happens. So, library's cached
@@ -2446,34 +2447,35 @@
* Private
*/
static int
be_unmount_zones(be_unmount_data_t *ud)
{
- zoneBrandList_t *brands = NULL;
zoneList_t zlst = NULL;
char *zonename = NULL;
char *zonepath = NULL;
char alt_zonepath[MAXPATHLEN];
char *zonepath_ds = NULL;
int k;
int ret = BE_SUCCESS;
+ boolean_t auto_create;
z_set_zone_root(ud->altroot);
- if ((brands = be_get_supported_brandlist()) == NULL) {
- be_print_err(gettext("be_unmount_zones: "
- "no supported brands\n"));
+ zlst = z_get_nonglobal_branded_zone_list();
+ if (zlst == NULL)
return (BE_SUCCESS);
- }
- zlst = z_get_nonglobal_zone_list_by_brand(brands);
- if (zlst == NULL) {
- z_free_brand_list(brands);
- return (BE_SUCCESS);
+ for (k = 0; (zonename = z_zlist_get_zonename(zlst, k)) != NULL; k++) {
+ if (z_zlist_is_zone_auto_create_be(zlst, k, &auto_create) != 0) {
+ be_print_err(gettext("be_unmount_zones: failed to"
+ " get auto-create-be brand property\n"));
+ goto done;
}
- for (k = 0; (zonename = z_zlist_get_zonename(zlst, k)) != NULL; k++) {
+ if (!auto_create)
+ continue;
+
if (z_zlist_get_current_state(zlst, k) ==
ZONE_STATE_INSTALLED) {
zonepath = z_zlist_get_zonepath(zlst, k);
/* Build zone's zonepath wrt the global BE altroot */
@@ -2513,11 +2515,10 @@
}
}
}
done:
- z_free_brand_list(brands);
z_free_zone_list(zlst);
return (ret);
}
/*