--- a/usr/src/uts/common/fs/zfs/dsl_dataset.c Tue Oct 14 15:09:13 2008 -0700
+++ b/usr/src/uts/common/fs/zfs/dsl_dataset.c Tue Oct 14 15:57:18 2008 -0700
@@ -1156,12 +1156,13 @@
/* ARGSUSED */
static int
-kill_blkptr(traverse_blk_cache_t *bc, spa_t *spa, void *arg)
+kill_blkptr(spa_t *spa, blkptr_t *bp, const zbookmark_t *zb,
+ const dnode_phys_t *dnp, void *arg)
{
struct killarg *ka = arg;
- blkptr_t *bp = &bc->bc_blkptr;
-
- ASSERT3U(bc->bc_errno, ==, 0);
+
+ if (bp == NULL)
+ return (0);
ASSERT3U(bp->blk_birth, >, ka->ds->ds_phys->ds_prev_snap_txg);
(void) dsl_dataset_block_kill(ka->ds, bp, ka->zio, ka->tx);
@@ -1189,7 +1190,7 @@
return (EINVAL);
/*
- * If we made changes this txg, traverse_dsl_dataset won't find
+ * If we made changes this txg, traverse_dataset won't find
* them. Try again.
*/
if (ds->ds_phys->ds_bp.blk_birth >= tx->tx_txg)
@@ -1256,8 +1257,8 @@
ka.ds = ds;
ka.zio = zio;
ka.tx = tx;
- (void) traverse_dsl_dataset(ds, ds->ds_phys->ds_prev_snap_txg,
- ADVANCE_POST, kill_blkptr, &ka);
+ (void) traverse_dataset(ds, ds->ds_phys->ds_prev_snap_txg,
+ TRAVERSE_POST, kill_blkptr, &ka);
(void) zio_wait(zio);
}
@@ -1650,8 +1651,8 @@
ka.ds = ds;
ka.zio = zio;
ka.tx = tx;
- err = traverse_dsl_dataset(ds, ds->ds_phys->ds_prev_snap_txg,
- ADVANCE_POST, kill_blkptr, &ka);
+ err = traverse_dataset(ds, ds->ds_phys->ds_prev_snap_txg,
+ TRAVERSE_POST, kill_blkptr, &ka);
ASSERT3U(err, ==, 0);
ASSERT(spa_version(dp->dp_spa) < SPA_VERSION_UNIQUE_ACCURATE ||
ds->ds_phys->ds_unique_bytes == 0);
@@ -2837,6 +2838,8 @@
csa->cds->ds_phys->ds_deadlist_obj));
VERIFY(0 == bplist_open(&csa->ohds->ds_deadlist, dp->dp_meta_objset,
csa->ohds->ds_phys->ds_deadlist_obj));
+
+ dsl_pool_ds_clone_swapped(csa->ohds, csa->cds, tx);
}
/*