Illumos #3006
[zfs.git] / module / zfs / dsl_synctask.c
index 832685b..75eb507 100644 (file)
@@ -147,7 +147,7 @@ dsl_sync_task_group_destroy(dsl_sync_task_group_t *dstg)
 {
        dsl_sync_task_t *dst;
 
-       while (dst = list_head(&dstg->dstg_tasks)) {
+       while ((dst = list_head(&dstg->dstg_tasks))) {
                list_remove(&dstg->dstg_tasks, dst);
                kmem_free(dst, sizeof (dsl_sync_task_t));
        }
@@ -161,7 +161,7 @@ dsl_sync_task_group_sync(dsl_sync_task_group_t *dstg, dmu_tx_t *tx)
        dsl_pool_t *dp = dstg->dstg_pool;
        uint64_t quota, used;
 
-       ASSERT3U(dstg->dstg_err, ==, 0);
+       ASSERT0(dstg->dstg_err);
 
        /*
         * Check for sufficient space.  We just check against what's
@@ -213,6 +213,8 @@ dsl_sync_task_do(dsl_pool_t *dp,
        dsl_sync_task_group_t *dstg;
        int err;
 
+       ASSERT(spa_writeable(dp->dp_spa));
+
        dstg = dsl_sync_task_group_create(dp);
        dsl_sync_task_create(dstg, checkfunc, syncfunc,
            arg1, arg2, blocks_modified);
@@ -228,8 +230,16 @@ dsl_sync_task_do_nowait(dsl_pool_t *dp,
 {
        dsl_sync_task_group_t *dstg;
 
+       if (!spa_writeable(dp->dp_spa))
+               return;
+
        dstg = dsl_sync_task_group_create(dp);
        dsl_sync_task_create(dstg, checkfunc, syncfunc,
            arg1, arg2, blocks_modified);
        dsl_sync_task_group_nowait(dstg, tx);
 }
+
+#if defined(_KERNEL) && defined(HAVE_SPL)
+EXPORT_SYMBOL(dsl_sync_task_do);
+EXPORT_SYMBOL(dsl_sync_task_do_nowait);
+#endif