Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 10 Nov 2018 20:42:30 +0000 (UTC)
From:      Kyle Evans <kevans@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r340334 - head/lib/libbe
Message-ID:  <201811102042.wAAKgUMY063816@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: kevans
Date: Sat Nov 10 20:42:29 2018
New Revision: 340334
URL: https://svnweb.freebsd.org/changeset/base/340334

Log:
  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
  MFC after:	3 days

Modified:
  head/lib/libbe/be.c

Modified: head/lib/libbe/be.c
==============================================================================
--- head/lib/libbe/be.c	Sat Nov 10 20:36:48 2018	(r340333)
+++ head/lib/libbe/be.c	Sat Nov 10 20:42:29 2018	(r340334)
@@ -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)



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