zpool: Don't print "repairing" on force faulted drives
If you force fault a drive that's resilvering, it's scan stats can get frozen in time, giving the false impression that it's being resilvered. This commit checks the vdev state to see if the vdev is healthy before reporting "resilvering" or "repairing" in zpool status. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Tony Hutter <hutter2@llnl.gov> Closes #13927 Closes #13930
This commit is contained in:
parent
ce55d6ae46
commit
e9b12d4196
|
@ -2462,7 +2462,14 @@ print_status_config(zpool_handle_t *zhp, status_cbdata_t *cb, const char *name,
|
||||||
(void) nvlist_lookup_uint64_array(root, ZPOOL_CONFIG_SCAN_STATS,
|
(void) nvlist_lookup_uint64_array(root, ZPOOL_CONFIG_SCAN_STATS,
|
||||||
(uint64_t **)&ps, &c);
|
(uint64_t **)&ps, &c);
|
||||||
|
|
||||||
if (ps != NULL && ps->pss_state == DSS_SCANNING && children == 0) {
|
/*
|
||||||
|
* If you force fault a drive that's resilvering, its scan stats can
|
||||||
|
* get frozen in time, giving the false impression that it's
|
||||||
|
* being resilvered. That's why we check the state to see if the vdev
|
||||||
|
* is healthy before reporting "resilvering" or "repairing".
|
||||||
|
*/
|
||||||
|
if (ps != NULL && ps->pss_state == DSS_SCANNING && children == 0 &&
|
||||||
|
vs->vs_state == VDEV_STATE_HEALTHY) {
|
||||||
if (vs->vs_scan_processed != 0) {
|
if (vs->vs_scan_processed != 0) {
|
||||||
(void) printf(gettext(" (%s)"),
|
(void) printf(gettext(" (%s)"),
|
||||||
(ps->pss_func == POOL_SCAN_RESILVER) ?
|
(ps->pss_func == POOL_SCAN_RESILVER) ?
|
||||||
|
@ -2474,7 +2481,7 @@ print_status_config(zpool_handle_t *zhp, status_cbdata_t *cb, const char *name,
|
||||||
|
|
||||||
/* The top-level vdevs have the rebuild stats */
|
/* The top-level vdevs have the rebuild stats */
|
||||||
if (vrs != NULL && vrs->vrs_state == VDEV_REBUILD_ACTIVE &&
|
if (vrs != NULL && vrs->vrs_state == VDEV_REBUILD_ACTIVE &&
|
||||||
children == 0) {
|
children == 0 && vs->vs_state == VDEV_STATE_HEALTHY) {
|
||||||
if (vs->vs_rebuild_processed != 0) {
|
if (vs->vs_rebuild_processed != 0) {
|
||||||
(void) printf(gettext(" (resilvering)"));
|
(void) printf(gettext(" (resilvering)"));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue