]> granicus.if.org Git - zfs/commitdiff
Fix ASSERT in dmu_free_long_object_raw()
authorTom Caputi <tcaputi@datto.com>
Wed, 18 Oct 2017 17:08:36 +0000 (13:08 -0400)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Wed, 18 Oct 2017 17:08:36 +0000 (10:08 -0700)
This small patch fixes an issue where dmu_free_long_object_raw()
calls dnode_hold() after freeing the dnode a line above.

Reviewed-by: Jorgen Lundman <lundman@lundman.net>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Tom Caputi <tcaputi@datto.com>
Closes #6766

module/zfs/dmu.c

index 1aba0b133e408c0a5131c00374c6912cc48d1274..42889504f3f32fccc86138b82570aa67db660a7f 100644 (file)
@@ -932,9 +932,10 @@ dmu_free_long_object_impl(objset_t *os, uint64_t object, boolean_t raw)
        dmu_tx_mark_netfree(tx);
        err = dmu_tx_assign(tx, TXG_WAIT);
        if (err == 0) {
-               err = dmu_object_free(os, object, tx);
-               if (err == 0 && raw)
-                       VERIFY0(dmu_object_dirty_raw(os, object, tx));
+               if (raw)
+                       err = dmu_object_dirty_raw(os, object, tx);
+               if (err == 0)
+                       err = dmu_object_free(os, object, tx);
 
                dmu_tx_commit(tx);
        } else {