usr/src/uts/common/fs/zfs/dmu_objset.c
changeset 8080 4299ee7a727e
parent 7754 b80e4842ad54
child 8213 c759c48f7a69
equal deleted inserted replaced
8079:5ecb87815e82 8080:4299ee7a727e
  1211 	 */
  1211 	 */
  1212 	err = func(spa, thisobj, name, arg);
  1212 	err = func(spa, thisobj, name, arg);
  1213 	return (err);
  1213 	return (err);
  1214 }
  1214 }
  1215 
  1215 
       
  1216 /* ARGSUSED */
       
  1217 int
       
  1218 dmu_objset_prefetch(char *name, void *arg)
       
  1219 {
       
  1220 	objset_t *os;
       
  1221 	dsl_dataset_t *ds;
       
  1222 
       
  1223 	os = kmem_alloc(sizeof (objset_t), KM_SLEEP);
       
  1224 	if (dsl_dataset_hold(name, os, &ds)) {
       
  1225 		kmem_free(os, sizeof (objset_t));
       
  1226 		return (0);
       
  1227 	}
       
  1228 
       
  1229 	if (!BP_IS_HOLE(&ds->ds_phys->ds_bp)) {
       
  1230 		uint32_t aflags = ARC_NOWAIT | ARC_PREFETCH;
       
  1231 		zbookmark_t zb;
       
  1232 
       
  1233 		zb.zb_objset = ds->ds_object;
       
  1234 		zb.zb_object = 0;
       
  1235 		zb.zb_level = -1;
       
  1236 		zb.zb_blkid = 0;
       
  1237 
       
  1238 		(void) arc_read_nolock(NULL, dsl_dataset_get_spa(ds),
       
  1239 		    &ds->ds_phys->ds_bp, NULL, NULL, ZIO_PRIORITY_ASYNC_READ,
       
  1240 		    ZIO_FLAG_CANFAIL | ZIO_FLAG_SPECULATIVE, &aflags, &zb);
       
  1241 	}
       
  1242 
       
  1243 	dsl_dataset_rele(ds, os);
       
  1244 	kmem_free(os, sizeof (objset_t));
       
  1245 	return (0);
       
  1246 }
       
  1247 
  1216 void
  1248 void
  1217 dmu_objset_set_user(objset_t *os, void *user_ptr)
  1249 dmu_objset_set_user(objset_t *os, void *user_ptr)
  1218 {
  1250 {
  1219 	ASSERT(MUTEX_HELD(&os->os->os_user_ptr_lock));
  1251 	ASSERT(MUTEX_HELD(&os->os->os_user_ptr_lock));
  1220 	os->os->os_user_ptr = user_ptr;
  1252 	os->os->os_user_ptr = user_ptr;