Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F144925746
D46658.1776932222.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
2 KB
Referenced Files
None
Subscribers
None
D46658.1776932222.diff
View Options
diff --git a/lib/libbe/be.h b/lib/libbe/be.h
--- a/lib/libbe/be.h
+++ b/lib/libbe/be.h
@@ -78,7 +78,7 @@
int be_prop_list_alloc(nvlist_t **be_list);
void be_prop_list_free(nvlist_t *be_list);
-int be_activate(libbe_handle_t *, const char *, bool);
+int be_activate(libbe_handle_t *, const char *, bool, bool);
int be_deactivate(libbe_handle_t *, const char *, bool);
bool be_is_auto_snapshot_name(libbe_handle_t *, const char *);
diff --git a/lib/libbe/be.c b/lib/libbe/be.c
--- a/lib/libbe/be.c
+++ b/lib/libbe/be.c
@@ -1306,7 +1306,7 @@
}
int
-be_activate(libbe_handle_t *lbh, const char *bootenv, bool temporary)
+be_activate(libbe_handle_t *lbh, const char *bootenv, bool temporary, bool promote)
{
char be_path[BE_MAXPATHLEN];
zfs_handle_t *zhp;
@@ -1332,18 +1332,20 @@
if (err)
return (-1);
- for (;;) {
- zhp = zfs_open(lbh->lzh, be_path, ZFS_TYPE_FILESYSTEM);
- if (zhp == NULL)
- return (-1);
+ if (promote) {
+ for (;;) {
+ zhp = zfs_open(lbh->lzh, be_path, ZFS_TYPE_FILESYSTEM);
+ if (zhp == NULL)
+ return (-1);
- err = be_zfs_promote(zhp, &found_origin);
+ err = be_zfs_promote(zhp, &found_origin);
- zfs_close(zhp);
- if (!found_origin)
- break;
- if (err)
- return (err);
+ zfs_close(zhp);
+ if (!found_origin)
+ break;
+ if (err)
+ return (err);
+ }
}
if (err)
diff --git a/sbin/bectl/bectl.8 b/sbin/bectl/bectl.8
--- a/sbin/bectl/bectl.8
+++ b/sbin/bectl/bectl.8
@@ -25,7 +25,7 @@
.Nm
.Op Fl r Ar beroot
.Cm activate
-.Op Fl t | Fl T
+.Op Fl t | Fl T | Fl n
.Ar beName
.Nm
.Op Fl r Ar beroot
@@ -120,7 +120,7 @@
Print usage information and exit.
.It Xo
.Cm activate
-.Op Fl t | Fl T
+.Op Fl t | Fl T | Fl n
.Ar beName
.Xc
Activate the given
@@ -136,6 +136,14 @@
in boot pool
.Ar bootfs
property.
+.Pp
+If
+.Ar beName
+is a clone of another's dataset snapshot, it will be automatically and
+recursively promoted.
+If the
+.Fl n
+flag is given, no promotion operation is performed.
.It Xo
.Cm check
.Xc
diff --git a/sbin/bectl/bectl.c b/sbin/bectl/bectl.c
--- a/sbin/bectl/bectl.c
+++ b/sbin/bectl/bectl.c
@@ -137,11 +137,11 @@
bectl_cmd_activate(int argc, char *argv[])
{
int err, opt;
- bool temp, reset;
+ bool temp, reset, promote = true;
temp = false;
reset = false;
- while ((opt = getopt(argc, argv, "tT")) != -1) {
+ while ((opt = getopt(argc, argv, "tTn")) != -1) {
switch (opt) {
case 't':
if (reset)
@@ -153,6 +153,9 @@
return (usage(false));
reset = true;
break;
+ case 'n':
+ promote = false;
+ break;
default:
fprintf(stderr, "bectl activate: unknown option '-%c'\n",
optopt);
@@ -177,7 +180,7 @@
}
/* activate logic goes here */
- if ((err = be_activate(be, argv[0], temp)) != 0)
+ if ((err = be_activate(be, argv[0], temp, promote)) != 0)
/* XXX TODO: more specific error msg based on err */
printf("Did not successfully activate boot environment %s\n",
argv[0]);
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Thu, Apr 23, 8:17 AM (14 h, 13 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
28415677
Default Alt Text
D46658.1776932222.diff (2 KB)
Attached To
Mode
D46658: bectl: Add -n flag for the activate subcommand to prevent it from promoting cloned datasets
Attached
Detach File
Event Timeline
Log In to Comment