svn commit: r293708 - head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs

Alan Somers asomers at FreeBSD.org
Mon Jan 11 22:15:47 UTC 2016


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);


More information about the svn-src-all mailing list