mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-12-27 03:19:35 +03:00
Mutex leak in dsl_dataset_hold_obj()
In addition to dsl_dataset_evict_async() releasing a hold, there is
an error case in dsl_dataset_hold_obj() which had missed 4 additional
release calls. This was introduced in a1d477c24
.
openzfsonosx-commit: https://github.com/openzfsonosx/zfs/commit/63ff7f1c
Authored by: Jorgen Lundman <lundman@lundman.net>
Reviewed-by: Olaf Faaland <faaland1@llnl.gov>
Reviewed by: Brian Behlendorf <behlendorf1@llnl.gov>
Ported-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #8517
This commit is contained in:
parent
45001b949c
commit
d10b2f1d35
@ -650,10 +650,14 @@ dsl_dataset_hold_obj(dsl_pool_t *dp, uint64_t dsobj, void *tag,
|
|||||||
if (ds->ds_prev)
|
if (ds->ds_prev)
|
||||||
dsl_dataset_rele(ds->ds_prev, ds);
|
dsl_dataset_rele(ds->ds_prev, ds);
|
||||||
dsl_dir_rele(ds->ds_dir, ds);
|
dsl_dir_rele(ds->ds_dir, ds);
|
||||||
|
list_destroy(&ds->ds_prop_cbs);
|
||||||
|
list_destroy(&ds->ds_sendstreams);
|
||||||
mutex_destroy(&ds->ds_lock);
|
mutex_destroy(&ds->ds_lock);
|
||||||
mutex_destroy(&ds->ds_opening_lock);
|
mutex_destroy(&ds->ds_opening_lock);
|
||||||
mutex_destroy(&ds->ds_sendstream_lock);
|
mutex_destroy(&ds->ds_sendstream_lock);
|
||||||
|
mutex_destroy(&ds->ds_remap_deadlist_lock);
|
||||||
zfs_refcount_destroy(&ds->ds_longholds);
|
zfs_refcount_destroy(&ds->ds_longholds);
|
||||||
|
rrw_destroy(&ds->ds_bp_rwlock);
|
||||||
kmem_free(ds, sizeof (dsl_dataset_t));
|
kmem_free(ds, sizeof (dsl_dataset_t));
|
||||||
if (err != 0) {
|
if (err != 0) {
|
||||||
dmu_buf_rele(dbuf, tag);
|
dmu_buf_rele(dbuf, tag);
|
||||||
|
Loading…
Reference in New Issue
Block a user