Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 7 Aug 2018 03:07:55 +0000 (UTC)
From:      Kyle Evans <kevans@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r337406 - in projects/bectl: lib/libbe sbin/bectl
Message-ID:  <201808070307.w7737tU0007818@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
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 {



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201808070307.w7737tU0007818>