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