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)
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to