]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - tests/sys/cddl/zfs/tests/zvol/zvol_common.kshlib
MFV r339226 (peter): Record merge of serf-1.3.9.
[FreeBSD/FreeBSD.git] / tests / sys / cddl / zfs / tests / zvol / zvol_common.kshlib
1 # vim: filetype=sh
2 #
3 # CDDL HEADER START
4 #
5 # The contents of this file are subject to the terms of the
6 # Common Development and Distribution License (the "License").
7 # You may not use this file except in compliance with the License.
8 #
9 # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 # or http://www.opensolaris.org/os/licensing.
11 # See the License for the specific language governing permissions
12 # and limitations under the License.
13 #
14 # When distributing Covered Code, include this CDDL HEADER in each
15 # file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 # If applicable, add the following below this CDDL HEADER, with the
17 # fields enclosed by brackets "[]" replaced with your own identifying
18 # information: Portions Copyright [yyyy] [name of copyright owner]
19 #
20 # CDDL HEADER END
21 #
22
23 # $FreeBSD$
24
25 #
26 # Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
27 # Use is subject to license terms.
28 #
29 # ident "@(#)zvol_common.kshlib 1.6     09/06/22 SMI"
30 #
31
32 . $STF_SUITE/include/libtest.kshlib
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 #
40 function 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         if [[ -n $DUMPADM ]]; then
52                 if is_dumpswap_supported $TESTPOOL ; then
53                         set_dumpsize $TESTPOOL/$TESTVOL
54                 fi
55         fi
56 }
57
58 #
59 # Destroy the default zvol which was setup using
60 # default_zvol_setup().
61 #
62 function default_zvol_cleanup
63 {
64         if datasetexists $TESTPOOL/$TESTVOL ; then
65                 log_must $ZFS destroy $TESTPOOL/$TESTVOL
66         fi
67
68         destroy_pool $TESTPOOL
69 }
70
71 #
72 # Check if the given pool support "Swap and crash dumps"
73 #
74 function is_dumpswap_supported #pool
75 {
76         typeset pool=$1
77
78         if [[ -z $pool ]] ; then
79                 log_fail "No pool given."
80         fi
81
82         typeset -i SPA_VER_DUMPSWAP=10
83         typeset -i vp=$(get_pool_prop version $pool)
84
85         if (( vp >= SPA_VER_DUMPSWAP )) ; then
86                 return 0
87         fi
88
89         return 1
90 }
91
92 function get_dumpdevice
93 {
94         typeset ret=$($DUMPADM | $GREP "Dump device:" | $AWK '{print $3}')
95         print $ret
96 }
97
98 function set_dumpsize
99 {
100         typeset volume=$1
101
102         if [[ -z $volume ]] ; then
103                 log_note "No volume specified."
104                 return 1
105         fi
106
107         log_must $ZFS set volsize=64m $volume
108
109         output=$($DUMPADM -d /dev/zvol/$volume 2>&1 | \
110                         $TAIL -1 | $AWK '{print $3}')
111
112         if [[ -n $output ]]; then
113                 (( output = output / 1024 / 1024 ))
114                 (( output = output + output / 5 ))
115                 log_must $ZFS set volsize=${output}m $volume
116         fi
117         return 0
118 }
119
120 function safe_dumpadm
121 {
122         typeset device=$1
123
124         if [[ -z $device || $device == "none" ]] ; then
125                 log_note "No dump device volume specified."
126                 return 1
127         fi
128         if [[ $device == "/dev/zvol/"* ]] ; then
129                 typeset volume=${device#/dev/zvol/}
130                 set_dumpsize $volume
131                 log_must $DUMPADM -d $device
132         else
133                 log_must $SWAPADD
134                 if ! is_swap_inuse $device ; then
135                         log_must $SWAP -a $device
136                 fi
137                 log_must $DUMPADM -d swap
138         fi
139 }
140
141 function is_zvol_dumpified
142 {
143         typeset volume=$1
144
145         if [[ -z $volume ]] ; then
146                 log_note "No volume specified."
147                 return 1
148         fi
149
150         $ZDB -dddd $volume 2 | $GREP "dumpsize" > /dev/null 2>&1
151         return $?
152 }
153
154 function is_swap_inuse
155 {
156         typeset device=$1
157
158         if [[ -z $device ]] ; then
159                 log_note "No device specified."
160                 return 1
161         fi
162
163         $SWAP -l | $GREP -w $device > /dev/null 2>&1
164         return $?
165 }