svn commit: r337406 - in projects/bectl: lib/libbe sbin/bectl
Kyle Evans
kevans at FreeBSD.org
Tue Aug 7 03:07:56 UTC 2018
Author: kevans
Date: Tue Aug 7 03:07:54 2018
New Revision: 337406
URL: https://svnweb.freebsd.org/changeset/base/337406
Log:
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
Modified:
projects/bectl/lib/libbe/be_info.c
projects/bectl/sbin/bectl/bectl_list.c
Modified: projects/bectl/lib/libbe/be_info.c
==============================================================================
--- projects/bectl/lib/libbe/be_info.c Tue Aug 7 03:01:04 2018 (r337405)
+++ projects/bectl/lib/libbe/be_info.c Tue Aug 7 03:07:54 2018 (r337406)
@@ -172,11 +172,14 @@ prop_list_builder_cb(zfs_handle_t *zfs_hdl, void *data
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)
nvlist_add_string(props, "origin", buf);
@@ -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);
}
Modified: projects/bectl/sbin/bectl/bectl_list.c
==============================================================================
--- projects/bectl/sbin/bectl/bectl_list.c Tue Aug 7 03:01:04 2018 (r337405)
+++ projects/bectl/sbin/bectl/bectl_list.c Tue Aug 7 03:07:54 2018 (r337406)
@@ -175,7 +175,7 @@ print_info(const char *name, nvlist_t *dsprops, struct
const char *oname;
char *dsname, *propstr;
int active_colsz;
- boolean_t active_now, active_reboot, mounted;
+ boolean_t active_now, active_reboot;
dsname = NULL;
originprops = NULL;
@@ -228,10 +228,7 @@ print_info(const char *name, nvlist_t *dsprops, struct
active_colsz--;
}
print_padding(NULL, active_colsz, pc);
- if (nvlist_lookup_boolean_value(dsprops, "mounted", &mounted) != 0)
- mounted = false;
- if (mounted && nvlist_lookup_string(dsprops, "mountpoint",
- &propstr) == 0) {
+ if (nvlist_lookup_string(dsprops, "mounted", &propstr) == 0) {
printf("%s", propstr);
print_padding(propstr, pc->mount_colsz, pc);
} else {
More information about the svn-src-projects
mailing list