Print this page
2882 implement libzfs_core
2883 changing "canmount" property to "on" should not always remount dataset
2900 "zfs snapshot" should be able to create multiple, arbitrary snapshots at once
Reviewed by: George Wilson <george.wilson@delphix.com>
Reviewed by: Chris Siden <christopher.siden@delphix.com>
Reviewed by: Garrett D'Amore <garrett@damore.org>
Reviewed by: Bill Pijewski <wdp@joyent.com>
Reviewed by: Dan Kruchinin <dan.kruchinin@gmail.com>

@@ -18,10 +18,11 @@
  *
  * CDDL HEADER END
  */
 /*
  * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012 by Delphix. All rights reserved.
  */
 
 #include <sys/dmu.h>
 #include <sys/dmu_tx.h>
 #include <sys/dsl_pool.h>

@@ -83,21 +84,21 @@
 
         txg = dmu_tx_get_txg(tx);
 
         /* Do a preliminary error check. */
         dstg->dstg_err = 0;
-        rw_enter(&dstg->dstg_pool->dp_config_rwlock, RW_READER);
-        for (dst = list_head(&dstg->dstg_tasks); dst;
-            dst = list_next(&dstg->dstg_tasks, dst)) {
 #ifdef ZFS_DEBUG
                 /*
                  * Only check half the time, otherwise, the sync-context
                  * check will almost never fail.
                  */
                 if (spa_get_random(2) == 0)
-                        continue;
+                goto skip;
 #endif
+        rw_enter(&dstg->dstg_pool->dp_config_rwlock, RW_READER);
+        for (dst = list_head(&dstg->dstg_tasks); dst;
+            dst = list_next(&dstg->dstg_tasks, dst)) {
                 dst->dst_err =
                     dst->dst_checkfunc(dst->dst_arg1, dst->dst_arg2, tx);
                 if (dst->dst_err)
                         dstg->dstg_err = dst->dst_err;
         }

@@ -105,10 +106,11 @@
 
         if (dstg->dstg_err) {
                 dmu_tx_commit(tx);
                 return (dstg->dstg_err);
         }
+skip:
 
         /*
          * We don't generally have many sync tasks, so pay the price of
          * add_tail to get the tasks executed in the right order.
          */