]> granicus.if.org Git - zfs/commitdiff
Fix zfs_ioc_objset_stats
authorBrian Behlendorf <behlendorf1@llnl.gov>
Thu, 26 Aug 2010 17:34:33 +0000 (10:34 -0700)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Tue, 31 Aug 2010 15:38:47 +0000 (08:38 -0700)
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>
module/zfs/zfs_ioctl.c

index 4e26cae201c42093cc11e9c9f82f4739cfe44086..3e149ab33472e7ea91c3dbdce6b9b48be75f818c 100644 (file)
@@ -1748,9 +1748,10 @@ zfs_ioc_objset_stats_impl(zfs_cmd_t *zc, objset_t *os)
                 */
                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);
        }