Print this page
3956 ::vdev -r should work with pipelines
3957 ztest should update the cachefile before killing itself
3958 multiple scans can lead to partial resilvering
3959 ddt entries are not always resilvered
3960 dsl_scan can skip over dedup-ed blocks if physical birth != logical birth
3961 freed gang blocks are not resilvered and can cause pool to suspend
3962 ztest should print out zfs debug buffer before exiting
Reviewed by: Matthew Ahrens <mahrens@delphix.com>
Reviewed by: Adam Leventhal <ahl@delphix.com>

@@ -18,11 +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.
+ * Copyright (c) 2013 by Delphix. All rights reserved.
  * Copyright 2011 Nexenta Systems, Inc.  All rights reserved.
  * Copyright (c) 2013 Steven Hartland. All rights reserved.
  */
 
 /*

@@ -765,10 +765,20 @@
 static void
 ztest_kill(ztest_shared_t *zs)
 {
         zs->zs_alloc = metaslab_class_get_alloc(spa_normal_class(ztest_spa));
         zs->zs_space = metaslab_class_get_space(spa_normal_class(ztest_spa));
+
+        /*
+         * Before we kill off ztest, make sure that the config is updated.
+         * See comment above spa_config_sync().
+         */
+        mutex_enter(&spa_namespace_lock);
+        spa_config_sync(ztest_spa, B_FALSE, B_FALSE);
+        mutex_exit(&spa_namespace_lock);
+
+        zfs_dbgmsg_print(FTAG);
         (void) kill(getpid(), SIGKILL);
 }
 
 static uint64_t
 ztest_random(uint64_t range)

@@ -2729,11 +2739,11 @@
         nvlist_t *root;
         uint64_t leaves;
         uint64_t leaf, top;
         uint64_t ashift = ztest_get_ashift();
         uint64_t oldguid, pguid;
-        size_t oldsize, newsize;
+        uint64_t oldsize, newsize;
         char oldpath[MAXPATHLEN], newpath[MAXPATHLEN];
         int replacing;
         int oldvd_has_siblings = B_FALSE;
         int newvd_is_spare = B_FALSE;
         int oldvd_is_log;

@@ -2888,12 +2898,12 @@
 
         /* XXX workaround 6690467 */
         if (error != expected_error && expected_error != EBUSY) {
                 fatal(0, "attach (%s %llu, %s %llu, %d) "
                     "returned %d, expected %d",
-                    oldpath, (longlong_t)oldsize, newpath,
-                    (longlong_t)newsize, replacing, error, expected_error);
+                    oldpath, oldsize, newpath,
+                    newsize, replacing, error, expected_error);
         }
 
         VERIFY(mutex_unlock(&ztest_vdev_lock) == 0);
 }
 

@@ -4799,11 +4809,11 @@
                  * then we only allow faults on the device that is
                  * resilvering.
                  */
                 if (vd0 != NULL && maxfaults != 1 &&
                     (!vdev_resilver_needed(vd0->vdev_top, NULL, NULL) ||
-                    vd0->vdev_resilvering)) {
+                    vd0->vdev_resilver_txg != 0)) {
                         /*
                          * Make vd0 explicitly claim to be unreadable,
                          * or unwriteable, or reach behind its back
                          * and close the underlying fd.  We can do this if
                          * maxfaults == 0 because we'll fail and reexecute,

@@ -5649,10 +5659,11 @@
 
         txg_wait_synced(spa_get_dsl(spa), 0);
 
         zs->zs_alloc = metaslab_class_get_alloc(spa_normal_class(spa));
         zs->zs_space = metaslab_class_get_space(spa_normal_class(spa));
+        zfs_dbgmsg_print(FTAG);
 
         umem_free(tid, ztest_opts.zo_threads * sizeof (thread_t));
 
         /* Kill the resume thread */
         ztest_exiting = B_TRUE;