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