mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2025-06-17 03:05:01 +03:00

When cleaning up a test case standardize on using the convention: datasetexists $ds && destroy_dataset $ds <flags> By using 'destroy_dataset' instead of 'log_must zfs destroy' we ensure that the destroy is retried in the event that a ZFS volume is busy. This helps ensures ensure tests are fully cleaned up and prevents false positive test failures on Linux. Note that all of the tests which used 'zfs destroy' in cleanup have been updated even if they don't use volumes. This was done to clearly establish the expected convention. Reviewed-by: Rich Ercolani <rincebrain@gmail.com> Reviewed-by: George Melikov <mail@gmelikov.ru> Reviewed-by: John Kennedy <john.kennedy@delphix.com> Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Closes #12663
60 lines
1.7 KiB
Bash
Executable File
60 lines
1.7 KiB
Bash
Executable File
#!/bin/ksh
|
|
|
|
#
|
|
# This file and its contents are supplied under the terms of the
|
|
# Common Development and Distribution License ("CDDL"), version 1.0.
|
|
# You may only use this file in accordance with the terms of version
|
|
# 1.0 of the CDDL.
|
|
#
|
|
# A full copy of the text of the CDDL should have accompanied this
|
|
# source. A copy of the CDDL is also available via the Internet at
|
|
# http://www.illumos.org/license/CDDL.
|
|
#
|
|
|
|
#
|
|
# Copyright (c) 2012, 2016 by Delphix. All rights reserved.
|
|
#
|
|
|
|
. $STF_SUITE/include/libtest.shlib
|
|
. $STF_SUITE/tests/functional/nopwrite/nopwrite.shlib
|
|
|
|
#
|
|
# Description:
|
|
# Verify that nopwrite cannot be enabled on volumes
|
|
#
|
|
# Strategy:
|
|
# 1. Create a clone of a volume that fits the criteria for nopwrite.
|
|
# 2. Overwrite the same blocks from the origin vol and verify that
|
|
# new space is consumed.
|
|
#
|
|
|
|
verify_runnable "global"
|
|
origin="$TESTPOOL/$TESTVOL"
|
|
clone="$TESTPOOL/clone"
|
|
vol="${ZVOL_RDEVDIR}/$origin"
|
|
volclone="${ZVOL_RDEVDIR}/$clone"
|
|
log_onexit cleanup
|
|
|
|
function cleanup
|
|
{
|
|
datasetexists $origin && destroy_dataset $origin -R
|
|
# No need to recreate the volume as no other tests expect it.
|
|
}
|
|
|
|
log_assert "nopwrite works on volumes"
|
|
|
|
log_must zfs set compress=on $origin
|
|
log_must zfs set checksum=sha256 $origin
|
|
dd if=/dev/urandom of=$vol bs=16384 count=2048 conv=notrunc >/dev/null \
|
|
2>&1 || log_fail "dd into $origin failed."
|
|
zfs snapshot $origin@a || log_fail "zfs snap failed"
|
|
log_must zfs clone $origin@a $clone
|
|
log_must zfs set compress=on $clone
|
|
log_must zfs set checksum=sha256 $clone
|
|
block_device_wait
|
|
dd if=$vol of=$volclone bs=16384 count=2048 conv=notrunc >/dev/null 2>&1 || \
|
|
log_fail "dd into $clone failed."
|
|
log_must verify_nopwrite $origin $origin@a $clone
|
|
|
|
log_pass "nopwrite works on volumes"
|