135 lines
3.1 KiB
Plaintext
135 lines
3.1 KiB
Plaintext
#
|
|
# CDDL HEADER START
|
|
#
|
|
# The contents of this file are subject to the terms of the
|
|
# Common Development and Distribution License (the "License").
|
|
# You may not use this file except in compliance with the License.
|
|
#
|
|
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
|
|
# or http://www.opensolaris.org/os/licensing.
|
|
# See the License for the specific language governing permissions
|
|
# and limitations under the License.
|
|
#
|
|
# When distributing Covered Code, include this CDDL HEADER in each
|
|
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
|
|
# If applicable, add the following below this CDDL HEADER, with the
|
|
# fields enclosed by brackets "[]" replaced with your own identifying
|
|
# information: Portions Copyright [yyyy] [name of copyright owner]
|
|
#
|
|
# CDDL HEADER END
|
|
#
|
|
|
|
#
|
|
# Copyright 2007 Sun Microsystems, Inc. All rights reserved.
|
|
# Use is subject to license terms.
|
|
#
|
|
|
|
#
|
|
# Copyright (c) 2013, 2016 by Delphix. All rights reserved.
|
|
#
|
|
|
|
. $STF_SUITE/tests/functional/devices/devices.cfg
|
|
. $STF_SUITE/include/libtest.shlib
|
|
|
|
#
|
|
# Create block file or character file according to parameter.
|
|
#
|
|
# $1 device file type
|
|
# $2 file name
|
|
#
|
|
function create_dev_file
|
|
{
|
|
typeset filetype=$1
|
|
typeset filename=$2
|
|
|
|
case $filetype in
|
|
b)
|
|
if is_linux; then
|
|
major=$(awk '/[hsv]d/ { print $1; exit }' \
|
|
/proc/partitions)
|
|
minor=$(awk '/[hsv]d/ { print $2; exit }' \
|
|
/proc/partitions)
|
|
log_must mknod $filename b $major $minor
|
|
return 0
|
|
fi
|
|
|
|
devtype=$(df -n / | awk '{print $3}')
|
|
case $devtype in
|
|
zfs)
|
|
rootpool=$(df / | \
|
|
awk '{print $2}')
|
|
rootpool=${rootpool#\(}
|
|
rootpool=${rootpool%%/*}
|
|
|
|
devstr=$(get_disklist $rootpool)
|
|
devstr=$(echo "$devstr" | \
|
|
awk '{print $1}')
|
|
[[ -z $devstr ]] && \
|
|
log_fail "Can not get block device file."
|
|
devstr=$DEV_DSKDIR/${devstr}
|
|
;;
|
|
ufs)
|
|
#
|
|
# Get the existing block device file in current system.
|
|
# And bring out the first one.
|
|
#
|
|
devstr=$(df-lhF ufs | \
|
|
grep "^${DEV_DSKDIR}" | \
|
|
awk '{print $1}')
|
|
devstr=$(echo "$devstr" | \
|
|
awk '{print $1}')
|
|
[[ -z $devstr ]] && \
|
|
log_fail "Can not get block device file."
|
|
;;
|
|
*)
|
|
log_unsupported "Unsupported fstype " \
|
|
"for / ($devtype)," \
|
|
"only ufs|zfs is supported."
|
|
;;
|
|
esac
|
|
|
|
#
|
|
# Get the device file information. i.e:
|
|
# $DEV_DSKDIR/c0t0d0s0: block special (28/768)
|
|
#
|
|
devstr=$(file $devstr)
|
|
|
|
#
|
|
# Bring out major and minor number.
|
|
#
|
|
major=${devstr##*\(}
|
|
major=${major%%/*}
|
|
minor=${devstr##*/}
|
|
minor=${minor%\)}
|
|
|
|
log_must mknod $filename b $major $minor
|
|
;;
|
|
c)
|
|
#
|
|
# Create device file '/dev/null'
|
|
#
|
|
if is_linux; then
|
|
major=$(stat -c %t /dev/null)
|
|
minor=$(stat -c %T /dev/null)
|
|
log_must mknod $filename c $major $minor
|
|
else
|
|
log_must mknod $filename c $(getmajor mm) 2
|
|
fi
|
|
;;
|
|
*)
|
|
log_fail "'$filetype' is wrong."
|
|
;;
|
|
esac
|
|
|
|
return 0
|
|
}
|
|
|
|
function cleanup
|
|
{
|
|
log_must zfs set devices=on $TESTPOOL/$TESTFS
|
|
log_must rm -f $TESTDIR/$TESTFILE1
|
|
log_must rm -f $TESTDIR/$TESTFILE2
|
|
log_must rm -f $TESTDIR/$TESTFILE1.out
|
|
log_must rm -f $TESTDIR/$TESTFILE2.out
|
|
}
|