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