Propagate vdev state due to invalid label corruption

Propagate vdev child state to parents on invalid label
Add VDEV_AUX_BAD_LABEL to print_import_config()

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Mark Maybee <mark.maybee@delphix.com>
Co-authored-by: Srikanth N S <srikanth.nagasubbaraoseetharaman@hpe.com>
Signed-off-by: Vipin Kumar Verma <vipin.verma@hpe.com>
Closes #12088
This commit is contained in:
vermavipinkumar 2021-05-26 00:02:07 +05:30 committed by Brian Behlendorf
parent ab6717cba6
commit d6bedbbc44
2 changed files with 11 additions and 1 deletions

View File

@ -32,6 +32,7 @@
* Copyright (c) 2017, Intel Corporation. * Copyright (c) 2017, Intel Corporation.
* Copyright (c) 2019, loli10K <ezomori.nozomu@gmail.com> * Copyright (c) 2019, loli10K <ezomori.nozomu@gmail.com>
* Copyright (c) 2021, Colm Buckley <colm@tuatha.org> * Copyright (c) 2021, Colm Buckley <colm@tuatha.org>
* Copyright [2021] Hewlett Packard Enterprise Development LP
*/ */
#include <assert.h> #include <assert.h>
@ -2379,6 +2380,10 @@ print_status_config(zpool_handle_t *zhp, status_cbdata_t *cb, const char *name,
(void) printf(gettext("all children offline")); (void) printf(gettext("all children offline"));
break; break;
case VDEV_AUX_BAD_LABEL:
(void) printf(gettext("invalid label"));
break;
default: default:
(void) printf(gettext("corrupted data")); (void) printf(gettext("corrupted data"));
break; break;
@ -2521,6 +2526,10 @@ print_import_config(status_cbdata_t *cb, const char *name, nvlist_t *nv,
(void) printf(gettext("all children offline")); (void) printf(gettext("all children offline"));
break; break;
case VDEV_AUX_BAD_LABEL:
(void) printf(gettext("invalid label"));
break;
default: default:
(void) printf(gettext("corrupted data")); (void) printf(gettext("corrupted data"));
break; break;

View File

@ -28,6 +28,7 @@
* Copyright 2017 Joyent, Inc. * Copyright 2017 Joyent, Inc.
* Copyright (c) 2017, Intel Corporation. * Copyright (c) 2017, Intel Corporation.
* Copyright (c) 2019, Datto Inc. All rights reserved. * Copyright (c) 2019, Datto Inc. All rights reserved.
* Copyright [2021] Hewlett Packard Enterprise Development LP
*/ */
#include <sys/zfs_context.h> #include <sys/zfs_context.h>
@ -2222,7 +2223,7 @@ vdev_validate(vdev_t *vd)
txg = spa_last_synced_txg(spa); txg = spa_last_synced_txg(spa);
if ((label = vdev_label_read_config(vd, txg)) == NULL) { if ((label = vdev_label_read_config(vd, txg)) == NULL) {
vdev_set_state(vd, B_TRUE, VDEV_STATE_CANT_OPEN, vdev_set_state(vd, B_FALSE, VDEV_STATE_CANT_OPEN,
VDEV_AUX_BAD_LABEL); VDEV_AUX_BAD_LABEL);
vdev_dbgmsg(vd, "vdev_validate: failed reading config for " vdev_dbgmsg(vd, "vdev_validate: failed reading config for "
"txg %llu", (u_longlong_t)txg); "txg %llu", (u_longlong_t)txg);