svn commit: r256456 - projects/zfsd/head/cddl/sbin/zfsd

Alan Somers asomers at FreeBSD.org
Mon Oct 14 21:08:32 UTC 2013


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.


More information about the svn-src-projects mailing list