1#
2# CDDL HEADER START
3#
4# The contents of this file are subject to the terms of the
5# Common Development and Distribution License (the "License").
6# You may not use this file except in compliance with the License.
7#
8# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9# or http://www.opensolaris.org/os/licensing.
10# See the License for the specific language governing permissions
11# and limitations under the License.
12#
13# When distributing Covered Code, include this CDDL HEADER in each
14# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15# If applicable, add the following below this CDDL HEADER, with the
16# fields enclosed by brackets "[]" replaced with your own identifying
17# information: Portions Copyright [yyyy] [name of copyright owner]
18#
19# CDDL HEADER END
20#
21
22#
23# Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
24# Use is subject to license terms.
25#
26
27#
28# Copyright (c) 2013, 2016 by Delphix. All rights reserved.
29#
30
31. $STF_SUITE/include/libtest.shlib
32. $STF_SUITE/tests/functional/zvol/zvol.cfg
33
34#
35# Create a simple zvol volume
36#
37# Where disk_device: is the name of the disk to be used
38#       volume_size: is the size of the volume, e.g. 2G
39#       block_size:  is the block size of the volume
40#
41function default_zvol_setup # disk_device volume_size block_size
42{
43	typeset disk=$1
44	typeset size=$2
45	typeset blocksize=$3
46	typeset savedumpdev
47	typeset -i output
48	typeset create_args
49
50	create_pool $TESTPOOL "$disk"
51
52	if [ -n "$blocksize" ]; then
53		create_args="-b $blocksize"
54	fi
55
56	log_must zfs create $create_args -V $size $TESTPOOL/$TESTVOL
57	block_device_wait
58}
59
60#
61# Destroy the default zvol which was setup using
62# default_zvol_setup().
63#
64function default_zvol_cleanup
65{
66	datasetexists $TESTPOOL/$TESTVOL && \
67		destroy_dataset $TESTPOOL/$TESTVOL
68
69        destroy_pool $TESTPOOL
70}
71
72function get_dumpdevice
73{
74	dumpadm | awk '/Dump device:/ {print $3}'
75}
76
77function set_dumpsize
78{
79	typeset volume=$1
80
81	if [[ -z $volume ]] ; then
82		log_note "No volume specified."
83		return 1
84	fi
85
86	log_must zfs set volsize=64m $volume
87
88	output=$(dumpadm -d /dev/zvol/dsk/$volume 2>&1 | awk 'END {print $3}')
89
90	if [[ -n $output ]]; then
91		(( output = output / 1024 / 1024 ))
92		(( output = output + output / 5 ))
93		log_must zfs set volsize=${output}m $volume
94	fi
95
96	return 0
97}
98
99function safe_dumpadm
100{
101	typeset device=$1
102
103	if [[ -z $device || $device == "none" ]] ; then
104		log_note "No dump device volume specified."
105		return 1
106	fi
107	if [[ $device == "${ZVOL_DEVDIR}/"* ]] ; then
108		typeset volume=${device#${ZVOL_DEVDIR}/}
109		set_dumpsize $volume
110		log_must dumpadm -d $device
111	else
112		log_must swapadd
113		if ! is_swap_inuse $device ; then
114			log_must swap -a $device
115		fi
116		log_must dumpadm -d swap
117	fi
118}
119
120function is_zvol_dumpified
121{
122	typeset volume=$1
123
124	if [[ -z $volume ]] ; then
125		log_note "No volume specified."
126		return 1
127	fi
128
129	zdb -dddd $volume 2 | grep -q "dumpsize"
130}
131