summaryrefslogtreecommitdiff
path: root/usr/src
diff options
context:
space:
mode:
authorLin Ling <Lin.Ling@Sun.COM>2009-03-10 14:53:31 -0700
committerLin Ling <Lin.Ling@Sun.COM>2009-03-10 14:53:31 -0700
commit8f63aa464994c24e12bd657bac93d1b2e2df2d1c (patch)
treedc6da4be98c639c971c6cf60c3e38f915130d056 /usr/src
parent05945f8bf9e004c8feb0e1f01f574f2cbb5a485b (diff)
downloadillumos-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.c15
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 */