Add missing zfs_ioc_objset_stats() error handling

Interestingly this looks like an upstream bug as well.  If for some
reason we are unable to get a zvols statistics, because perhaps the
zpool is hopelessly corrupt, we would trigger the VERIFY.  This
commit adds the proper error handling just to propagate the error
back to user space.  Now the user space tools still must handle this
properly but in the worst case the tool will crash or perhaps have
some missing output.  That's far far better than crashing the host.

Closes #45
This commit is contained in:
Brian Behlendorf 2010-08-06 10:46:39 -07:00
parent b3c82b1b18
commit 89f0abf9b5
3 changed files with 16 additions and 2 deletions

1
.topdeps Normal file
View File

@ -0,0 +1 @@
master

12
.topmsg Normal file
View File

@ -0,0 +1,12 @@
From: Brian Behlendorf <behlendorf1@llnl.gov>
Subject: [PATCH] fix zfs_ioc_objset_stats
Interestingly this looks like an upstream bug as well. If for some
reason we are unable to get a zvols statistics, because perhaps the
zpool is hopelessly corrupt, we would trigger the VERIFY. This
commit adds the proper error handling just to propagate the error
back to user space. Now the user space tools still must handle this
properly but in the worst case the tool will crash or perhaps have
some missing output. That's far far better than crashing the host.
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>

View File

@ -1611,9 +1611,10 @@ zfs_ioc_objset_stats(zfs_cmd_t *zc)
*/
if (!zc->zc_objset_stats.dds_inconsistent) {
if (dmu_objset_type(os) == DMU_OST_ZVOL)
VERIFY(zvol_get_stats(os, nv) == 0);
error = zvol_get_stats(os, nv);
}
error = put_nvlist(zc, nv);
if (error == 0)
error = put_nvlist(zc, nv);
nvlist_free(nv);
}