xref: /illumos-gate/usr/src/test/zfs-tests/tests/functional/zvol/zvol_common.shlib (revision 4c28a617e3922d92a58e813a5b955eb526b9c386)
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#
40function default_zvol_setup # disk_device volume_size
41{
42        typeset disk=$1
43        typeset size=$2
44	typeset savedumpdev
45	typeset -i output
46
47        create_pool $TESTPOOL "$disk"
48
49        log_must zfs create -V $size $TESTPOOL/$TESTVOL
50}
51
52#
53# Destroy the default zvol which was setup using
54# default_zvol_setup().
55#
56function default_zvol_cleanup
57{
58        if datasetexists $TESTPOOL/$TESTVOL ; then
59		log_must zfs destroy $TESTPOOL/$TESTVOL
60	fi
61
62        destroy_pool $TESTPOOL
63}
64
65function get_dumpdevice
66{
67	typeset ret=$(dumpadm | grep "Dump device:" | awk '{print $3}')
68	echo $ret
69}
70
71function set_dumpsize
72{
73	typeset volume=$1
74
75	if [[ -z $volume ]] ; then
76		log_note "No volume specified."
77		return 1
78	fi
79
80	log_must zfs set volsize=64m $volume
81
82	output=$(dumpadm -d /dev/zvol/dsk/$volume 2>&1 | \
83			tail -1 | awk '{print $3}')
84
85	if [[ -n $output ]]; then
86		(( output = output / 1024 / 1024 ))
87		(( output = output + output / 5 ))
88		log_must zfs set volsize=${output}m $volume
89	fi
90	return 0
91}
92
93function safe_dumpadm
94{
95	typeset device=$1
96
97	if [[ -z $device || $device == "none" ]] ; then
98		log_note "No dump device volume specified."
99		return 1
100	fi
101	if [[ $device == "/dev/zvol/dsk/"* ]] ; then
102		typeset volume=${device#/dev/zvol/dsk/}
103		set_dumpsize $volume
104		log_must dumpadm -d $device
105	else
106		log_must swapadd
107		if ! is_swap_inuse $device ; then
108			log_must swap -a $device
109		fi
110		log_must dumpadm -d swap
111	fi
112}
113
114function is_zvol_dumpified
115{
116	typeset volume=$1
117
118	if [[ -z $volume ]] ; then
119		log_note "No volume specified."
120		return 1
121	fi
122
123	zdb -dddd $volume 2 | grep "dumpsize" > /dev/null 2>&1
124	return $?
125}
126
127function is_swap_inuse
128{
129	typeset device=$1
130
131	if [[ -z $device ]] ; then
132		log_note "No device specified."
133		return 1
134	fi
135
136	swap -l | grep -w $device > /dev/null 2>&1
137	return $?
138}
139