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);
 }
 
 /*