diff options
author | Alan Somers <asomers@FreeBSD.org> | 2017-10-26 15:28:18 +0000 |
---|---|---|
committer | Alan Somers <asomers@FreeBSD.org> | 2017-10-26 15:28:18 +0000 |
commit | 12a88a3d637e7e7a3726e8dedbcf82cb96cea529 (patch) | |
tree | 60d86f54828d5cac293e9367b68fcd7eb77806cf | |
parent | 79b67c8d4a6c421a42edfd087b3ee84856e7e118 (diff) |
Notes
-rw-r--r-- | cddl/usr.sbin/zfsd/case_file.cc | 6 | ||||
-rw-r--r-- | cddl/usr.sbin/zfsd/case_file.h | 2 | ||||
-rw-r--r-- | cddl/usr.sbin/zfsd/vdev_iterator.cc | 9 | ||||
-rw-r--r-- | lib/libdevdctl/guid.h | 15 |
4 files changed, 23 insertions, 9 deletions
diff --git a/cddl/usr.sbin/zfsd/case_file.cc b/cddl/usr.sbin/zfsd/case_file.cc index 0cd659622e945..c3105853b29ce 100644 --- a/cddl/usr.sbin/zfsd/case_file.cc +++ b/cddl/usr.sbin/zfsd/case_file.cc @@ -102,7 +102,8 @@ CaseFile::Find(Guid poolGUID, Guid vdevGUID) for (CaseFileList::iterator curCase = s_activeCases.begin(); curCase != s_activeCases.end(); curCase++) { - if ((*curCase)->PoolGUID() != poolGUID + if (((*curCase)->PoolGUID() != poolGUID + && Guid::InvalidGuid() != poolGUID) || (*curCase)->VdevGUID() != vdevGUID) continue; @@ -268,7 +269,8 @@ CaseFile::ReEvaluate(const string &devPath, const string &physPath, Vdev *vdev) } if (vdev != NULL - && vdev->PoolGUID() == m_poolGUID + && ( vdev->PoolGUID() == m_poolGUID + || vdev->PoolGUID() == Guid::InvalidGuid()) && vdev->GUID() == m_vdevGUID) { zpool_vdev_online(pool, vdev->GUIDString().c_str(), diff --git a/cddl/usr.sbin/zfsd/case_file.h b/cddl/usr.sbin/zfsd/case_file.h index aa2a447e8a472..fcb1261f2a672 100644 --- a/cddl/usr.sbin/zfsd/case_file.h +++ b/cddl/usr.sbin/zfsd/case_file.h @@ -89,6 +89,8 @@ 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. diff --git a/cddl/usr.sbin/zfsd/vdev_iterator.cc b/cddl/usr.sbin/zfsd/vdev_iterator.cc index 07f19d2b074c9..31a4ce962970e 100644 --- a/cddl/usr.sbin/zfsd/vdev_iterator.cc +++ b/cddl/usr.sbin/zfsd/vdev_iterator.cc @@ -76,7 +76,9 @@ void VdevIterator::Reset() { nvlist_t *rootVdev; + nvlist **cache_child; int result; + uint_t cache_children; result = 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 = nvlist_lookup_nvlist_array(rootVdev, + ZPOOL_CONFIG_L2CACHE, + &cache_child, + &cache_children); + if (result == 0) + for (uint_t c = 0; c < cache_children; c++) + m_vdevQueue.push_back(cache_child[c]); } nvlist_t * diff --git a/lib/libdevdctl/guid.h b/lib/libdevdctl/guid.h index ede414bec6492..e40d3f983aab7 100644 --- a/lib/libdevdctl/guid.h +++ b/lib/libdevdctl/guid.h @@ -62,9 +62,9 @@ class Guid { public: /* Constructors */ - Guid(); Guid(uint64_t guid); Guid(const std::string &guid); + static Guid InvalidGuid(); /* Assignment */ Guid& operator=(const Guid& rhs); @@ -80,23 +80,24 @@ public: operator uint64_t() const; operator bool() const; - static const uint64_t INVALID_GUID = 0; protected: + static const uint64_t INVALID_GUID = 0; + /* The integer value of the GUID. */ uint64_t m_GUID; }; //- Guid Inline Public Methods ------------------------------------------------ inline -Guid::Guid() - : m_GUID(INVALID_GUID) +Guid::Guid(uint64_t guid) + : m_GUID(guid) { } -inline -Guid::Guid(uint64_t guid) - : m_GUID(guid) +inline Guid +Guid::InvalidGuid() { + return (Guid(INVALID_GUID)); } inline Guid& |