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; |