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>

@@ -35,10 +35,13 @@
 
 #ifdef  __cplusplus
 extern "C" {
 #endif
 
+struct dsl_pool;
+struct dsl_dataset;
+
 /*
  * Intent log format:
  *
  * Each objset has its own intent log.  The log header (zil_header_t)
  * for objset N's intent log is kept in the Nth object of the SPA's

@@ -402,12 +405,14 @@
 extern void     zil_itx_assign(zilog_t *zilog, itx_t *itx, dmu_tx_t *tx);
 
 extern void     zil_commit(zilog_t *zilog, uint64_t oid);
 
 extern int      zil_vdev_offline(const char *osname, void *txarg);
-extern int      zil_claim(const char *osname, void *txarg);
-extern int      zil_check_log_chain(const char *osname, void *txarg);
+extern int      zil_claim(struct dsl_pool *dp,
+    struct dsl_dataset *ds, void *txarg);
+extern int      zil_check_log_chain(struct dsl_pool *dp,
+    struct dsl_dataset *ds, void *tx);
 extern void     zil_sync(zilog_t *zilog, dmu_tx_t *tx);
 extern void     zil_clean(zilog_t *zilog, uint64_t synced_txg);
 
 extern int      zil_suspend(const char *osname, void **cookiep);
 extern void     zil_resume(void *cookie);