diff usr/src/uts/common/fs/zfs/spa.c @ 6689:47572a2f5e73

6610506 Eliminate or improve retry logic from callers of dmu_objset_open() 6695465 divide by zero in txg_sync_thread() under heavy load
author maybee
date Thu, 22 May 2008 11:13:47 -0700
parents be079d6124af
children ccf0a8c4b9a5
line wrap: on
line diff
--- a/usr/src/uts/common/fs/zfs/spa.c	Thu May 22 11:05:03 2008 -0700
+++ b/usr/src/uts/common/fs/zfs/spa.c	Thu May 22 11:13:47 2008 -0700
@@ -201,9 +201,8 @@
 
 				dp = spa_get_dsl(spa);
 				rw_enter(&dp->dp_config_rwlock, RW_READER);
-				if (err = dsl_dataset_open_obj(dp,
-				    za.za_first_integer, NULL, DS_MODE_NONE,
-				    FTAG, &ds)) {
+				if (err = dsl_dataset_hold_obj(dp,
+				    za.za_first_integer, FTAG, &ds)) {
 					rw_exit(&dp->dp_config_rwlock);
 					break;
 				}
@@ -212,7 +211,7 @@
 				    MAXNAMELEN + strlen(MOS_DIR_NAME) + 1,
 				    KM_SLEEP);
 				dsl_dataset_name(ds, strval);
-				dsl_dataset_close(ds, DS_MODE_NONE, FTAG);
+				dsl_dataset_rele(ds, FTAG);
 				rw_exit(&dp->dp_config_rwlock);
 			} else {
 				strval = NULL;
@@ -329,7 +328,7 @@
 				}
 
 				if (error = dmu_objset_open(strval, DMU_OST_ZFS,
-				    DS_MODE_STANDARD | DS_MODE_READONLY, &os))
+				    DS_MODE_USER | DS_MODE_READONLY, &os))
 					break;
 				objnum = dmu_objset_id(os);
 				dmu_objset_close(os);