Date: Mon, 14 Oct 2013 21:08:32 +0000 (UTC) From: Alan Somers <asomers@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r256456 - projects/zfsd/head/cddl/sbin/zfsd Message-ID: <201310142108.r9EL8W6C058358@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: asomers Date: Mon Oct 14 21:08:31 2013 New Revision: 256456 URL: http://svnweb.freebsd.org/changeset/base/256456 Log: Fix compiler warnings in zfsd cddl/sbin/zfsd/case_file.cc: Use proper printf/scanf format specifiers so Zfsd operates on uint64_t variables instead of uintmax_t variables that are then assumed to be 64 bits in size. cddl/sbin/zfsd/case_file.cc: cddl/sbin/zfsd/vdev.cc: When fetching datastructures from nvlists that are an array of uint64_ts, use a uint64_t pointer to call into the nvlist API and a reinterpret_cast<> to convert it to the pointer type of interest. Fixes strict-aliasing warnings. Submitted by: gibbs Approved by: ken (mentor) Sponsored by: Spectra Logic Corporation Modified: projects/zfsd/head/cddl/sbin/zfsd/case_file.cc projects/zfsd/head/cddl/sbin/zfsd/vdev.cc Modified: projects/zfsd/head/cddl/sbin/zfsd/case_file.cc ============================================================================== --- projects/zfsd/head/cddl/sbin/zfsd/case_file.cc Mon Oct 14 21:05:09 2013 (r256455) +++ projects/zfsd/head/cddl/sbin/zfsd/case_file.cc Mon Oct 14 21:08:31 2013 (r256456) @@ -383,7 +383,7 @@ CaseFile::ActivateSpare() { ZpoolList zpl(ZpoolList::ZpoolByGUID, &m_poolGUID); if (zpl.empty()) { syslog(LOG_ERR, "CaseFile::ActivateSpare: Could not find pool " - "for pool_guid %ju.", (uint64_t)m_poolGUID); + "for pool_guid %"PRIu64".", (uint64_t)m_poolGUID); return (false); } zhp = zpl.front(); @@ -407,16 +407,18 @@ CaseFile::ActivateSpare() { return (false); } for (i = 0; i < nspares; i++) { + uint64_t *nvlist_array; vdev_stat_t *vs; - unsigned nstats; + uint_t nstats; if (nvlist_lookup_uint64_array(spares[i], - ZPOOL_CONFIG_VDEV_STATS, (uint64_t**)&vs, &nstats) != 0) { + ZPOOL_CONFIG_VDEV_STATS, &nvlist_array, &nstats) != 0) { syslog(LOG_ERR, "CaseFile::ActivateSpare: Could not " "find vdev stats for pool %s, spare %d", poolname, i); return (false); } + vs = reinterpret_cast<vdev_stat_t *>(nvlist_array); if ((vs->vs_aux != VDEV_AUX_SPARED) && (vs->vs_state == VDEV_STATE_HEALTHY)) { @@ -538,11 +540,11 @@ CaseFile::OnGracePeriodEnded(void *arg) int CaseFile::DeSerializeSelector(const struct dirent *dirEntry) { - uintmax_t poolGUID; - uintmax_t vdevGUID; + uint64_t poolGUID; + uint64_t vdevGUID; if (dirEntry->d_type == DT_REG - && sscanf(dirEntry->d_name, "pool_%ju_vdev_%ju.case", + && sscanf(dirEntry->d_name, "pool_%"PRIu64"_vdev_%"PRIu64".case", &poolGUID, &vdevGUID) == 2) return (1); return (0); @@ -556,11 +558,11 @@ CaseFile::DeSerializeFile(const char *fi CaseFile *caseFile(NULL); try { - uintmax_t poolGUID; - uintmax_t vdevGUID; + uint64_t poolGUID; + uint64_t vdevGUID; nvlist_t *vdevConf; - sscanf(fileName, "pool_%ju_vdev_%ju.case", + sscanf(fileName, "pool_%"PRIu64"_vdev_%"PRIu64".case", &poolGUID, &vdevGUID); existingCaseFile = Find(Guid(poolGUID), Guid(vdevGUID)); if (existingCaseFile != NULL) { @@ -832,7 +834,7 @@ CaseFile::Replace(const char* vdev_type, ZpoolList zpl(ZpoolList::ZpoolByGUID, &m_poolGUID); if (zpl.empty()) { syslog(LOG_ERR, "CaseFile::Replace: could not find pool for " - "pool_guid %ju.", (uint64_t)m_poolGUID); + "pool_guid %"PRIu64".", (uint64_t)m_poolGUID); return (false); } zhp = zpl.front(); Modified: projects/zfsd/head/cddl/sbin/zfsd/vdev.cc ============================================================================== --- projects/zfsd/head/cddl/sbin/zfsd/vdev.cc Mon Oct 14 21:05:09 2013 (r256455) +++ projects/zfsd/head/cddl/sbin/zfsd/vdev.cc Mon Oct 14 21:08:31 2013 (r256456) @@ -120,6 +120,7 @@ Vdev::Vdev(nvlist_t *labelConfig) vdev_state Vdev::State() const { + uint64_t *nvlist_array; vdev_stat_t *vs; uint_t vsc; @@ -136,8 +137,10 @@ Vdev::State() const } if (nvlist_lookup_uint64_array(m_config, ZPOOL_CONFIG_VDEV_STATS, - (uint64_t **)&vs, &vsc) == 0) + &nvlist_array, &vsc) == 0) { + vs = reinterpret_cast<vdev_stat_t *>(nvlist_array); return (static_cast<vdev_state>(vs->vs_state)); + } /* * Stats are not available. This vdev was created from a label.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201310142108.r9EL8W6C058358>