aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgrembo <[email protected]>2021-06-01 23:03:49 +0200
committerGitHub <[email protected]>2021-06-01 15:03:49 -0600
commit65d9212aeeb531e9f987bb41a1ee11b526d2cdad (patch)
treee643bd599c5a5e82c67b0d71e22ab48272eaaaf5
parent3f81aba7668143c6ca6fc44983d4c880606dea8f (diff)
FreeBSD boot code reminder after zpool upgrade
There used to be a warning after upgrading a zpool in FreeBSD, so users won't forget to update the boot loader that pool is booted from. This change brings this warning back, but only if the bootfs property is set on the pool, which should be sufficient for the vast majority of FreeBSD installations. People running something custom are most likely aware of what to do after an upgrade in their specific environment. Functionality is implemented in an OS specific helper function. Reviewed-by: John Kennedy <[email protected]> Reviewed-by: Ryan Moeller <[email protected]> Co-authored-by: Michael Gmelin <[email protected]> Signed-off-by: Michael Gmelin <[email protected]> Closes #12099 Closes #12104
-rw-r--r--cmd/zpool/os/freebsd/zpool_vdev_os.c15
-rw-r--r--cmd/zpool/os/linux/zpool_vdev_os.c5
-rw-r--r--cmd/zpool/zpool_main.c22
-rw-r--r--cmd/zpool/zpool_util.h1
4 files changed, 33 insertions, 10 deletions
diff --git a/cmd/zpool/os/freebsd/zpool_vdev_os.c b/cmd/zpool/os/freebsd/zpool_vdev_os.c
index 7d48f61a0..aa66d29fa 100644
--- a/cmd/zpool/os/freebsd/zpool_vdev_os.c
+++ b/cmd/zpool/os/freebsd/zpool_vdev_os.c
@@ -101,3 +101,18 @@ check_sector_size_database(char *path, int *sector_size)
{
return (0);
}
+
+void
+after_zpool_upgrade(zpool_handle_t *zhp)
+{
+ char bootfs[ZPOOL_MAXPROPLEN];
+
+ if (zpool_get_prop(zhp, ZPOOL_PROP_BOOTFS, bootfs,
+ sizeof (bootfs), NULL, B_FALSE) == 0 &&
+ strcmp(bootfs, "-") != 0) {
+ (void) printf(gettext("Pool '%s' has the bootfs "
+ "property set, you might need to update\nthe boot "
+ "code. See gptzfsboot(8) and loader.efi(8) for "
+ "details.\n"), zpool_get_name(zhp));
+ }
+}
diff --git a/cmd/zpool/os/linux/zpool_vdev_os.c b/cmd/zpool/os/linux/zpool_vdev_os.c
index 55a9367ec..da87aa79f 100644
--- a/cmd/zpool/os/linux/zpool_vdev_os.c
+++ b/cmd/zpool/os/linux/zpool_vdev_os.c
@@ -405,3 +405,8 @@ check_device(const char *path, boolean_t force,
return (error);
}
+
+void
+after_zpool_upgrade(zpool_handle_t *zhp)
+{
+}
diff --git a/cmd/zpool/zpool_main.c b/cmd/zpool/zpool_main.c
index 50ef9e643..02415b157 100644
--- a/cmd/zpool/zpool_main.c
+++ b/cmd/zpool/zpool_main.c
@@ -8837,7 +8837,7 @@ upgrade_cb(zpool_handle_t *zhp, void *arg)
upgrade_cbdata_t *cbp = arg;
nvlist_t *config;
uint64_t version;
- boolean_t printnl = B_FALSE;
+ boolean_t modified_pool = B_FALSE;
int ret;
config = zpool_get_config(zhp, NULL);
@@ -8851,7 +8851,7 @@ upgrade_cb(zpool_handle_t *zhp, void *arg)
ret = upgrade_version(zhp, cbp->cb_version);
if (ret != 0)
return (ret);
- printnl = B_TRUE;
+ modified_pool = B_TRUE;
/*
* If they did "zpool upgrade -a", then we could
@@ -8871,12 +8871,13 @@ upgrade_cb(zpool_handle_t *zhp, void *arg)
if (count > 0) {
cbp->cb_first = B_FALSE;
- printnl = B_TRUE;
+ modified_pool = B_TRUE;
}
}
- if (printnl) {
- (void) printf(gettext("\n"));
+ if (modified_pool) {
+ (void) printf("\n");
+ (void) after_zpool_upgrade(zhp);
}
return (0);
@@ -8989,7 +8990,7 @@ upgrade_list_disabled_cb(zpool_handle_t *zhp, void *arg)
static int
upgrade_one(zpool_handle_t *zhp, void *data)
{
- boolean_t printnl = B_FALSE;
+ boolean_t modified_pool = B_FALSE;
upgrade_cbdata_t *cbp = data;
uint64_t cur_version;
int ret;
@@ -9017,7 +9018,7 @@ upgrade_one(zpool_handle_t *zhp, void *data)
}
if (cur_version != cbp->cb_version) {
- printnl = B_TRUE;
+ modified_pool = B_TRUE;
ret = upgrade_version(zhp, cbp->cb_version);
if (ret != 0)
return (ret);
@@ -9030,7 +9031,7 @@ upgrade_one(zpool_handle_t *zhp, void *data)
return (ret);
if (count != 0) {
- printnl = B_TRUE;
+ modified_pool = B_TRUE;
} else if (cur_version == SPA_VERSION) {
(void) printf(gettext("Pool '%s' already has all "
"supported and requested features enabled.\n"),
@@ -9038,8 +9039,9 @@ upgrade_one(zpool_handle_t *zhp, void *data)
}
}
- if (printnl) {
- (void) printf(gettext("\n"));
+ if (modified_pool) {
+ (void) printf("\n");
+ (void) after_zpool_upgrade(zhp);
}
return (0);
diff --git a/cmd/zpool/zpool_util.h b/cmd/zpool/zpool_util.h
index 5557859ed..71db4dc35 100644
--- a/cmd/zpool/zpool_util.h
+++ b/cmd/zpool/zpool_util.h
@@ -130,6 +130,7 @@ int check_device(const char *path, boolean_t force,
boolean_t check_sector_size_database(char *path, int *sector_size);
void vdev_error(const char *fmt, ...);
int check_file(const char *file, boolean_t force, boolean_t isspare);
+void after_zpool_upgrade(zpool_handle_t *zhp);
#ifdef __cplusplus
}