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 2007 Sun Microsystems, Inc. All rights reserved. 24 # Use is subject to license terms. 25 # 26 27 # 28 # Copyright (c) 2013 by Delphix. All rights reserved. 29 # 30 31 . $STF_SUITE/tests/functional/devices/devices.cfg 32 . $STF_SUITE/include/libtest.shlib 33 34 # 35 # Create block file or charactor file according to parameter. 36 # 37 # $1 device file type 38 # $2 file name 39 # 40 function create_dev_file 41 { 42 typeset filetype=$1 43 typeset filename=$2 44 45 case $filetype in 46 b) 47 devtype=$($DF -n / | $AWK '{print $3}') 48 case $devtype in 49 zfs) 50 rootpool=$($DF / | \ 51 $AWK '{print $2}') 52 rootpool=${rootpool#\(} 53 rootpool=${rootpool%%/*} 54 55 devstr=$(get_disklist $rootpool) 56 devstr=$($ECHO "$devstr" | \ 57 $AWK '{print $1}') 58 [[ -z $devstr ]] && \ 59 log_fail "Can not get block device file." 60 devstr=/dev/dsk/${devstr} 61 ;; 62 ufs) 63 # 64 # Get the existing block device file in current system. 65 # And bring out the first one. 66 # 67 devstr=$($DF -lhF ufs | \ 68 $GREP "^/dev/dsk" | \ 69 $AWK '{print $1}') 70 devstr=$($ECHO "$devstr" | \ 71 $AWK '{print $1}') 72 [[ -z $devstr ]] && \ 73 log_fail "Can not get block device file." 74 ;; 75 *) 76 log_unsupported "Unsupported fstype " \ 77 "for / ($devtype)," \ 78 "only ufs|zfs is supported." 79 ;; 80 esac 81 82 # 83 # Get the device file information. i.e: 84 # /dev/dsk/c0t0d0s0: block special (28/768) 85 # 86 devstr=$($FILE $devstr) 87 88 # 89 # Bring out major and minor number. 90 # 91 major=${devstr##*\(} 92 major=${major%%/*} 93 minor=${devstr##*/} 94 minor=${minor%\)} 95 96 log_must $MKNOD $filename b $major $minor 97 ;; 98 c) 99 # 100 # Create device file '/dev/null' 101 # 102 log_must $MKNOD $filename c $($GETMAJOR mm) 2 103 ;; 104 *) 105 log_fail "'$filetype' is wrong." 106 ;; 107 esac 108 109 return 0 110 } 111 112 function cleanup 113 { 114 log_must $ZFS set devices=on $TESTPOOL/$TESTFS 115 log_must $RM -f $TESTDIR/$TESTFILE1 116 log_must $RM -f $TESTDIR/$TESTFILE2 117 log_must $RM -f $TESTDIR/$TESTFILE1.out 118 log_must $RM -f $TESTDIR/$TESTFILE2.out 119 }