Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 11 Jan 2016 22:15:46 +0000 (UTC)
From:      Alan Somers <asomers@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r293708 - head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs
Message-ID:  <201601112215.u0BMFkhq018699@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: asomers
Date: Mon Jan 11 22:15:46 2016
New Revision: 293708
URL: https://svnweb.freebsd.org/changeset/base/293708

Log:
  Fix importing l2arc device by guid
  
  After r292066, vdev_geom verifies both the vdev and pool guids of device
  labels during open. However, spare and l2arc devices don't have pool guids,
  so opening them by guid will fail (opening by path, when the pathname is
  known, still succeeds). This change allows a vdev to be opened by guid if
  the label contains no pool_guid, which is the case for inactive spares and
  l2arc devices.
  
  PR:		292066
  Reported by:	delphij
  Reviewed by:	delphij, smh
  MFC after:	2 weeks
  Sponsored by:	Spectra Logic Corp
  Differential Revision:	https://reviews.freebsd.org/D4861

Modified:
  head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c

Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c
==============================================================================
--- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c	Mon Jan 11 22:11:20 2016	(r293707)
+++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c	Mon Jan 11 22:15:46 2016	(r293708)
@@ -594,7 +594,15 @@ vdev_geom_attach_by_guids(vdev_t *vd)
 				vdev_geom_read_guids(zcp, &pguid, &vguid);
 				g_topology_lock();
 				vdev_geom_detach_taster(zcp);
-				if (pguid != spa_guid(vd->vdev_spa) ||
+				/* 
+				 * Check that the label's vdev guid matches the
+				 * desired guid.  If the label has a pool guid,
+				 * check that it matches too. (Inactive spares
+				 * and L2ARCs do not have any pool guid in the
+				 * label.)
+				*/
+				if ((pguid != 0 &&
+				     pguid != spa_guid(vd->vdev_spa)) ||
 				    vguid != vd->vdev_guid)
 					continue;
 				cp = vdev_geom_attach(pp, vd);



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