1 #!/usr/bin/ksh -p 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 # 24 # Copyright 2008 Sun Microsystems, Inc. All rights reserved. 25 # Use is subject to license terms. 26 # 27 28 # 29 # Copyright (c) 2013 by Delphix. All rights reserved. 30 # 31 32 . $STF_SUITE/include/libtest.shlib 33 . $STF_SUITE/tests/functional/inuse/inuse.cfg 34 35 # 36 # DESCRIPTION: 37 # ZFS will not interfere with devices that are in use by SVM 38 # 39 # STRATEGY: 40 # 1. Create SVM device d99 with a disk 41 # 2. Try to create a ZFS pool with same disk 42 # 3. Try a use the same disk as a spare device 43 # 44 45 verify_runnable "global" 46 47 function cleanup 48 { 49 poolexists $TESTPOOL1 && destroy_pool $TESTPOOL1 50 51 poolexists $TESTPOOL2 && destroy_pool $TESTPOOL2 52 53 $METASTAT d99 > /dev/null 2>&1 54 (( $? == 0 )) && $METACLEAR -f d99 55 56 typeset metadb="" 57 typeset i="" 58 59 metadb=`$METADB | $CUT -f6 | $GREP dev | $UNIQ` 60 for i in $metadb; do 61 $METADB -fd $i > /dev/null 2>&1 62 done 63 64 # 65 # Tidy up the disks we used. 66 # 67 cleanup_devices $vdisks $sdisks 68 } 69 70 log_assert "Ensure ZFS does not interfere with devices in use by SVM" 71 72 log_onexit cleanup 73 74 for num in 0 1 2; do 75 eval typeset slice=\${FS_SIDE$num} 76 disk=${slice%s*} 77 slice=${slice##*s} 78 if [[ $WRAPPER == *"smi"* && \ 79 $disk == ${saved_disk} ]]; then 80 cyl=$(get_endslice $disk ${saved_slice}) 81 log_must set_partition $slice "$cyl" $FS_SIZE $disk 82 else 83 log_must set_partition $slice "" $FS_SIZE $disk 84 fi 85 saved_disk=$disk 86 saved_slice=$slice 87 done 88 89 log_note "Configuring metadb with $FS_SIDE1" 90 log_must $METADB -a -f -c 3 $FS_SIDE1 91 92 log_note "Configure d99 with $FS_SIDE0" 93 log_must $METAINIT d99 1 1 $FS_SIDE0 94 95 log_note "Attempt to zpool the device in use by SVM" 96 log_mustnot $ZPOOL create $TESTPOOL1 $FS_SIDE0 97 log_mustnot poolexists $TESTPOOL1 98 99 log_note "Attempt to take device in use by SVM as spare device" 100 log_mustnot $ZPOOL create $TESTPOOL1 $FS_SIDE2 spare $FS_SIDE0 101 log_mustnot poolexists $TESTPOOL1 102 103 log_note "Attempt to zpool a metadb device in use by SVM" 104 log_mustnot $ZPOOL create $TESTPOOL2 $FS_SIDE1 105 log_mustnot poolexists $TESTPOOL2 106 107 log_note "Attempt to take device in use by SVM as spare device" 108 log_mustnot $ZPOOL create $TESTPOOL2 $FS_SIDE2 spare $FS_SIDE1 109 log_mustnot poolexists $TESTPOOL2 110 111 log_pass "Unable to zpool a device in use by SVM"