diff options
author | Lin Ling <Lin.Ling@Sun.COM> | 2009-03-10 14:53:31 -0700 |
---|---|---|
committer | Lin Ling <Lin.Ling@Sun.COM> | 2009-03-10 14:53:31 -0700 |
commit | 8f63aa464994c24e12bd657bac93d1b2e2df2d1c (patch) | |
tree | dc6da4be98c639c971c6cf60c3e38f915130d056 /usr/src | |
parent | 05945f8bf9e004c8feb0e1f01f574f2cbb5a485b (diff) | |
download | illumos-gate-8f63aa464994c24e12bd657bac93d1b2e2df2d1c.tar.gz |
6809347 looping in dnode_special_close() at an error path of spa_tryimport()
Diffstat (limited to 'usr/src')
-rw-r--r-- | usr/src/uts/common/fs/zfs/dsl_pool.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/usr/src/uts/common/fs/zfs/dsl_pool.c b/usr/src/uts/common/fs/zfs/dsl_pool.c index dacc57c81c..35ad2e2213 100644 --- a/usr/src/uts/common/fs/zfs/dsl_pool.c +++ b/usr/src/uts/common/fs/zfs/dsl_pool.c @@ -19,7 +19,7 @@ * CDDL HEADER END */ /* - * Copyright 2008 Sun Microsystems, Inc. All rights reserved. + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -129,14 +129,15 @@ dsl_pool_open(spa_t *spa, uint64_t txg, dsl_pool_t **dpp) goto out; err = dsl_dataset_hold_obj(dp, dd->dd_phys->dd_head_dataset_obj, FTAG, &ds); + if (err == 0) { + err = dsl_dataset_hold_obj(dp, + ds->ds_phys->ds_prev_snap_obj, dp, + &dp->dp_origin_snap); + dsl_dataset_rele(ds, FTAG); + } + dsl_dir_close(dd, dp); if (err) goto out; - err = dsl_dataset_hold_obj(dp, ds->ds_phys->ds_prev_snap_obj, - dp, &dp->dp_origin_snap); - if (err) - goto out; - dsl_dataset_rele(ds, FTAG); - dsl_dir_close(dd, dp); } /* get scrub status */ |