11ba4a712SPawel Jakub Dawidek# $FreeBSD$ 21ba4a712SPawel Jakub Dawidek 31ba4a712SPawel Jakub Dawidekntest=1 41ba4a712SPawel Jakub Dawidekos=`uname -s` 51ba4a712SPawel Jakub Dawidek 61ba4a712SPawel Jakub Dawidekecho ${dir} | egrep '^/' >/dev/null 2>&1 71ba4a712SPawel Jakub Dawidekif [ $? -eq 0 ]; then 81ba4a712SPawel Jakub Dawidek maindir="${dir}/../.." 91ba4a712SPawel Jakub Dawidekelse 101ba4a712SPawel Jakub Dawidek maindir="`pwd`/${dir}/../.." 111ba4a712SPawel Jakub Dawidekfi 121ba4a712SPawel Jakub Dawidek 131ba4a712SPawel Jakub Dawidek# Set up correct command names and switches 141ba4a712SPawel Jakub Dawidekif [ -z "${LUSTRE}" ]; then 151ba4a712SPawel Jakub Dawidek ZPOOL="zpool" 161ba4a712SPawel Jakub Dawidek ZFS="zfs" 171ba4a712SPawel Jakub Dawidek ZDB="zdb" 181ba4a712SPawel Jakub Dawidek zpool_f_flag="-f" 191ba4a712SPawel Jakub Dawidekelse 201ba4a712SPawel Jakub Dawidek ZPOOL="lzpool" 211ba4a712SPawel Jakub Dawidek ZFS="lzfs" 221ba4a712SPawel Jakub Dawidek ZDB="lzdb" 231ba4a712SPawel Jakub Dawidek zpool_f_flag="-F" 241ba4a712SPawel Jakub Dawidek no_mountpoint=1 251ba4a712SPawel Jakub Dawidekfi 261ba4a712SPawel Jakub Dawidek 271ba4a712SPawel Jakub Dawidek# Use correct arguments to cmd line programs 281ba4a712SPawel Jakub Dawidekstat --version 2>/dev/null | grep GNU >/dev/null 291ba4a712SPawel Jakub Dawidekif [ $? -eq 0 ]; then 301ba4a712SPawel Jakub Dawidek GNU_STAT="yes" 311ba4a712SPawel Jakub Dawidekfi 321ba4a712SPawel Jakub Dawidekif [ "${os}" = "SunOS" ]; then 331ba4a712SPawel Jakub Dawidek import_flags="-d /dev/lofi" 341ba4a712SPawel Jakub Dawidek mount_t_flag="-F" 351ba4a712SPawel Jakub Dawidekelse 361ba4a712SPawel Jakub Dawidek mount_t_flag="-t" 371ba4a712SPawel Jakub Dawidekfi 381ba4a712SPawel Jakub Dawidek 391ba4a712SPawel Jakub Dawidekdie() 401ba4a712SPawel Jakub Dawidek{ 411ba4a712SPawel Jakub Dawidek echo "${1}" > /dev/stderr 42*59dee1b0SEnji Cooper echo "Bail out!" 431ba4a712SPawel Jakub Dawidek exit 1 441ba4a712SPawel Jakub Dawidek} 451ba4a712SPawel Jakub Dawidek 461ba4a712SPawel Jakub Dawidekcalcsum() 471ba4a712SPawel Jakub Dawidek{ 481ba4a712SPawel Jakub Dawidek dd if="${1}" bs=1M 2>/dev/null | openssl md5 491ba4a712SPawel Jakub Dawidek} 501ba4a712SPawel Jakub Dawidek 511ba4a712SPawel Jakub Dawidekcreate_file() 521ba4a712SPawel Jakub Dawidek{ 531ba4a712SPawel Jakub Dawidek name="${1}" 541ba4a712SPawel Jakub Dawidek size="${2}" 551ba4a712SPawel Jakub Dawidek 561ba4a712SPawel Jakub Dawidek dd if=/dev/urandom of=${name} bs=${size} count=1 >/dev/null 2>&1 571ba4a712SPawel Jakub Dawidek sync 581ba4a712SPawel Jakub Dawidek} 591ba4a712SPawel Jakub Dawidek 601ba4a712SPawel Jakub Dawidekexpect() 611ba4a712SPawel Jakub Dawidek{ 621ba4a712SPawel Jakub Dawidek eorig="${1}" 631ba4a712SPawel Jakub Dawidek eexp=`echo "${eorig}" | egrep -v '^[ ]*$' | sed 's/^[ ][ ]*//g;s/[ ][ ]*$//g;s/[ ][ ]*/ /g;s/$/%EoL%/' | xargs` 641ba4a712SPawel Jakub Dawidek shift 651ba4a712SPawel Jakub Dawidek gorig=`sh -c "$*" 2>&1` 661ba4a712SPawel Jakub Dawidek got=`echo "${gorig}" | egrep -v '^[ ]*$' | sed 's/^[ ][ ]*//g;s/[ ][ ]*$//g;s/[ ][ ]*/ /g;s/$/%EoL%/' | xargs` 671ba4a712SPawel Jakub Dawidek echo "${got}" | egrep "${eexp}" >/dev/null 681ba4a712SPawel Jakub Dawidek if [ $? -eq 0 ]; then 691ba4a712SPawel Jakub Dawidek echo "ok ${ntest} ${add_msg}" 701ba4a712SPawel Jakub Dawidek else 711ba4a712SPawel Jakub Dawidek echo "not ok ${ntest} ${add_msg}" 721ba4a712SPawel Jakub Dawidek echo "# ----- expected from: $*" 731ba4a712SPawel Jakub Dawidek echo "${eorig}" | sed 's/^/# /' 741ba4a712SPawel Jakub Dawidek echo "# ----- got:" 751ba4a712SPawel Jakub Dawidek echo "${gorig}" | sed 's/^/# /' 761ba4a712SPawel Jakub Dawidek echo "# ----- end" 771ba4a712SPawel Jakub Dawidek fi 781ba4a712SPawel Jakub Dawidek ntest=`expr $ntest + 1` 791ba4a712SPawel Jakub Dawidek} 801ba4a712SPawel Jakub Dawidek 811ba4a712SPawel Jakub Dawidekexpect_ok() 821ba4a712SPawel Jakub Dawidek{ 831ba4a712SPawel Jakub Dawidek out=`$* 2>&1` 841ba4a712SPawel Jakub Dawidek ec=$? 851ba4a712SPawel Jakub Dawidek if [ $ec -eq 0 ]; then 861ba4a712SPawel Jakub Dawidek echo "ok ${ntest} ${add_msg}" 871ba4a712SPawel Jakub Dawidek echo "# ----- expected success from: $*" 881ba4a712SPawel Jakub Dawidek if [ ! -z "${out}" ]; then 891ba4a712SPawel Jakub Dawidek echo "# ----- output (exit code=${ec}):" 901ba4a712SPawel Jakub Dawidek echo "${out}" | sed 's/^/# /' 911ba4a712SPawel Jakub Dawidek echo "# ----- end" 921ba4a712SPawel Jakub Dawidek fi 931ba4a712SPawel Jakub Dawidek else 941ba4a712SPawel Jakub Dawidek echo "not ok ${ntest} ${add_msg}" 951ba4a712SPawel Jakub Dawidek echo "# ----- expected success from: $*" 961ba4a712SPawel Jakub Dawidek echo "# ----- output (exit code=${ec}):" 971ba4a712SPawel Jakub Dawidek echo "${out}" | sed 's/^/# /' 981ba4a712SPawel Jakub Dawidek echo "# ----- end" 991ba4a712SPawel Jakub Dawidek fi 1001ba4a712SPawel Jakub Dawidek ntest=`expr $ntest + 1` 1011ba4a712SPawel Jakub Dawidek} 1021ba4a712SPawel Jakub Dawidek 1031ba4a712SPawel Jakub Dawidekexpect_fl() 1041ba4a712SPawel Jakub Dawidek{ 1051ba4a712SPawel Jakub Dawidek out=`$* 2>&1` 1061ba4a712SPawel Jakub Dawidek ec=$? 1071ba4a712SPawel Jakub Dawidek if [ $ec -ne 0 ]; then 1081ba4a712SPawel Jakub Dawidek echo "ok ${ntest} ${add_msg}" 1091ba4a712SPawel Jakub Dawidek echo "# ----- expected failure from: $*" 1101ba4a712SPawel Jakub Dawidek if [ ! -z "${out}" ]; then 1111ba4a712SPawel Jakub Dawidek echo "# ----- output (exit code=${ec}):" 1121ba4a712SPawel Jakub Dawidek echo "${out}" | sed 's/^/# /' 1131ba4a712SPawel Jakub Dawidek echo "# ----- end" 1141ba4a712SPawel Jakub Dawidek fi 1151ba4a712SPawel Jakub Dawidek else 1161ba4a712SPawel Jakub Dawidek echo "not ok ${ntest} ${add_msg}" 1171ba4a712SPawel Jakub Dawidek echo "# ----- expected failure from: $*" 1181ba4a712SPawel Jakub Dawidek echo "# ----- output (exit code=${ec}):" 1191ba4a712SPawel Jakub Dawidek echo "${out}" | sed 's/^/# /' 1201ba4a712SPawel Jakub Dawidek echo "# ----- end" 1211ba4a712SPawel Jakub Dawidek fi 1221ba4a712SPawel Jakub Dawidek ntest=`expr $ntest + 1` 1231ba4a712SPawel Jakub Dawidek} 1241ba4a712SPawel Jakub Dawidek 1251ba4a712SPawel Jakub Dawidekquick_exit() 1261ba4a712SPawel Jakub Dawidek{ 1271ba4a712SPawel Jakub Dawidek echo "1..1" 1281ba4a712SPawel Jakub Dawidek echo "ok 1" 1291ba4a712SPawel Jakub Dawidek exit 0 1301ba4a712SPawel Jakub Dawidek} 1311ba4a712SPawel Jakub Dawidek 1321ba4a712SPawel Jakub Dawidek# Set up a scratch tmpfs directory (Linux only) 1331ba4a712SPawel Jakub Dawideksetup_tmpfs() 1341ba4a712SPawel Jakub Dawidek{ 1351ba4a712SPawel Jakub Dawidek cmd="mktemp -d /tmp/zfs-regression.XXXXXXXXXX" 1361ba4a712SPawel Jakub Dawidek TMPDIR=`${cmd}` || die "failed: ${cmd}" 1371ba4a712SPawel Jakub Dawidek cmd="mount -t tmpfs none ${TMPDIR}" 1381ba4a712SPawel Jakub Dawidek ${cmd} || die "failed: ${cmd}" 1391ba4a712SPawel Jakub Dawidek} 1401ba4a712SPawel Jakub Dawidek 1411ba4a712SPawel Jakub Dawidek# Clean up the tmpfs directory (Linux only) 1421ba4a712SPawel Jakub Dawidekcleanup_tmpfs() 1431ba4a712SPawel Jakub Dawidek{ 1441ba4a712SPawel Jakub Dawidek if [ -n "${TMPDIR}" ]; then 1451ba4a712SPawel Jakub Dawidek cmd="umount ${TMPDIR} && rmdir ${TMPDIR}" 1461ba4a712SPawel Jakub Dawidek eval "${cmd}" || die "failed: ${cmd}" 1471ba4a712SPawel Jakub Dawidek fi 1481ba4a712SPawel Jakub Dawidek} 1491ba4a712SPawel Jakub Dawidek 1501ba4a712SPawel Jakub Dawidek# Truncate a file 1511ba4a712SPawel Jakub Dawidektruncate_cmd() 1521ba4a712SPawel Jakub Dawidek{ 1531ba4a712SPawel Jakub Dawidek size="${1}" 1541ba4a712SPawel Jakub Dawidek file="${2}" 1551ba4a712SPawel Jakub Dawidek 1561ba4a712SPawel Jakub Dawidek cmd="dd if=/dev/null of=${file} bs=1 count=0 seek=${size}" 1571ba4a712SPawel Jakub Dawidek ${cmd} > /dev/null 2>&1 || die "failed: ${cmd}" 1581ba4a712SPawel Jakub Dawidek} 1591ba4a712SPawel Jakub Dawidek 1601ba4a712SPawel Jakub Dawidek# Create a memory-backed block device 1611ba4a712SPawel Jakub Dawidekcreate_memdisk() 1621ba4a712SPawel Jakub Dawidek{ 1631ba4a712SPawel Jakub Dawidek size="${1}" 1641ba4a712SPawel Jakub Dawidek devname="${2}" 1651ba4a712SPawel Jakub Dawidek 1661ba4a712SPawel Jakub Dawidek if [ "${os}" = "FreeBSD" ]; then 1671ba4a712SPawel Jakub Dawidek if [ -n "${devname}" ]; then 1681ba4a712SPawel Jakub Dawidek devparam="-u ${devname}" 1691ba4a712SPawel Jakub Dawidek fi 1701ba4a712SPawel Jakub Dawidek cmd="mdconfig -a -t swap -s ${size} ${devparam} 2>/dev/null" 1711ba4a712SPawel Jakub Dawidek DISKNAME=`${cmd}` || die "failed: ${cmd}" 1721ba4a712SPawel Jakub Dawidek if [ -n "${devname}" ]; then 1731ba4a712SPawel Jakub Dawidek DISKNAME="${devname}" 1741ba4a712SPawel Jakub Dawidek fi 1751ba4a712SPawel Jakub Dawidek FDISKNAME="/dev/${DISKNAME}" 1761ba4a712SPawel Jakub Dawidek elif [ "${os}" = "SunOS" ]; then 1771ba4a712SPawel Jakub Dawidek cmd="mktemp /tmp/zfstest.XXXXXXXXXX" 1781ba4a712SPawel Jakub Dawidek fname=`${cmd}` || die "failed: ${cmd}" 1791ba4a712SPawel Jakub Dawidek 1801ba4a712SPawel Jakub Dawidek truncate_cmd "${size}" "${fname}" 1811ba4a712SPawel Jakub Dawidek 1821ba4a712SPawel Jakub Dawidek if [ -n "${devname}" ]; then 1831ba4a712SPawel Jakub Dawidek cmd="lofiadm -a ${fname} ${devname}" 1841ba4a712SPawel Jakub Dawidek ${cmd} || die "failed: ${cmd}" 1851ba4a712SPawel Jakub Dawidek DISKNAME="${devname}" 1861ba4a712SPawel Jakub Dawidek else 1871ba4a712SPawel Jakub Dawidek cmd="lofiadm -a ${fname}" 1881ba4a712SPawel Jakub Dawidek DISKNAME=`${cmd}` || die "failed: ${cmd}" 1891ba4a712SPawel Jakub Dawidek fi 1901ba4a712SPawel Jakub Dawidek FDISKNAME="${DISKNAME}" 1911ba4a712SPawel Jakub Dawidek elif [ "${os}" = "Linux" ]; then 1921ba4a712SPawel Jakub Dawidek if [ -z "${TMPDIR_DISKS}" ]; then 1931ba4a712SPawel Jakub Dawidek setup_tmpfs 1941ba4a712SPawel Jakub Dawidek TMPDIR_DISKS="${TMPDIR}" 1951ba4a712SPawel Jakub Dawidek fi 1961ba4a712SPawel Jakub Dawidek 1971ba4a712SPawel Jakub Dawidek cmd="mktemp ${TMPDIR_DISKS}/disk.XXXXXXXXXX" 1981ba4a712SPawel Jakub Dawidek fname=`${cmd}` || die "failed: ${cmd}" 1991ba4a712SPawel Jakub Dawidek 2001ba4a712SPawel Jakub Dawidek truncate_cmd "${size}" "${fname}" 2011ba4a712SPawel Jakub Dawidek 2021ba4a712SPawel Jakub Dawidek if [ -n "${devname}" ]; then 2031ba4a712SPawel Jakub Dawidek devname=`echo ${devname} | cut -c 9-` 2041ba4a712SPawel Jakub Dawidek cmd="losetup /dev/${devname} ${fname} 2>&1" 2051ba4a712SPawel Jakub Dawidek eval ${cmd} || die "failed: ${cmd}" 2061ba4a712SPawel Jakub Dawidek DISKNAME="${devname}" 2071ba4a712SPawel Jakub Dawidek else 2081ba4a712SPawel Jakub Dawidek cmd="losetup -s -f ${fname} 2>&1" 2091ba4a712SPawel Jakub Dawidek diskname=`eval ${cmd}` 2101ba4a712SPawel Jakub Dawidek 2111ba4a712SPawel Jakub Dawidek if [ "${diskname}" = "losetup: could not find any free loop device" ]; then 2121ba4a712SPawel Jakub Dawidek # If there are no free loopback devices, create one more 2131ba4a712SPawel Jakub Dawidek max=`echo /dev/loop* | awk 'BEGIN { RS=" "; FS="loop" } {if ($2 > max) max = $2} END {print max}'` 2141ba4a712SPawel Jakub Dawidek max=$((max + 1)) 2151ba4a712SPawel Jakub Dawidek cmd="mknod /dev/loop${max} b 7 ${max}" 2161ba4a712SPawel Jakub Dawidek ${cmd} || die "failed: ${cmd}" 2171ba4a712SPawel Jakub Dawidek 2181ba4a712SPawel Jakub Dawidek cmd="losetup -s -f ${fname}" 2191ba4a712SPawel Jakub Dawidek diskname=`${cmd}` || die "failed: ${cmd}" 2201ba4a712SPawel Jakub Dawidek fi 2211ba4a712SPawel Jakub Dawidek DISKNAME=`eval echo ${diskname} | sed 's/^\/dev\///'` 2221ba4a712SPawel Jakub Dawidek fi 2231ba4a712SPawel Jakub Dawidek ln /dev/${DISKNAME} /dev/zfstest_${DISKNAME} 2241ba4a712SPawel Jakub Dawidek DISKNAME="zfstest_${DISKNAME}" 2251ba4a712SPawel Jakub Dawidek FDISKNAME="/dev/${DISKNAME}" 2261ba4a712SPawel Jakub Dawidek else 2271ba4a712SPawel Jakub Dawidek die "Sorry, your OS is not supported" 2281ba4a712SPawel Jakub Dawidek fi 2291ba4a712SPawel Jakub Dawidek} 2301ba4a712SPawel Jakub Dawidek 2311ba4a712SPawel Jakub Dawidek# Destroy a memory-backed block device 2321ba4a712SPawel Jakub Dawidekdestroy_memdisk() 2331ba4a712SPawel Jakub Dawidek{ 2341ba4a712SPawel Jakub Dawidek disk="${1}" 2351ba4a712SPawel Jakub Dawidek 2361ba4a712SPawel Jakub Dawidek if [ "${os}" = "FreeBSD" ]; then 2371ba4a712SPawel Jakub Dawidek cmd="mdconfig -d -u ${disk}" 2381ba4a712SPawel Jakub Dawidek ${cmd} || die "failed: ${cmd}" 2391ba4a712SPawel Jakub Dawidek elif [ "${os}" = "SunOS" ]; then 2401ba4a712SPawel Jakub Dawidek cmd="lofiadm ${disk}" 2411ba4a712SPawel Jakub Dawidek fname=`${cmd}` || die "failed: ${cmd}" 2421ba4a712SPawel Jakub Dawidek 2431ba4a712SPawel Jakub Dawidek cmd="lofiadm -d ${disk}" 2441ba4a712SPawel Jakub Dawidek ${cmd} || die "failed: ${cmd}" 2451ba4a712SPawel Jakub Dawidek 2461ba4a712SPawel Jakub Dawidek cmd="rm ${fname}" 2471ba4a712SPawel Jakub Dawidek ${cmd} || die "failed: ${cmd}" 2481ba4a712SPawel Jakub Dawidek elif [ "${os}" = "Linux" ]; then 2491ba4a712SPawel Jakub Dawidek cmd="rm /dev/${disk}" 2501ba4a712SPawel Jakub Dawidek ${cmd} || die "failed: ${cmd}" 2511ba4a712SPawel Jakub Dawidek disk=`echo ${disk} | cut -c 9-` 2521ba4a712SPawel Jakub Dawidek 2531ba4a712SPawel Jakub Dawidek cmd="losetup /dev/${disk} | awk '{print substr(\$3, 2, length(\$3)-2)}'" 2541ba4a712SPawel Jakub Dawidek fname=`eval ${cmd}` || die "failed: ${cmd}" 2551ba4a712SPawel Jakub Dawidek 2561ba4a712SPawel Jakub Dawidek cmd="losetup -d /dev/${disk}" 2571ba4a712SPawel Jakub Dawidek ${cmd} || die "failed: ${cmd}" 2581ba4a712SPawel Jakub Dawidek 2591ba4a712SPawel Jakub Dawidek cmd="rm ${fname}" 2601ba4a712SPawel Jakub Dawidek ${cmd} || die "failed: ${cmd}" 2611ba4a712SPawel Jakub Dawidek else 2621ba4a712SPawel Jakub Dawidek die "Sorry, your OS is not supported" 2631ba4a712SPawel Jakub Dawidek fi 2641ba4a712SPawel Jakub Dawidek} 2651ba4a712SPawel Jakub Dawidek 2661ba4a712SPawel Jakub Dawidekdisks_create() 2671ba4a712SPawel Jakub Dawidek{ 2681ba4a712SPawel Jakub Dawidek if [ -z "${ndisks}" ]; then 2691ba4a712SPawel Jakub Dawidek start=0 2701ba4a712SPawel Jakub Dawidek else 2711ba4a712SPawel Jakub Dawidek start=${ndisks} 2721ba4a712SPawel Jakub Dawidek fi 2731ba4a712SPawel Jakub Dawidek ndisks=$((start+$1)) 2741ba4a712SPawel Jakub Dawidek n=$((ndisks-$start)) 2751ba4a712SPawel Jakub Dawidek if [ -z "${2}" ]; then 2761ba4a712SPawel Jakub Dawidek size="96M" 2771ba4a712SPawel Jakub Dawidek else 2781ba4a712SPawel Jakub Dawidek size="${2}" 2791ba4a712SPawel Jakub Dawidek fi 2801ba4a712SPawel Jakub Dawidek for i in `nums $n $start`; do 2811ba4a712SPawel Jakub Dawidek create_memdisk ${size} 2821ba4a712SPawel Jakub Dawidek eval disk${i}="${DISKNAME}" 2831ba4a712SPawel Jakub Dawidek eval fdisk${i}="${FDISKNAME}" 2841ba4a712SPawel Jakub Dawidek done 2851ba4a712SPawel Jakub Dawidek} 2861ba4a712SPawel Jakub Dawidek 2871ba4a712SPawel Jakub Dawidekdisks_destroy() 2881ba4a712SPawel Jakub Dawidek{ 2891ba4a712SPawel Jakub Dawidek for i in `nums $ndisks 0`; do 2901ba4a712SPawel Jakub Dawidek eval disk=\$disk${i} 2911ba4a712SPawel Jakub Dawidek if [ ! -z "${disk}" ]; then 2921ba4a712SPawel Jakub Dawidek destroy_memdisk ${disk} 2931ba4a712SPawel Jakub Dawidek fi 2941ba4a712SPawel Jakub Dawidek done 2951ba4a712SPawel Jakub Dawidek [ -n "${TMPDIR_DISKS}" ] && TMPDIR="${TMPDIR_DISKS}" cleanup_tmpfs 2961ba4a712SPawel Jakub Dawidek return 0 2971ba4a712SPawel Jakub Dawidek} 2981ba4a712SPawel Jakub Dawidek 2991ba4a712SPawel Jakub Dawidekdisk_create() 3001ba4a712SPawel Jakub Dawidek{ 3011ba4a712SPawel Jakub Dawidek diskno=${1} 3021ba4a712SPawel Jakub Dawidek eval disk=\$disk${diskno} 3031ba4a712SPawel Jakub Dawidek if [ ! -z ${disk} ]; then 3041ba4a712SPawel Jakub Dawidek die "disk${diskno} is already set" 3051ba4a712SPawel Jakub Dawidek fi 3061ba4a712SPawel Jakub Dawidek dname=${2} 3071ba4a712SPawel Jakub Dawidek if [ -z "${3}" ]; then 3081ba4a712SPawel Jakub Dawidek size="96M" 3091ba4a712SPawel Jakub Dawidek else 3101ba4a712SPawel Jakub Dawidek size="${3}" 3111ba4a712SPawel Jakub Dawidek fi 3121ba4a712SPawel Jakub Dawidek create_memdisk ${size} ${dname} 3131ba4a712SPawel Jakub Dawidek [ "${DISKNAME}" = "${dname}" ] || die "${DISKNAME} != ${dname}" 3141ba4a712SPawel Jakub Dawidek eval disk${diskno}="${DISKNAME}" 3151ba4a712SPawel Jakub Dawidek eval fdisk${diskno}="${FDISKNAME}" 3161ba4a712SPawel Jakub Dawidek} 3171ba4a712SPawel Jakub Dawidek 3181ba4a712SPawel Jakub Dawidekdisk_destroy() 3191ba4a712SPawel Jakub Dawidek{ 3201ba4a712SPawel Jakub Dawidek eval disk=\$disk${1} 3211ba4a712SPawel Jakub Dawidek destroy_memdisk ${disk} 3221ba4a712SPawel Jakub Dawidek eval disk${1}="" 3231ba4a712SPawel Jakub Dawidek} 3241ba4a712SPawel Jakub Dawidek 3251ba4a712SPawel Jakub Dawidekfiles_create() 3261ba4a712SPawel Jakub Dawidek{ 3271ba4a712SPawel Jakub Dawidek if [ -z "${nfiles}" ]; then 3281ba4a712SPawel Jakub Dawidek start=0 3291ba4a712SPawel Jakub Dawidek else 3301ba4a712SPawel Jakub Dawidek start=${nfiles} 3311ba4a712SPawel Jakub Dawidek fi 3321ba4a712SPawel Jakub Dawidek nfiles=$((start+$1)) 3331ba4a712SPawel Jakub Dawidek n=$((nfiles-$start)) 3341ba4a712SPawel Jakub Dawidek if [ -z "${2}" ]; then 3351ba4a712SPawel Jakub Dawidek size="96M" 3361ba4a712SPawel Jakub Dawidek else 3371ba4a712SPawel Jakub Dawidek size="${2}" 3381ba4a712SPawel Jakub Dawidek fi 3391ba4a712SPawel Jakub Dawidek for i in `nums $n $start`; do 3401ba4a712SPawel Jakub Dawidek if [ "${os}" = "Linux" ]; then 3411ba4a712SPawel Jakub Dawidek if [ -z "${TMPDIR_FILES}" ]; then 3421ba4a712SPawel Jakub Dawidek setup_tmpfs 3431ba4a712SPawel Jakub Dawidek TMPDIR_FILES="${TMPDIR}" 3441ba4a712SPawel Jakub Dawidek fi 3451ba4a712SPawel Jakub Dawidek file=`mktemp ${TMPDIR_FILES}/zfstest.XXXXXXXX` 3461ba4a712SPawel Jakub Dawidek else 3471ba4a712SPawel Jakub Dawidek file=`mktemp /tmp/zfstest.XXXXXXXX` 3481ba4a712SPawel Jakub Dawidek fi 3491ba4a712SPawel Jakub Dawidek truncate_cmd ${size} ${file} 3501ba4a712SPawel Jakub Dawidek eval file${i}=${file} 3511ba4a712SPawel Jakub Dawidek done 3521ba4a712SPawel Jakub Dawidek} 3531ba4a712SPawel Jakub Dawidek 3541ba4a712SPawel Jakub Dawidekfiles_destroy() 3551ba4a712SPawel Jakub Dawidek{ 3561ba4a712SPawel Jakub Dawidek for i in `nums $nfiles 0`; do 3571ba4a712SPawel Jakub Dawidek eval file=\$file${i} 3581ba4a712SPawel Jakub Dawidek rm -f ${file} 3591ba4a712SPawel Jakub Dawidek done 3601ba4a712SPawel Jakub Dawidek nfiles=0 3611ba4a712SPawel Jakub Dawidek [ -n "${TMPDIR_FILES}" ] && TMPDIR="${TMPDIR_FILES}" cleanup_tmpfs 3621ba4a712SPawel Jakub Dawidek return 0 3631ba4a712SPawel Jakub Dawidek} 3641ba4a712SPawel Jakub Dawidek 3651ba4a712SPawel Jakub Dawidekname_create() 3661ba4a712SPawel Jakub Dawidek{ 367*59dee1b0SEnji Cooper echo "zfstest_`dd if=/dev/urandom bs=1k count=1 2>/dev/null | openssl md5 | awk '{ print $NF }'`" 3681ba4a712SPawel Jakub Dawidek} 3691ba4a712SPawel Jakub Dawidek 3701ba4a712SPawel Jakub Dawideknames_create() 3711ba4a712SPawel Jakub Dawidek{ 3721ba4a712SPawel Jakub Dawidek nnames=$1 3731ba4a712SPawel Jakub Dawidek for i in `nums $nnames 0`; do 3741ba4a712SPawel Jakub Dawidek eval name${i}=`name_create` 3751ba4a712SPawel Jakub Dawidek done 3761ba4a712SPawel Jakub Dawidek} 3771ba4a712SPawel Jakub Dawidek 3781ba4a712SPawel Jakub Dawidekis_mountpoint() 3791ba4a712SPawel Jakub Dawidek{ 3801ba4a712SPawel Jakub Dawidek dir="${1}" 3811ba4a712SPawel Jakub Dawidek if [ ! -d "${dir}" ]; then 3821ba4a712SPawel Jakub Dawidek return 1 3831ba4a712SPawel Jakub Dawidek fi 3841ba4a712SPawel Jakub Dawidek if [ -n "${GNU_STAT}" ]; then 3851ba4a712SPawel Jakub Dawidek statcmd="stat -c" 3861ba4a712SPawel Jakub Dawidek else 3871ba4a712SPawel Jakub Dawidek statcmd="stat -f" 3881ba4a712SPawel Jakub Dawidek fi 3891ba4a712SPawel Jakub Dawidek if [ "`${statcmd} '%d' ${dir} 2>/dev/null`" -eq "`${statcmd} '%d' ${dir}/.. 2>/dev/null`" ]; then 3901ba4a712SPawel Jakub Dawidek return 1 3911ba4a712SPawel Jakub Dawidek fi 3921ba4a712SPawel Jakub Dawidek return 0 3931ba4a712SPawel Jakub Dawidek} 3941ba4a712SPawel Jakub Dawidek 3951ba4a712SPawel Jakub Dawideknums() 3961ba4a712SPawel Jakub Dawidek{ 3971ba4a712SPawel Jakub Dawidek which jot >/dev/null 2>&1 3981ba4a712SPawel Jakub Dawidek if [ $? -eq 0 ]; then 3991ba4a712SPawel Jakub Dawidek jot ${1} ${2} 4001ba4a712SPawel Jakub Dawidek return $? 4011ba4a712SPawel Jakub Dawidek fi 4021ba4a712SPawel Jakub Dawidek 4031ba4a712SPawel Jakub Dawidek start="${2}" 4041ba4a712SPawel Jakub Dawidek [ -z "${start}" ] && start="1"; 4051ba4a712SPawel Jakub Dawidek end=$((${1}+${start}-1)) 4061ba4a712SPawel Jakub Dawidek 4071ba4a712SPawel Jakub Dawidek which seq >/dev/null 2>&1 4081ba4a712SPawel Jakub Dawidek if [ $? -eq 0 ]; then 4091ba4a712SPawel Jakub Dawidek seq ${start} ${end} 4101ba4a712SPawel Jakub Dawidek return $? 4111ba4a712SPawel Jakub Dawidek fi 4121ba4a712SPawel Jakub Dawidek 4131ba4a712SPawel Jakub Dawidek i=1 4141ba4a712SPawel Jakub Dawidek while :; do 4151ba4a712SPawel Jakub Dawidek echo $i 4161ba4a712SPawel Jakub Dawidek if [ $i -eq ${1} ]; then 4171ba4a712SPawel Jakub Dawidek break 4181ba4a712SPawel Jakub Dawidek fi 4191ba4a712SPawel Jakub Dawidek i=$((i+1)) 4201ba4a712SPawel Jakub Dawidek done 4211ba4a712SPawel Jakub Dawidek} 4221ba4a712SPawel Jakub Dawidek 4231ba4a712SPawel Jakub Dawidekwait_for_resilver() 4241ba4a712SPawel Jakub Dawidek{ 4251ba4a712SPawel Jakub Dawidek for i in `nums 64`; do 4261ba4a712SPawel Jakub Dawidek ${ZPOOL} status ${1} | grep replacing >/dev/null 4271ba4a712SPawel Jakub Dawidek if [ $? -ne 0 ]; then 4281ba4a712SPawel Jakub Dawidek break 4291ba4a712SPawel Jakub Dawidek fi 4301ba4a712SPawel Jakub Dawidek sleep 1 4311ba4a712SPawel Jakub Dawidek done 4321ba4a712SPawel Jakub Dawidek} 4331ba4a712SPawel Jakub Dawidek 4341ba4a712SPawel Jakub Dawidekget_guid() 4351ba4a712SPawel Jakub Dawidek{ 4361ba4a712SPawel Jakub Dawidek ${ZDB} -l ${1} | grep -B1 ${1} | grep guid | head -n1 | awk 'BEGIN {FS="="} {print $2}' 4371ba4a712SPawel Jakub Dawidek} 438