diff --git a/module/zfs/dsl_deadlist.c b/module/zfs/dsl_deadlist.c index 8b7b7cef1806..dcb324b48ac8 100644 --- a/module/zfs/dsl_deadlist.c +++ b/module/zfs/dsl_deadlist.c @@ -368,8 +368,14 @@ dsl_deadlist_close(dsl_deadlist_t *dl) } avl_destroy(&dl->dl_cache); } - dmu_buf_rele(dl->dl_dbuf, dl); - dl->dl_dbuf = NULL; + /* + * If dmu_bonus_hold() fails in dsl_deadlist_open(), we are left with + * an "open" deadlist that has no hold to release. + */ + if (dl->dl_dbuf != NULL) { + dmu_buf_rele(dl->dl_dbuf, dl); + dl->dl_dbuf = NULL; + } dl->dl_phys = NULL; dl->dl_os = NULL; dl->dl_object = 0;