1d583b39bSJohn Wren Kennedy#!/usr/bin/ksh 2d583b39bSJohn Wren Kennedy 3d583b39bSJohn Wren Kennedy# 4d583b39bSJohn Wren Kennedy# This file and its contents are supplied under the terms of the 5d583b39bSJohn Wren Kennedy# Common Development and Distribution License ("CDDL"), version 1.0. 6d583b39bSJohn Wren Kennedy# You may only use this file in accordance with the terms of version 7d583b39bSJohn Wren Kennedy# 1.0 of the CDDL. 8d583b39bSJohn Wren Kennedy# 9d583b39bSJohn Wren Kennedy# A full copy of the text of the CDDL should have accompanied this 10d583b39bSJohn Wren Kennedy# source. A copy of the CDDL is also available via the Internet at 11d583b39bSJohn Wren Kennedy# http://www.illumos.org/license/CDDL. 12d583b39bSJohn Wren Kennedy# 13d583b39bSJohn Wren Kennedy 14d583b39bSJohn Wren Kennedy# 15*1d32ba66SJohn Wren Kennedy# Copyright (c) 2012, 2016 by Delphix. All rights reserved. 16d583b39bSJohn Wren Kennedy# 17d583b39bSJohn Wren Kennedy 18d583b39bSJohn Wren Kennedy. $STF_SUITE/include/libtest.shlib 19d583b39bSJohn Wren Kennedy. $STF_SUITE/tests/functional/nopwrite/nopwrite.shlib 20d583b39bSJohn Wren Kennedy 21d583b39bSJohn Wren Kennedy# 22d583b39bSJohn Wren Kennedy# Description: 23d583b39bSJohn Wren Kennedy# Verify that nopwrite cannot be enabled on volumes 24d583b39bSJohn Wren Kennedy# 25d583b39bSJohn Wren Kennedy# Strategy: 26d583b39bSJohn Wren Kennedy# 1. Create a clone of a volume that fits the criteria for nopwrite. 27d583b39bSJohn Wren Kennedy# 2. Overwrite the same blocks from the origin vol and verify that 28d583b39bSJohn Wren Kennedy# new space is consumed. 29d583b39bSJohn Wren Kennedy# 30d583b39bSJohn Wren Kennedy 31d583b39bSJohn Wren Kennedyverify_runnable "global" 32d583b39bSJohn Wren Kennedyorigin="$TESTPOOL/$TESTVOL" 33d583b39bSJohn Wren Kennedyclone="$TESTPOOL/clone" 34d583b39bSJohn Wren Kennedyvol="/dev/zvol/rdsk/$origin" 35d583b39bSJohn Wren Kennedyvolclone="/dev/zvol/rdsk/$clone" 36d583b39bSJohn Wren Kennedylog_onexit cleanup 37d583b39bSJohn Wren Kennedy 38d583b39bSJohn Wren Kennedyfunction cleanup 39d583b39bSJohn Wren Kennedy{ 40*1d32ba66SJohn Wren Kennedy datasetexists $origin && log_must zfs destroy -R $origin 41d583b39bSJohn Wren Kennedy # No need to recreate the volume as no other tests expect it. 42d583b39bSJohn Wren Kennedy} 43d583b39bSJohn Wren Kennedy 44d583b39bSJohn Wren Kennedylog_assert "nopwrite works on volumes" 45d583b39bSJohn Wren Kennedy 46*1d32ba66SJohn Wren Kennedylog_must zfs set compress=on $origin 47*1d32ba66SJohn Wren Kennedylog_must zfs set checksum=sha256 $origin 48*1d32ba66SJohn Wren Kennedydd if=/dev/urandom of=$vol bs=8192 count=4096 conv=notrunc >/dev/null \ 49d583b39bSJohn Wren Kennedy 2>&1 || log_fail "dd into $orgin failed." 50*1d32ba66SJohn Wren Kennedyzfs snapshot $origin@a || log_fail "zfs snap failed" 51*1d32ba66SJohn Wren Kennedylog_must zfs clone $origin@a $clone 52*1d32ba66SJohn Wren Kennedylog_must zfs set compress=on $clone 53*1d32ba66SJohn Wren Kennedylog_must zfs set checksum=sha256 $clone 54*1d32ba66SJohn Wren Kennedydd if=$vol of=$volclone bs=8192 count=4096 conv=notrunc >/dev/null 2>&1 || \ 55d583b39bSJohn Wren Kennedy log_fail "dd into $clone failed." 56d583b39bSJohn Wren Kennedylog_must verify_nopwrite $origin $origin@a $clone 57d583b39bSJohn Wren Kennedy 58d583b39bSJohn Wren Kennedylog_pass "nopwrite works on volumes" 59