function cleanup {
for obj in $OBJ_LIST; do
- datasetexists $obj && log_must zfs destroy -f $obj
+ datasetexists $obj && log_must_busy zfs destroy -f $obj
done
}
"($resv_size_set != $resv_size_get)"
fi
- log_must zfs destroy -f $obj
+ log_must_busy zfs destroy -f $obj
new_space_avail=`get_prop available $TESTPOOL`
new_space_used=`get_prop used $TESTPOOL`
log_must rm -rf $BACKDIR/*
if is_global_zone ; then
- log_must zfs destroy -Rf $pool
+ log_must_busy zfs destroy -Rf $pool
else
typeset list=$(zfs list -H -r -t all -o name $pool)
for ds in $list ; do
if [[ $ds != $pool ]] ; then
if datasetexists $ds ; then
- log_must zfs destroy -Rf $ds
+ log_must_busy zfs destroy -Rf $ds
fi
fi
done
typeset -i ret=0
typeset snap
for snap in "$@" ; do
- zfs destroy $snap
- ret=$?
+ log_must_busy zfs destroy $snap
typeset ds=${snap%%@*}
typeset type=$(get_prop "type" $ds)
if [[ $type == "filesystem" ]]; then
typeset mntpnt=$(get_prop mountpoint $ds)
- ((ret |= $?))
-
- if ((ret != 0)); then
- rm -r $mntpnt/$snap
- ((ret |= $?))
+ if [[ -n $mntpnt ]]; then
+ rm -rf $mntpnt/$snap
fi
fi
-
- if ((ret != 0)); then
- return $ret
- fi
done
return 0
typeset sendpool=${sendfs%%/*}
typeset recvpool=${recvfs%%/*}
- datasetexists $sendfs && log_must zfs destroy -r $sendpool
- datasetexists $recvfs && log_must zfs destroy -r $recvpool
+ datasetexists $sendfs && log_must_busy zfs destroy -r $sendpool
+ datasetexists $recvfs && log_must_busy zfs destroy -r $recvpool
if $(datasetexists $sendfs || zfs create -o compress=lz4 $sendfs); then
mk_files 1000 256 0 $sendfs &
fi
if datasetexists $streamfs; then
- log_must zfs destroy -r $streamfs
+ log_must_busy zfs destroy -r $streamfs
fi
log_must zfs create -o compress=lz4 $sendpool/stream
}
typeset sendfs=$1
typeset streamfs=$2
- datasetexists $sendfs && log_must zfs destroy -r $sendfs
- datasetexists $streamfs && log_must zfs destroy -r $streamfs
+ datasetexists $sendfs && log_must_busy zfs destroy -r $sendfs
+ datasetexists $streamfs && log_must_busy zfs destroy -r $streamfs
cleanup_pool $POOL2
rm -f /$POOL/initial.zsend /$POOL/incremental.zsend
}
#
log_must eval "zfs send -I $POOL2@psnap $POOL2/pclone@final > " \
"$BACKDIR/pool-clone-I"
- log_must zfs destroy -rf $POOL2/pclone
+ log_must_busy zfs destroy -rf $POOL2/pclone
log_must eval "zfs receive -d -F $POOL2 < $BACKDIR/pool-clone-I"
log_must cmp_ds_subs $POOL $POOL2
log_must cmp_ds_cont $POOL $POOL2
ds=$dstds/$FS/fs1
log_must eval "zfs send -I $ds/fs2@fsnap $ds/fclone@final > " \
"$BACKDIR/fs-clone-I"
-log_must zfs destroy -rf $ds/fclone
+log_must_busy zfs destroy -rf $ds/fclone
log_must eval "zfs receive -F $ds/fclone < $BACKDIR/fs-clone-I"
log_must cmp_ds_subs $POOL $dstds
ds=$POOL2/$FS
log_must eval "zfs send -I $ds/vol@vsnap $ds/vclone@final > " \
"$BACKDIR/vol-clone-I"
- log_must zfs destroy -rf $ds/vclone
+ log_must_busy zfs destroy -rf $ds/vclone
log_must eval "zfs receive -d -F $POOL2 < $BACKDIR/vol-clone-I"
log_must cmp_ds_subs $POOL $POOL2
log_must cmp_ds_cont $POOL $POOL2
function cleanup
{
if datasetexists bpool ; then
- log_must zpool destroy -f bpool
+ log_must_busy zpool destroy -f bpool
fi
if datasetexists spool ; then
- log_must zpool destroy -f spool
+ log_must_busy zpool destroy -f spool
fi
}
# Test out of space on top filesystem
#
log_must mv /bpool/fs/file /bpool
-log_must zfs destroy -rf bpool/fs
+log_must_busy zfs destroy -rf bpool/fs
log_must zfs snapshot bpool@snap
log_must eval "zfs send -R bpool@snap > $BACKDIR/bpool-R"
function cleanup
{
- export __ZFS_POOL_RESTRICT="$POOL $POOL2"
- log_must zfs unmount -a
- unset __ZFS_POOL_RESTRICT
log_must cleanup_pool $POOL
log_must cleanup_pool $POOL2
log_must eval "zfs send -R $POOL@final > $BACKDIR/pool-final-R"
log_must eval "zfs receive -dF $POOL2 < $BACKDIR/pool-final-R"
-log_must zfs destroy -Rf $POOL/$FS
-log_must zfs destroy -Rf $POOL/pclone
+log_must_busy zfs destroy -Rf $POOL/$FS
+log_must_busy zfs destroy -Rf $POOL/pclone
if is_global_zone ; then
- log_must zfs destroy -Rf $POOL/vol
+ log_must_busy zfs destroy -Rf $POOL/vol
fi
log_must zfs snapshot -r $POOL@destroy
verify_runnable "both"
+# See issue: https://github.com/zfsonlinux/zfs/issues/6446
+if is_linux; then
+ log_unsupported "Test often hangs. Skipping."
+fi
+
log_assert "Verify resumability of full ZFS send/receive with the -D " \
"(dedup) flag"
verify_runnable "both"
+# See issue: https://github.com/zfsonlinux/zfs/issues/6446
+if is_linux; then
+ log_unsupported "Test often hangs. Skipping."
+fi
+
log_assert "Verify resumability of a full and incremental ZFS send/receive " \
"with the -e (embedded) flag"
test_fs_setup $sendfs $recvfs
log_must zfs bookmark $sendfs@a $sendfs#bm_a
-log_must zfs destroy $sendfs@a
+log_must_busy zfs destroy $sendfs@a
log_must zfs receive -v $recvfs </$POOL/initial.zsend
resume_test "zfs send -i \#bm_a $sendfs@b" $streamfs $recvfs
-log_must zfs destroy -r -f $sendfs
+log_must_busy zfs destroy -r -f $sendfs
log_must zfs receive -v $sendfs </$POOL/initial.zsend
log_must zfs receive -v $sendfs </$POOL/incremental.zsend
file_check $sendfs $recvfs
log_onexit resume_cleanup $sendfs $streamfs
test_fs_setup $sendfs $recvfs
-log_must zfs unmount $sendfs
+log_must zfs unmount -f $sendfs
resume_test "zfs send $sendfs" $streamfs $recvfs
file_check $sendfs $recvfs
poolexists $POOL3 && destroy_pool $POOL3
log_must zpool create $pool_opt $POOL3 $DISK3
- datasetexists $send_ds && log_must zfs destroy -r $send_ds
- datasetexists $recv_ds && log_must zfs destroy -r $recv_ds
+ datasetexists $send_ds && log_must_busy zfs destroy -r $send_ds
+ datasetexists $recv_ds && log_must_busy zfs destroy -r $recv_ds
log_must zfs create -o compress=$compress $send_ds
typeset dir=$(get_prop mountpoint $send_ds)
log_must eval "zfs send -c $send_ds@full >$BACKDIR/full-c"
log_must eval "zfs recv $recv_ds <$BACKDIR/full-c"
- log_must zfs destroy -r $recv_ds
+ log_must_busy zfs destroy -r $recv_ds
log_must eval "zfs send $send_ds@full >$BACKDIR/full"
log_must eval "zfs recv $recv_ds <$BACKDIR/full"
log_must zpool create -d $POOL3 $DISK3
for compress in $compress_types; do
- datasetexists $send_ds && log_must zfs destroy -r $send_ds
- datasetexists $recv_ds && log_must zfs destroy -r $recv_ds
+ datasetexists $send_ds && log_must_busy zfs destroy -r $send_ds
+ datasetexists $recv_ds && log_must_busy zfs destroy -r $recv_ds
log_must zfs create -o compress=$compress $send_ds
typeset dir=$(get_prop mountpoint $send_ds)
write_compressible $BACKDIR ${megs}m
for compress in $compress_types; do
- datasetexists $send_ds && log_must zfs destroy -r $send_ds
- datasetexists $send_vol && log_must zfs destroy -r $send_vol
+ datasetexists $send_ds && log_must_busy zfs destroy -r $send_ds
+ datasetexists $send_vol && log_must_busy zfs destroy -r $send_vol
log_must zfs create -o compress=$compress $send_ds
log_must zfs create -V 1g -o compress=$compress $send_vol
verify_stream_size $BACKDIR/compressed $sendfs
log_must rm $BACKDIR/uncompressed $BACKDIR/compressed
- log_must zfs destroy -r $sendfs
+ log_must_busy zfs destroy -r $sendfs
done
done
function cleanup
{
- log_must zfs destroy -r $vol
+ log_must_busy zfs destroy -r $vol
cleanup_pool $POOL2
}
function cleanup
{
- datasetexists $TESTPOOL/128k && log_must zfs destroy $TESTPOOL/128k
- datasetexists $TESTPOOL/1m && log_must zfs destroy $TESTPOOL/1m
+ datasetexists $TESTPOOL/128k && log_must_busy zfs destroy $TESTPOOL/128k
+ datasetexists $TESTPOOL/1m && log_must_busy zfs destroy $TESTPOOL/1m
cleanup_pool $POOL2
destroy_pool $POOL3
}
check_recsize $recv_ds $expected_file_bs $expected_recsize
$do_size_test && verify_stream_size $stream $recv_ds
- log_must zfs destroy -r $recv_ds
+ log_must_busy zfs destroy -r $recv_ds
}
log_assert "Verify compressed send works with datasets of varying recsize."