Print this page
5269 zfs: zpool import slow
PORTING: this code relies on the property of taskq_wait to wait
until no more tasks are queued and no more tasks are active. As
we always queue new tasks from within other tasks, task_wait
reliably waits for the full recursion to finish, even though we
enqueue new tasks after taskq_wait has been called.
On platforms other than illumos, taskq_wait may not have this
property.
Reviewed by: Matthew Ahrens <mahrens@delphix.com>
Reviewed by: Dan McDonald <danmcd@omniti.com>
Reviewed by: George Wilson <george.wilson@delphix.com>


 137 void dsl_pool_close(dsl_pool_t *dp);
 138 dsl_pool_t *dsl_pool_create(spa_t *spa, nvlist_t *zplprops, uint64_t txg);
 139 void dsl_pool_sync(dsl_pool_t *dp, uint64_t txg);
 140 void dsl_pool_sync_done(dsl_pool_t *dp, uint64_t txg);
 141 int dsl_pool_sync_context(dsl_pool_t *dp);
 142 uint64_t dsl_pool_adjustedsize(dsl_pool_t *dp, boolean_t netfree);
 143 uint64_t dsl_pool_adjustedfree(dsl_pool_t *dp, boolean_t netfree);
 144 void dsl_pool_dirty_space(dsl_pool_t *dp, int64_t space, dmu_tx_t *tx);
 145 void dsl_pool_undirty_space(dsl_pool_t *dp, int64_t space, uint64_t txg);
 146 void dsl_free(dsl_pool_t *dp, uint64_t txg, const blkptr_t *bpp);
 147 void dsl_free_sync(zio_t *pio, dsl_pool_t *dp, uint64_t txg,
 148     const blkptr_t *bpp);
 149 void dsl_pool_create_origin(dsl_pool_t *dp, dmu_tx_t *tx);
 150 void dsl_pool_upgrade_clones(dsl_pool_t *dp, dmu_tx_t *tx);
 151 void dsl_pool_upgrade_dir_clones(dsl_pool_t *dp, dmu_tx_t *tx);
 152 void dsl_pool_mos_diduse_space(dsl_pool_t *dp,
 153     int64_t used, int64_t comp, int64_t uncomp);
 154 void dsl_pool_config_enter(dsl_pool_t *dp, void *tag);
 155 void dsl_pool_config_exit(dsl_pool_t *dp, void *tag);
 156 boolean_t dsl_pool_config_held(dsl_pool_t *dp);

 157 boolean_t dsl_pool_need_dirty_delay(dsl_pool_t *dp);
 158 
 159 taskq_t *dsl_pool_vnrele_taskq(dsl_pool_t *dp);
 160 
 161 int dsl_pool_user_hold(dsl_pool_t *dp, uint64_t dsobj,
 162     const char *tag, uint64_t now, dmu_tx_t *tx);
 163 int dsl_pool_user_release(dsl_pool_t *dp, uint64_t dsobj,
 164     const char *tag, dmu_tx_t *tx);
 165 void dsl_pool_clean_tmp_userrefs(dsl_pool_t *dp);
 166 int dsl_pool_open_special_dir(dsl_pool_t *dp, const char *name, dsl_dir_t **);
 167 int dsl_pool_hold(const char *name, void *tag, dsl_pool_t **dp);
 168 void dsl_pool_rele(dsl_pool_t *dp, void *tag);
 169 
 170 #ifdef  __cplusplus
 171 }
 172 #endif
 173 
 174 #endif /* _SYS_DSL_POOL_H */


 137 void dsl_pool_close(dsl_pool_t *dp);
 138 dsl_pool_t *dsl_pool_create(spa_t *spa, nvlist_t *zplprops, uint64_t txg);
 139 void dsl_pool_sync(dsl_pool_t *dp, uint64_t txg);
 140 void dsl_pool_sync_done(dsl_pool_t *dp, uint64_t txg);
 141 int dsl_pool_sync_context(dsl_pool_t *dp);
 142 uint64_t dsl_pool_adjustedsize(dsl_pool_t *dp, boolean_t netfree);
 143 uint64_t dsl_pool_adjustedfree(dsl_pool_t *dp, boolean_t netfree);
 144 void dsl_pool_dirty_space(dsl_pool_t *dp, int64_t space, dmu_tx_t *tx);
 145 void dsl_pool_undirty_space(dsl_pool_t *dp, int64_t space, uint64_t txg);
 146 void dsl_free(dsl_pool_t *dp, uint64_t txg, const blkptr_t *bpp);
 147 void dsl_free_sync(zio_t *pio, dsl_pool_t *dp, uint64_t txg,
 148     const blkptr_t *bpp);
 149 void dsl_pool_create_origin(dsl_pool_t *dp, dmu_tx_t *tx);
 150 void dsl_pool_upgrade_clones(dsl_pool_t *dp, dmu_tx_t *tx);
 151 void dsl_pool_upgrade_dir_clones(dsl_pool_t *dp, dmu_tx_t *tx);
 152 void dsl_pool_mos_diduse_space(dsl_pool_t *dp,
 153     int64_t used, int64_t comp, int64_t uncomp);
 154 void dsl_pool_config_enter(dsl_pool_t *dp, void *tag);
 155 void dsl_pool_config_exit(dsl_pool_t *dp, void *tag);
 156 boolean_t dsl_pool_config_held(dsl_pool_t *dp);
 157 boolean_t dsl_pool_config_held_writer(dsl_pool_t *dp);
 158 boolean_t dsl_pool_need_dirty_delay(dsl_pool_t *dp);
 159 
 160 taskq_t *dsl_pool_vnrele_taskq(dsl_pool_t *dp);
 161 
 162 int dsl_pool_user_hold(dsl_pool_t *dp, uint64_t dsobj,
 163     const char *tag, uint64_t now, dmu_tx_t *tx);
 164 int dsl_pool_user_release(dsl_pool_t *dp, uint64_t dsobj,
 165     const char *tag, dmu_tx_t *tx);
 166 void dsl_pool_clean_tmp_userrefs(dsl_pool_t *dp);
 167 int dsl_pool_open_special_dir(dsl_pool_t *dp, const char *name, dsl_dir_t **);
 168 int dsl_pool_hold(const char *name, void *tag, dsl_pool_t **dp);
 169 void dsl_pool_rele(dsl_pool_t *dp, void *tag);
 170 
 171 #ifdef  __cplusplus
 172 }
 173 #endif
 174 
 175 #endif /* _SYS_DSL_POOL_H */