svn commit: r340454 - stable/12/lib/libbe

Kyle Evans kevans at FreeBSD.org
Thu Nov 15 16:03:53 UTC 2018


Author: kevans
Date: Thu Nov 15 16:03:52 2018
New Revision: 340454
URL: https://svnweb.freebsd.org/changeset/base/340454

Log:
  MFC r340334: libbe(3): Set canmount properly when activating a new BE
  
  The previously activated BE should have canmount=noauto set on it upon
  activation of the new BE, but we previously did not touch canmount on either
  old or new BE.
  
  PR:		233113
  Approved by:	re (gjb)

Modified:
  stable/12/lib/libbe/be.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/lib/libbe/be.c
==============================================================================
--- stable/12/lib/libbe/be.c	Thu Nov 15 16:02:45 2018	(r340453)
+++ stable/12/lib/libbe/be.c	Thu Nov 15 16:03:52 2018	(r340454)
@@ -922,7 +922,22 @@ be_set_nextboot(libbe_handle_t *lbh, nvlist_t *config,
 	return (0);
 }
 
+/*
+ * Deactivate old BE dataset; currently just sets canmount=noauto
+ */
+static int
+be_deactivate(libbe_handle_t *lbh, const char *ds)
+{
+	zfs_handle_t *zfs;
 
+	if ((zfs = zfs_open(lbh->lzh, ds, ZFS_TYPE_DATASET)) == NULL)
+		return (1);
+	if (zfs_prop_set(zfs, "canmount", "noauto") != 0)
+		return (1);
+	zfs_close(zfs);
+	return (0);
+}
+
 int
 be_activate(libbe_handle_t *lbh, const char *bootenv, bool temporary)
 {
@@ -961,6 +976,9 @@ be_activate(libbe_handle_t *lbh, const char *bootenv, 
 
 		return (be_set_nextboot(lbh, vdevs, pool_guid, buf));
 	} else {
+		if (be_deactivate(lbh, lbh->bootfs) != 0)
+			return (-1);
+
 		/* Obtain bootenv zpool */
 		err = zpool_set_prop(lbh->active_phandle, "bootfs", be_path);
 		if (err)


More information about the svn-src-stable-12 mailing list