aboutsummaryrefslogtreecommitdiff
path: root/lib/libbe/be_info.c
diff options
context:
space:
mode:
authorKyle Evans <kevans@FreeBSD.org>2018-08-03 02:04:57 +0000
committerKyle Evans <kevans@FreeBSD.org>2018-08-03 02:04:57 +0000
commit4146029bb31648f465c87a46dc0bc79e913816ad (patch)
treea73425d41eec2249029ad1783d8a9a873a560cff /lib/libbe/be_info.c
parent74c55b3d388e99eefebf99bf3776e87eefd476d9 (diff)
downloadsrc-4146029bb31648f465c87a46dc0bc79e913816ad.tar.gz
src-4146029bb31648f465c87a46dc0bc79e913816ad.zip
bectl(8): Take origin snapshot into account when calculating used space
This more closely matches the behavior for beadm. The associated libbe(3) API is still getting worked out a little bit.
Notes
Notes: svn path=/projects/bectl/; revision=337228
Diffstat (limited to 'lib/libbe/be_info.c')
-rw-r--r--lib/libbe/be_info.c27
1 files changed, 25 insertions, 2 deletions
diff --git a/lib/libbe/be_info.c b/lib/libbe/be_info.c
index 6e8db75db416..c4059ea5d598 100644
--- a/lib/libbe/be_info.c
+++ b/lib/libbe/be_info.c
@@ -94,9 +94,28 @@ be_get_bootenv_props(libbe_handle_t *lbh, nvlist_t *dsnvl)
data.lbh = lbh;
data.list = dsnvl;
+ data.single_object = false;
return (prop_list_builder(&data));
}
+int
+be_get_snapshot_props(libbe_handle_t *lbh, const char *name, nvlist_t *props)
+{
+ zfs_handle_t *snap_hdl;
+ prop_data_t data;
+ int ret;
+
+ data.lbh = lbh;
+ data.list = props;
+ data.single_object = true;
+ if ((snap_hdl = zfs_open(lbh->lzh, name,
+ ZFS_TYPE_SNAPSHOT)) == NULL)
+ return (BE_ERR_ZFSOPEN);
+
+ ret = prop_list_builder_cb(snap_hdl, &data);
+ zfs_close(snap_hdl);
+ return (ret);
+}
/*
* Internal callback function used by zfs_iter_filesystems. For each dataset in
@@ -121,7 +140,10 @@ prop_list_builder_cb(zfs_handle_t *zfs_hdl, void *data_p)
data = (prop_data_t *)data_p;
lbh = data->lbh;
- nvlist_alloc(&props, NV_UNIQUE_NAME, KM_SLEEP);
+ if (data->single_object)
+ props = data->list;
+ else
+ nvlist_alloc(&props, NV_UNIQUE_NAME, KM_SLEEP);
dataset = zfs_get_name(zfs_hdl);
nvlist_add_string(props, "dataset", dataset);
@@ -169,7 +191,8 @@ prop_list_builder_cb(zfs_handle_t *zfs_hdl, void *data_p)
nvlist_add_boolean_value(props, "nextboot",
(strcmp(be_nextboot_path(lbh), dataset) == 0));
- nvlist_add_nvlist(data->list, name, props);
+ if (!data->single_object)
+ nvlist_add_nvlist(data->list, name, props);
return (0);
}