svn commit: r224170 - in head/cddl/contrib/opensolaris: cmd/zpool
lib/libzfs/common
Justin T. Gibbs
gibbs at FreeBSD.org
Mon Jul 18 03:00:59 UTC 2011
Author: gibbs
Date: Mon Jul 18 03:00:59 2011
New Revision: 224170
URL: http://svn.freebsd.org/changeset/base/224170
Log:
Correct reporting of missing leaf vdevs so that the GUID required to
perform pool actions is always displayed.
cddl/contrib/opensolaris/cmd/zpool/zpool_main.c:
The "zpool status" command reports the "last seen at"
device node path when the vdev name is being reported
by GUID. Augment this code to assume a GUID is reported
when a device goes missing after initial boot in addition
to the previous behavior of doing this for devices that
aren't seen at boot.
cddl/contrib/opensolaris/lib/libzfs/common/libzfs_pool.c:
In zpool_vdev_name(), report recently missing devices
by GUID. There is no guarantee they will return at
their previous location.
Modified:
head/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c
head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_pool.c
Modified: head/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c
==============================================================================
--- head/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c Mon Jul 18 02:13:21 2011 (r224169)
+++ head/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c Mon Jul 18 03:00:59 2011 (r224170)
@@ -1084,10 +1084,11 @@ print_status_config(zpool_handle_t *zhp,
}
if (nvlist_lookup_uint64(nv, ZPOOL_CONFIG_NOT_PRESENT,
- ¬present) == 0) {
+ ¬present) == 0 ||
+ vs->vs_state <= VDEV_STATE_CANT_OPEN) {
char *path;
- verify(nvlist_lookup_string(nv, ZPOOL_CONFIG_PATH, &path) == 0);
- (void) printf(" was %s", path);
+ if (nvlist_lookup_string(nv, ZPOOL_CONFIG_PATH, &path) == 0)
+ (void) printf(" was %s", path);
} else if (vs->vs_aux != 0) {
(void) printf(" ");
Modified: head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_pool.c
==============================================================================
--- head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_pool.c Mon Jul 18 02:13:21 2011 (r224169)
+++ head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_pool.c Mon Jul 18 03:00:59 2011 (r224170)
@@ -3110,15 +3110,25 @@ zpool_vdev_name(libzfs_handle_t *hdl, zp
char buf[64];
vdev_stat_t *vs;
uint_t vsc;
+ int have_stats;
+ int have_path;
- if (nvlist_lookup_uint64(nv, ZPOOL_CONFIG_NOT_PRESENT,
- &value) == 0) {
+ have_stats = nvlist_lookup_uint64_array(nv, ZPOOL_CONFIG_VDEV_STATS,
+ (uint64_t **)&vs, &vsc) == 0;
+ have_path = nvlist_lookup_string(nv, ZPOOL_CONFIG_PATH, &path) == 0;
+
+ /*
+ * If the device is not currently present, assume it will not
+ * come back at the same device path. Display the device by GUID.
+ */
+ if (nvlist_lookup_uint64(nv, ZPOOL_CONFIG_NOT_PRESENT, &value) == 0 ||
+ have_path && have_stats && vs->vs_state <= VDEV_STATE_CANT_OPEN) {
verify(nvlist_lookup_uint64(nv, ZPOOL_CONFIG_GUID,
&value) == 0);
(void) snprintf(buf, sizeof (buf), "%llu",
(u_longlong_t)value);
path = buf;
- } else if (nvlist_lookup_string(nv, ZPOOL_CONFIG_PATH, &path) == 0) {
+ } else if (have_path) {
/*
* If the device is dead (faulted, offline, etc) then don't
@@ -3126,8 +3136,7 @@ zpool_vdev_name(libzfs_handle_t *hdl, zp
* open a misbehaving device, which can have undesirable
* effects.
*/
- if ((nvlist_lookup_uint64_array(nv, ZPOOL_CONFIG_VDEV_STATS,
- (uint64_t **)&vs, &vsc) != 0 ||
+ if ((have_stats == 0 ||
vs->vs_state >= VDEV_STATE_DEGRADED) &&
zhp != NULL &&
nvlist_lookup_string(nv, ZPOOL_CONFIG_DEVID, &devid) == 0) {
More information about the svn-src-head
mailing list