Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 26 Oct 2017 19:18:02 +0200
From:      "O. Hartmann" <ohartmann@walstatt.org>
To:        Alan Somers <asomers@FreeBSD.org>
Cc:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   Re: svn commit: r325011 - in head: cddl/usr.sbin/zfsd lib/libdevdctl
Message-ID:  <20171026191802.3d13f342@thor.intern.walstatt.dynvpn.de>
In-Reply-To: <201710261528.v9QFSIDX017941@repo.freebsd.org>
References:  <201710261528.v9QFSIDX017941@repo.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
--Sig_/fmn.CyBi2jMOTbw.9pdX8y2
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Am Thu, 26 Oct 2017 15:28:18 +0000 (UTC)
Alan Somers <asomers@FreeBSD.org> schrieb:

> Author: asomers
> Date: Thu Oct 26 15:28:18 2017
> New Revision: 325011
> URL: https://svnweb.freebsd.org/changeset/base/325011
>=20
> Log:
>   zfsd should be able to online an L2ARC that disappears and returns
>  =20
>   Previously, this didn't work because L2ARC devices' labels don't contain
>   pool GUIDs.  Modify zfsd so that the pool GUID won't be required:
>  =20
>   lib/libdevdctl/guid.h
>   	Change INVALID_GUID from a uint64_t constant to a function that
>   	returns an invalid Guid object.  Remove the void constructor.
>   	Nothing uses it, and it violates RAII.
>  =20
>   cddl/usr.sbin/zfsd/case_file.h
>   cddl/usr.sbin/zfsd/case_file.cc
>   	Allow CaseFile::Find to match a CaseFile based on Vdev GUID alone.
>   	In CaseFile::ReEvaluate, attempt to online devices even if the newly
>   	arrived device has no pool GUID.
>  =20
>   cddl/usr.sbin/zfsd/vdev_iterator.cc
>   	Iterate through a pool's cache devices as well as its regular
>   	devices.
>  =20
>   Reported by:	avg
>   Reviewed by:	avg
>   MFC after:	3 weeks
>   Sponsored by:	Spectra Logic Corp
>   Differential Revision:	https://reviews.freebsd.org/D12791
>=20
> Modified:
>   head/cddl/usr.sbin/zfsd/case_file.cc
>   head/cddl/usr.sbin/zfsd/case_file.h
>   head/cddl/usr.sbin/zfsd/vdev_iterator.cc
>   head/lib/libdevdctl/guid.h
>=20
> Modified: head/cddl/usr.sbin/zfsd/case_file.cc
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D
> --- head/cddl/usr.sbin/zfsd/case_file.cc	Thu Oct 26 13:23:13 2017
> (r325010) +++ head/cddl/usr.sbin/zfsd/case_file.cc	Thu Oct 26 15:28:18
> 2017	(r325011) @@ -102,7 +102,8 @@ CaseFile::Find(Guid poolGUID, Guid vde=
vGUID)
>  	for (CaseFileList::iterator curCase =3D s_activeCases.begin();
>  	     curCase !=3D s_activeCases.end(); curCase++) {
> =20
> -		if ((*curCase)->PoolGUID() !=3D poolGUID
> +		if (((*curCase)->PoolGUID() !=3D poolGUID
> +		  && Guid::InvalidGuid() !=3D poolGUID)
>  		 || (*curCase)->VdevGUID() !=3D vdevGUID)
>  			continue;
> =20
> @@ -268,7 +269,8 @@ CaseFile::ReEvaluate(const string &devPath, const stri
>  	}
> =20
>  	if (vdev !=3D NULL
> -	 && vdev->PoolGUID() =3D=3D m_poolGUID
> +	 && ( vdev->PoolGUID() =3D=3D m_poolGUID
> +	   || vdev->PoolGUID() =3D=3D Guid::InvalidGuid())
>  	 && vdev->GUID() =3D=3D m_vdevGUID) {
> =20
>  		zpool_vdev_online(pool, vdev->GUIDString().c_str(),
>=20
> Modified: head/cddl/usr.sbin/zfsd/case_file.h
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D
> --- head/cddl/usr.sbin/zfsd/case_file.h	Thu Oct 26 13:23:13 2017	(r325010)
> +++ head/cddl/usr.sbin/zfsd/case_file.h	Thu Oct 26 15:28:18 2017	(r325011)
> @@ -89,6 +89,8 @@ class CaseFile (public)
>  	 * \brief Find a CaseFile object by a vdev's pool/vdev GUID tuple.
>  	 *
>  	 * \param poolGUID  Pool GUID for the vdev of the CaseFile to find.
> +	 * 		    If InvalidGuid, then only match the vdev GUID
> +	 * 		    instead of both pool and vdev GUIDs.
>  	 * \param vdevGUID  Vdev GUID for the vdev of the CaseFile to find.
>  	 *
>  	 * \return  If found, a pointer to a valid CaseFile object.
>=20
> Modified: head/cddl/usr.sbin/zfsd/vdev_iterator.cc
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D
> --- head/cddl/usr.sbin/zfsd/vdev_iterator.cc	Thu Oct 26 13:23:13 2017
> (r325010) +++ head/cddl/usr.sbin/zfsd/vdev_iterator.cc	Thu Oct 26 15:28:18
> 2017	(r325011) @@ -76,7 +76,9 @@ void
>  VdevIterator::Reset()
>  {
>  	nvlist_t  *rootVdev;
> +	nvlist	  **cache_child;
>  	int	   result;
> +	uint_t   cache_children;
> =20
>  	result =3D nvlist_lookup_nvlist(m_poolConfig,
>  				      ZPOOL_CONFIG_VDEV_TREE,
> @@ -85,6 +87,13 @@ VdevIterator::Reset()
>  		throw ZfsdException(m_poolConfig, "Unable to extract "
>  				    "ZPOOL_CONFIG_VDEV_TREE from pool.");
>  	m_vdevQueue.assign(1, rootVdev);
> +	result =3D nvlist_lookup_nvlist_array(rootVdev,
> +				      	    ZPOOL_CONFIG_L2CACHE,
> +				      	    &cache_child,
> +					    &cache_children);
> +	if (result =3D=3D 0)
> +		for (uint_t c =3D 0; c < cache_children; c++)
> +			m_vdevQueue.push_back(cache_child[c]);
>  }
> =20
>  nvlist_t *
>=20
> Modified: head/lib/libdevdctl/guid.h
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D
> --- head/lib/libdevdctl/guid.h	Thu Oct 26 13:23:13 2017	(r325010)
> +++ head/lib/libdevdctl/guid.h	Thu Oct 26 15:28:18 2017	(r325011)
> @@ -62,9 +62,9 @@ class Guid
>  {
>  public:
>  	/* Constructors */
> -	Guid();
>  	Guid(uint64_t guid);
>  	Guid(const std::string &guid);
> +	static Guid InvalidGuid();
> =20
>  	/* Assignment */
>  	Guid& operator=3D(const Guid& rhs);
> @@ -80,23 +80,24 @@ class Guid
>  	operator uint64_t()		 const;
>  	operator bool()			 const;
> =20
> -	static const uint64_t INVALID_GUID =3D 0;
>  protected:
> +	static const uint64_t INVALID_GUID =3D 0;
> +
>  	/* The integer value of the GUID. */
>  	uint64_t  m_GUID;
>  };
> =20
>  //- Guid Inline Public Methods -----------------------------------------=
-------
>  inline
> -Guid::Guid()
> -  : m_GUID(INVALID_GUID)
> +Guid::Guid(uint64_t guid)
> +  : m_GUID(guid)
>  {
>  }
> =20
> -inline
> -Guid::Guid(uint64_t guid)
> -  : m_GUID(guid)
> +inline Guid
> +Guid::InvalidGuid()
>  {
> +	return (Guid(INVALID_GUID));
>  }
> =20
>  inline Guid&
> _______________________________________________
> svn-src-head@freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/svn-src-head
> To unsubscribe, send any mail to "svn-src-head-unsubscribe@freebsd.org"


Building world and kernel on revision 325014 fails with=20

[...]
=3D=3D=3D> gnu/usr.bin/binutils/ld (all)
--- all_subdir_lib ---
--- lrint_test ---
(cd /usr/src/lib/msun/tests &&  DEPENDFILE=3D.depend.lrint_test  NO_SUBDIR=
=3D1 make
-f /usr/src/lib/msun/tests/Makefile _RECURSING_PROGS=3Dt  PROG=3Dlrint_test=
 ) ---
all_subdir_cddl --- --- all_subdir_cddl/usr.sbin/zfsd ---
--- vdev.o ---
/usr/src/cddl/usr.sbin/zfsd/vdev.cc:81:7: error: constructor for 'Vdev' mus=
t explicitly
initialize the member 'm_poolGUID' which does not have a default constructo=
r Vdev::Vdev()

and this pacth seems to be the culprit.


Kind regards,

Oliver

--=20
O. Hartmann

Ich widerspreche der Nutzung oder =C3=9Cbermittlung meiner Daten f=C3=BCr
Werbezwecke oder f=C3=BCr die Markt- oder Meinungsforschung (=C2=A7 28 Abs.=
 4 BDSG).

--Sig_/fmn.CyBi2jMOTbw.9pdX8y2
Content-Type: application/pgp-signature
Content-Description: OpenPGP digital signature

-----BEGIN PGP SIGNATURE-----

iLUEARMKAB0WIQQZVZMzAtwC2T/86TrS528fyFhYlAUCWfIYygAKCRDS528fyFhY
lEsxAf9B4z69n/pPobqUgNynscdBeD+4fI7dtL33Yat9Wh9Vpy0FGDp7Oitaho3Z
RYplJRJ9xrW06mCpJ+KcpW1WnM96Af93uHdC8qVVaetnk8mCn2oROEj7T2lCgkSS
WKvygjgozvSBSrBv9PSEuCvt4JJrulzlI1VD1mpPT/UAtjOyHaUW
=uS/l
-----END PGP SIGNATURE-----

--Sig_/fmn.CyBi2jMOTbw.9pdX8y2--



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