diff options
author | Kyle Evans <kevans@FreeBSD.org> | 2018-11-10 20:42:29 +0000 |
---|---|---|
committer | Kyle Evans <kevans@FreeBSD.org> | 2018-11-10 20:42:29 +0000 |
commit | 8d4ce3586f6aed9c492065424de322b35571594b (patch) | |
tree | cea45d033ffe4d540003e1d54efbb6738740b763 /lib/libbe | |
parent | 0e48e06807cfe7971a04a6013a7f260efd30cfc9 (diff) | |
download | src-8d4ce3586f6aed9c492065424de322b35571594b.tar.gz src-8d4ce3586f6aed9c492065424de322b35571594b.zip |
Notes
Diffstat (limited to 'lib/libbe')
-rw-r--r-- | lib/libbe/be.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/lib/libbe/be.c b/lib/libbe/be.c index 10977747a670..540fe44ea1e9 100644 --- a/lib/libbe/be.c +++ b/lib/libbe/be.c @@ -922,6 +922,21 @@ be_set_nextboot(libbe_handle_t *lbh, nvlist_t *config, uint64_t pool_guid, 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, bool temporary) 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) |