Storage device expansion "silently" fails on degraded vdev
When a vdev is degraded or faulted, we refuse to expand it when doing online -e. However, we also don't actually cause the online command to fail, even though the disk didn't expand. This is confusing and misleading, and can result in violated expectations. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: Matthew Ahrens <mahrens@delphix.com> Reviewed-by: Mark Maybee <mark.maybee@delphix.com> Signed-off-by: Paul Dagnelie <pcd@delphix.com> Closes 14145
This commit is contained in:
parent
1038f87c4e
commit
b66c2a0899
|
@ -6936,6 +6936,17 @@ zpool_do_online(int argc, char **argv)
|
||||||
return (1);
|
return (1);
|
||||||
|
|
||||||
for (i = 1; i < argc; i++) {
|
for (i = 1; i < argc; i++) {
|
||||||
|
vdev_state_t oldstate;
|
||||||
|
boolean_t avail_spare, l2cache;
|
||||||
|
nvlist_t *tgt = zpool_find_vdev(zhp, argv[i], &avail_spare,
|
||||||
|
&l2cache, NULL);
|
||||||
|
if (tgt == NULL) {
|
||||||
|
ret = 1;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
uint_t vsc;
|
||||||
|
oldstate = ((vdev_stat_t *)fnvlist_lookup_uint64_array(tgt,
|
||||||
|
ZPOOL_CONFIG_VDEV_STATS, &vsc))->vs_state;
|
||||||
if (zpool_vdev_online(zhp, argv[i], flags, &newstate) == 0) {
|
if (zpool_vdev_online(zhp, argv[i], flags, &newstate) == 0) {
|
||||||
if (newstate != VDEV_STATE_HEALTHY) {
|
if (newstate != VDEV_STATE_HEALTHY) {
|
||||||
(void) printf(gettext("warning: device '%s' "
|
(void) printf(gettext("warning: device '%s' "
|
||||||
|
@ -6949,6 +6960,17 @@ zpool_do_online(int argc, char **argv)
|
||||||
(void) printf(gettext("use 'zpool "
|
(void) printf(gettext("use 'zpool "
|
||||||
"replace' to replace devices "
|
"replace' to replace devices "
|
||||||
"that are no longer present\n"));
|
"that are no longer present\n"));
|
||||||
|
if ((flags & ZFS_ONLINE_EXPAND)) {
|
||||||
|
(void) printf(gettext("%s: failed "
|
||||||
|
"to expand usable space on "
|
||||||
|
"unhealthy device '%s'\n"),
|
||||||
|
(oldstate >= VDEV_STATE_DEGRADED ?
|
||||||
|
"error" : "warning"), argv[i]);
|
||||||
|
if (oldstate >= VDEV_STATE_DEGRADED) {
|
||||||
|
ret = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
ret = 1;
|
ret = 1;
|
||||||
|
|
Loading…
Reference in New Issue