summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTom Caputi <[email protected]>2017-10-18 13:08:36 -0400
committerBrian Behlendorf <[email protected]>2017-10-18 10:08:36 -0700
commit35df0bb5565c81ba52de430108b37eced9de0606 (patch)
treef220b19010b4873dd20035f07d7e6a165c891469
parentca9b8e8797dbb7109a052bd3d7316ef27081531c (diff)
Fix ASSERT in dmu_free_long_object_raw()
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 <[email protected]> Reviewed-by: Brian Behlendorf <[email protected]> Signed-off-by: Tom Caputi <[email protected]> Closes #6766
-rw-r--r--module/zfs/dmu.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/module/zfs/dmu.c b/module/zfs/dmu.c
index 1aba0b133..42889504f 100644
--- a/module/zfs/dmu.c
+++ b/module/zfs/dmu.c
@@ -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 {