diff options
author | Andriy Gapon <avg@FreeBSD.org> | 2013-11-20 11:09:12 +0000 |
---|---|---|
committer | Andriy Gapon <avg@FreeBSD.org> | 2013-11-20 11:09:12 +0000 |
commit | 5bef7b63cc3cfb8de7074aa903f2e8646262ff2a (patch) | |
tree | afe8c7c2174bb90ae044382cf5049b0fc78b7a30 | |
parent | 0ec97988142dfa9b61795254e0cbb3c8942124d6 (diff) | |
download | src-5bef7b63cc3cfb8de7074aa903f2e8646262ff2a.tar.gz src-5bef7b63cc3cfb8de7074aa903f2e8646262ff2a.zip |
Notes
-rw-r--r-- | uts/common/fs/zfs/dsl_userhold.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/uts/common/fs/zfs/dsl_userhold.c b/uts/common/fs/zfs/dsl_userhold.c index a948e10b12b4..7f2c26f766e3 100644 --- a/uts/common/fs/zfs/dsl_userhold.c +++ b/uts/common/fs/zfs/dsl_userhold.c @@ -564,21 +564,23 @@ dsl_dataset_user_release_impl(nvlist_t *holds, nvlist_t *errlist, ddura.ddura_holdfunc = dsl_dataset_hold_obj_string; pool = spa_name(tmpdp->dp_spa); #ifdef _KERNEL - dsl_pool_config_enter(tmpdp, FTAG); for (pair = nvlist_next_nvpair(holds, NULL); pair != NULL; pair = nvlist_next_nvpair(holds, pair)) { dsl_dataset_t *ds; + dsl_pool_config_enter(tmpdp, FTAG); error = dsl_dataset_hold_obj_string(tmpdp, nvpair_name(pair), FTAG, &ds); if (error == 0) { char name[MAXNAMELEN]; dsl_dataset_name(ds, name); + dsl_pool_config_exit(tmpdp, FTAG); dsl_dataset_rele(ds, FTAG); (void) zfs_unmount_snap(name); + } else { + dsl_pool_config_exit(tmpdp, FTAG); } } - dsl_pool_config_exit(tmpdp, FTAG); #endif } else { /* Non-temporary holds are specified by name. */ |