]> granicus.if.org Git - zfs/commitdiff
Handle zap_lookup() failure in ddt_object_load()
authorBrian Behlendorf <behlendorf1@llnl.gov>
Tue, 18 Aug 2015 18:20:22 +0000 (11:20 -0700)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Wed, 19 Aug 2015 21:32:50 +0000 (14:32 -0700)
Failing to lookup a name in the spa_ddt_stat_object should not result
in a panic in ddt_object_load().  The error can be safely returned to
the caller for handling resulting in a useful user error message.

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #3370

module/zfs/ddt.c

index 18557ffb5c1f90fb3118ef7574be2a5c5d225d4f..12c1b7300a2136e088806d8b83a25791578981cd 100644 (file)
@@ -115,13 +115,14 @@ ddt_object_load(ddt_t *ddt, enum ddt_type type, enum ddt_class class)
 
        error = zap_lookup(ddt->ddt_os, DMU_POOL_DIRECTORY_OBJECT, name,
            sizeof (uint64_t), 1, &ddt->ddt_object[type][class]);
-
        if (error != 0)
                return (error);
 
-       VERIFY0(zap_lookup(ddt->ddt_os, ddt->ddt_spa->spa_ddt_stat_object, name,
+       error = zap_lookup(ddt->ddt_os, ddt->ddt_spa->spa_ddt_stat_object, name,
            sizeof (uint64_t), sizeof (ddt_histogram_t) / sizeof (uint64_t),
-           &ddt->ddt_histogram[type][class]));
+           &ddt->ddt_histogram[type][class]);
+       if (error != 0)
+               return (error);
 
        /*
         * Seed the cached statistics.