summaryrefslogtreecommitdiff
path: root/usr/src
diff options
context:
space:
mode:
authorAndy Fiddaman <omnios@citrus-it.co.uk>2018-10-12 09:52:37 +0000
committerDan McDonald <danmcd@joyent.com>2018-10-17 09:57:09 -0400
commitabc102c3e125a6b08c1d5b54449c08b53b45978a (patch)
tree02b2e340a55faabd27f76a5fce24b708d07372f9 /usr/src
parentb664061f7bf47f885e4f325a1f1ea21e8e09ea4b (diff)
downloadillumos-joyent-abc102c3e125a6b08c1d5b54449c08b53b45978a.tar.gz
9889 libbe reads defaults too often
Reviewed by: Dominik Hassler <hadfl@omniosce.org> Reviewed by: Igor Kozhukhov <igor@dilos.org> Reviewed by: Jim Klimov <jim@cos.ru> Reviewed by: Andy Stormont <astormont@racktopsystems.com> Reviewed by: Garrett D'Amore <garrett@damore.org> Reviewed by: Joshua M. Clulow <josh@sysmgr.org> Reviewed by: Dan McDonald <danmcd@joyent.com> Approved by: Gordon Ross <gordon.w.ross@gmail.com>
Diffstat (limited to 'usr/src')
-rw-r--r--usr/src/lib/libbe/common/be_list.c18
1 files changed, 9 insertions, 9 deletions
diff --git a/usr/src/lib/libbe/common/be_list.c b/usr/src/lib/libbe/common/be_list.c
index 373b8ef6e5..c8e052a26a 100644
--- a/usr/src/lib/libbe/common/be_list.c
+++ b/usr/src/lib/libbe/common/be_list.c
@@ -28,6 +28,7 @@
* Copyright 2015 Toomas Soome <tsoome@me.com>
* Copyright 2015 Gary Mills
* Copyright (c) 2016 Martin Matuska. All rights reserved.
+ * Copyright 2018 OmniOS Community Edition (OmniOSce) Association.
*/
#include <assert.h>
@@ -55,6 +56,7 @@ typedef struct list_callback_data {
be_node_list_t *be_nodes_head;
be_node_list_t *be_nodes;
char current_be[MAXPATHLEN];
+ struct be_defaults be_defaults;
} list_callback_data_t;
/*
@@ -220,12 +222,11 @@ _be_list(char *be_name, be_node_list_t **be_nodes)
int sret;
zpool_handle_t *zphp;
char *rpool = NULL;
- struct be_defaults be_defaults;
if (be_nodes == NULL)
return (BE_ERR_INVAL);
- be_get_defaults(&be_defaults);
+ be_get_defaults(&cb.be_defaults);
if (be_find_current_be(&bt) != BE_SUCCESS) {
/*
@@ -247,7 +248,7 @@ _be_list(char *be_name, be_node_list_t **be_nodes)
if (be_name != NULL)
cb.be_name = strdup(be_name);
- if (be_defaults.be_deflt_rpool_container && rpool != NULL) {
+ if (cb.be_defaults.be_deflt_rpool_container && rpool != NULL) {
if ((zphp = zpool_open(g_zfs, rpool)) == NULL) {
be_print_err(gettext("be_list: failed to "
"open rpool (%s): %s\n"), rpool,
@@ -391,8 +392,10 @@ be_get_zone_be_list(char *zone_be_name, char *zone_be_container_ds,
}
cb.be_nodes = cb.be_nodes_head;
}
- if (ret == 0)
+ if (ret == 0) {
+ be_get_defaults(&cb.be_defaults);
ret = zfs_iter_filesystems(zhp, be_add_children_callback, &cb);
+ }
ZFS_CLOSE(zhp);
*zbe_nodes = cb.be_nodes_head;
@@ -538,9 +541,6 @@ be_add_children_callback(zfs_handle_t *zhp, void *data)
list_callback_data_t *cb = (list_callback_data_t *)data;
char *str = NULL, *ds_path = NULL;
int ret = 0;
- struct be_defaults be_defaults;
-
- be_get_defaults(&be_defaults);
ds_path = str = strdup(zfs_get_name(zhp));
@@ -548,7 +548,7 @@ be_add_children_callback(zfs_handle_t *zhp, void *data)
* get past the end of the container dataset plus the trailing "/"
*/
str = str + (strlen(be_container_ds) + 1);
- if (be_defaults.be_deflt_rpool_container) {
+ if (cb->be_defaults.be_deflt_rpool_container) {
/* just skip if invalid */
if (!be_valid_be_name(str))
return (BE_SUCCESS);
@@ -1335,7 +1335,7 @@ be_get_ss_data(
* size - The size of memory to allocate.
* Returns:
* Success - A pointer to the allocated memory
- * Failure - NULL
+ * Failure - NULL
* Scope:
* Private
*/