aboutsummaryrefslogtreecommitdiff
path: root/lib/libbe/be_info.c
diff options
context:
space:
mode:
authorKyle Evans <kevans@FreeBSD.org>2018-08-07 03:07:54 +0000
committerKyle Evans <kevans@FreeBSD.org>2018-08-07 03:07:54 +0000
commit709b553cd0308060a548c1aa9c6ff026b1dcdd1e (patch)
tree96ade271040e8ad7d14b27d1faaba740bdddc6e7 /lib/libbe/be_info.c
parent9c65c7fb48ca4907091fe75075e7fbdf11ed9840 (diff)
downloadsrc-709b553cd0308060a548c1aa9c6ff026b1dcdd1e.tar.gz
src-709b553cd0308060a548c1aa9c6ff026b1dcdd1e.zip
libbe(3): Check that dataset is to be mounted at / for be_exists
This makes the be_exists behavior match the comments that assert that we've already checked that the dataset derived from the BE name is set to mount at /. Other changes of note: - bectl_list sees another change; changing mountpoint based on mount status turns out to be a bad idea, so instead make the mounted property of the returned nvlist the path that it's mounted at - Always return the "mountpoint" property in "mountpoint" if it's ste
Notes
Notes: svn path=/projects/bectl/; revision=337406
Diffstat (limited to 'lib/libbe/be_info.c')
-rw-r--r--lib/libbe/be_info.c37
1 files changed, 30 insertions, 7 deletions
diff --git a/lib/libbe/be_info.c b/lib/libbe/be_info.c
index fa7c2254d724..04bbd71c4f7b 100644
--- a/lib/libbe/be_info.c
+++ b/lib/libbe/be_info.c
@@ -172,10 +172,13 @@ prop_list_builder_cb(zfs_handle_t *zfs_hdl, void *data_p)
nvlist_add_string(props, "name", name);
mounted = zfs_is_mounted(zfs_hdl, &mountpoint);
- nvlist_add_boolean_value(props, "mounted", mounted);
if (mounted)
- nvlist_add_string(props, "mountpoint", mountpoint);
+ nvlist_add_string(props, "mounted", mountpoint);
+
+ if (zfs_prop_get(zfs_hdl, ZFS_PROP_MOUNTPOINT, buf, 512,
+ NULL, NULL, 0, 1) == 0)
+ nvlist_add_string(props, "mountpoint", buf);
if (zfs_prop_get(zfs_hdl, ZFS_PROP_ORIGIN, buf, 512,
NULL, NULL, 0, 1) == 0)
@@ -282,12 +285,32 @@ bool
be_exists(libbe_handle_t *lbh, char *be)
{
char buf[BE_MAXPATHLEN];
+ nvlist_t *dsprops;
+ char *mntpoint;
+ bool valid;
be_root_concat(lbh, be, buf);
- /*
- * XXX TODO: check mountpoint prop and see if its /, AND that result
- * with below expression.
- */
- return (zfs_dataset_exists(lbh->lzh, buf, ZFS_TYPE_DATASET));
+ if (!zfs_dataset_exists(lbh->lzh, buf, ZFS_TYPE_DATASET))
+ return (false);
+
+ /* Also check if it's mounted at / */
+ if (be_prop_list_alloc(&dsprops) != 0) {
+ set_error(lbh, BE_ERR_UNKNOWN);
+ return (false);
+ }
+
+ if (be_get_dataset_props(lbh, buf, dsprops) != 0) {
+ nvlist_free(dsprops);
+ return (false);
+ }
+
+ if (nvlist_lookup_string(dsprops, "mountpoint", &mntpoint) == 0) {
+ valid = (strcmp(mntpoint, "/") == 0);
+ nvlist_free(dsprops);
+ return (valid);
+ }
+
+ nvlist_free(dsprops);
+ return (false);
}