Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 18 Jul 2011 03:00:59 +0000 (UTC)
From:      "Justin T. Gibbs" <gibbs@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r224170 - in head/cddl/contrib/opensolaris: cmd/zpool lib/libzfs/common
Message-ID:  <201107180300.p6I30xPV002403@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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,
-	    &notpresent) == 0) {
+	    &notpresent) == 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) {



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201107180300.p6I30xPV002403>