diff options
author | Ryan Moeller <[email protected]> | 2020-01-03 12:10:17 -0500 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2020-01-03 09:10:17 -0800 |
commit | 665684d721f01772f3557b952829e2a3a5c35423 (patch) | |
tree | acddb6cc73267c6c1dd9040ce6f00ec2c0ebaf2f | |
parent | d7164b27bee6c2837affcc42892fbd4b45dd13ff (diff) |
ZTS: Add helper for disk device check
Replace `test -b` and equivalents with `is_disk_device`, so that `-c`
is used instead on FreeBSD which has no block cache layer for devices.
Reviewed-by: Richard Elling <[email protected]>
Reviewed-by: Brian Behlendorf <[email protected]>
Signed-off-by: Ryan Moeller <[email protected]>
Closes #9795
7 files changed, 46 insertions, 24 deletions
diff --git a/tests/zfs-tests/include/blkdev.shlib b/tests/zfs-tests/include/blkdev.shlib index 758af09ad..66c18b86b 100644 --- a/tests/zfs-tests/include/blkdev.shlib +++ b/tests/zfs-tests/include/blkdev.shlib @@ -93,11 +93,19 @@ function is_physical_device #device device=${device#$DEV_RDSKDIR} if is_linux; then - [[ -b "$DEV_DSKDIR/$device" ]] && \ + is_disk_device "$DEV_DSKDIR/$device" && \ [[ -f /sys/module/loop/parameters/max_part ]] return $? elif is_freebsd; then - echo $device | grep -q -e '^a?da[0-9]*$' -e '^md[0-9]*$' > /dev/null 2>&1 + is_disk_device "$DEV_DSKDIR/$device" && \ + echo $device | grep -q \ + -e '^a?da[0-9]+$' \ + -e '^md[0-9]+$' \ + -e '^mfid[0-9]+$' \ + -e '^nda[0-9]+$' \ + -e '^nvd[0-9]+$' \ + -e '^vtbd[0-9]+$' \ + > /dev/null 2>&1 return $? else echo $device | egrep "^c[0-F]+([td][0-F]+)+$" > /dev/null 2>&1 @@ -162,12 +170,27 @@ function is_mpath_device #disk return $? fi elif is_freebsd; then - test -b $DEV_MPATHDIR/$disk + is_disk_device $DEV_MPATHDIR/$disk else false fi } +# +# Check if the given path is the appropriate sort of device special node. +# +function is_disk_device #path +{ + typeset path=$1 + + if is_freebsd; then + # FreeBSD doesn't have block devices, only character devices. + test -c $path + else + test -b $path + fi +} + # Set the slice prefix for disk partitioning depending # on whether the device is a real, multipath, or loop device. # Currently all disks have to be of the same type, so only @@ -241,7 +264,7 @@ function get_device_dir #device if [[ $device != "/" ]]; then device=${device%/*} fi - if [[ -b "$DEV_DSKDIR/$device" ]]; then + if is_disk_device "$DEV_DSKDIR/$device"; then device="$DEV_DSKDIR" fi echo $device diff --git a/tests/zfs-tests/include/libtest.shlib b/tests/zfs-tests/include/libtest.shlib index d6033bf30..888abdb75 100644 --- a/tests/zfs-tests/include/libtest.shlib +++ b/tests/zfs-tests/include/libtest.shlib @@ -2392,13 +2392,12 @@ EOF # each case. limit the number to max_finddisksnum count=0 for disk in $unused_candidates; do - if [ -b $DEV_DSKDIR/${disk}s0 ]; then - if [ $count -lt $max_finddisksnum ]; then + if is_disk_device $DEV_DSKDIR/${disk}s0 && \ + [ $count -lt $max_finddisksnum ]; then unused="$unused $disk" # do not impose limit if $@ is provided [[ -z $@ ]] && ((count = count + 1)) fi - fi done # finally, return our disk list diff --git a/tests/zfs-tests/tests/functional/cli_root/zpool_trim/setup.ksh b/tests/zfs-tests/tests/functional/cli_root/zpool_trim/setup.ksh index cdcf038ad..d524c0005 100755 --- a/tests/zfs-tests/tests/functional/cli_root/zpool_trim/setup.ksh +++ b/tests/zfs-tests/tests/functional/cli_root/zpool_trim/setup.ksh @@ -26,7 +26,7 @@ verify_runnable "global" DISK1=${DISKS%% *} typeset -i max_discard=0 -if [[ -b $DEV_RDSKDIR/$DISK1 ]]; then +if is_disk_device $DEV_RDSKDIR/$DISK1; then max_discard=$(lsblk -Dbn $DEV_RDSKDIR/$DISK1 | awk '{ print $4; exit }') fi diff --git a/tests/zfs-tests/tests/functional/redacted_send/redacted_mounts.ksh b/tests/zfs-tests/tests/functional/redacted_send/redacted_mounts.ksh index b24f5ccad..205797184 100755 --- a/tests/zfs-tests/tests/functional/redacted_send/redacted_mounts.ksh +++ b/tests/zfs-tests/tests/functional/redacted_send/redacted_mounts.ksh @@ -76,23 +76,23 @@ log_must diff <(echo ${contents//$recv_mnt/}) \ log_must zfs redact $sendvol@snap book2 $clonevol@snap log_must eval "zfs send --redact book2 $sendvol@snap >$stream" log_must eval "zfs receive $recvvol <$stream" -[[ -b $recv_vol_file ]] && log_fail "Volume device file should not exist." +is_disk_device $recv_vol_file && log_fail "Volume device file should not exist." log_must set_tunable32 zfs_allow_redacted_dataset_mount 1 log_must zpool export $POOL2 log_must zpool import $POOL2 udevadm settle # The device file isn't guaranteed to show up right away. -if [[ ! -b $recv_vol_file ]]; then +if ! is_disk_device $recv_vol_file; then udevadm settle for t in 10 5 3 2 1; do log_note "Polling $t seconds for device file." udevadm settle sleep $t - [[ -b $recv_vol_file ]] && break + is_disk_device $recv_vol_file && break done fi -[[ -b $recv_vol_file ]] || log_fail "Volume device file should exist." +is_disk_device $recv_vol_file || log_fail "Volume device file should exist." log_must dd if=/dev/urandom of=$send_mnt/dir1/contents1 bs=512 count=2 log_must rm $send_mnt/dir1/dir2/empty diff --git a/tests/zfs-tests/tests/functional/redacted_send/redacted_volume.ksh b/tests/zfs-tests/tests/functional/redacted_send/redacted_volume.ksh index b3c519b7d..13453fa36 100755 --- a/tests/zfs-tests/tests/functional/redacted_send/redacted_volume.ksh +++ b/tests/zfs-tests/tests/functional/redacted_send/redacted_volume.ksh @@ -44,13 +44,13 @@ sleep 10 log_must zpool export $POOL log_must zpool import $POOL udevadm settle -if [[ ! -b $send_file ]]; then +if ! is_disk_device $send_file; then udevadm settle for t in 10 5 3 2 1; do log_note "Polling $t seconds for device file." udevadm settle sleep $t - [[ -b $send_file ]] && break + is_disk_device $send_file && break done fi log_must dd if=/dev/urandom of=$send_file bs=8k count=64 @@ -66,13 +66,13 @@ sleep 10 log_must zpool export $POOL2 log_must zpool import $POOL2 udevadm settle -if [[ ! -b $recv_file ]]; then +if ! is_disk_device $recv_file; then udevadm settle for t in 10 5 3 2 1; do log_note "Polling $t seconds for device file." udevadm settle sleep $t - [[ -b $recv_file ]] && break + is_disk_device $recv_file && break done fi log_must dd if=$send_file of=$tmpdir/send.dd bs=8k count=64 @@ -89,13 +89,13 @@ sleep 10 log_must zpool export $POOL2 log_must zpool import $POOL2 udevadm settle -if [[ ! -b $recv_file ]]; then +if ! is_disk_device $recv_file; then udevadm settle for t in 10 5 3 2 1; do log_note "Polling $t seconds for device file." udevadm settle sleep $t - [[ -b $recv_file ]] && break + is_disk_device $recv_file && break done fi log_must dd if=$send_file of=$tmpdir/send.dd bs=8k count=32 skip=32 diff --git a/tests/zfs-tests/tests/functional/trim/setup.ksh b/tests/zfs-tests/tests/functional/trim/setup.ksh index 3eb644690..52d57a766 100755 --- a/tests/zfs-tests/tests/functional/trim/setup.ksh +++ b/tests/zfs-tests/tests/functional/trim/setup.ksh @@ -30,7 +30,7 @@ else DISK1=${DISKS%% *} typeset -i max_discard=0 - if [[ -b $DEV_RDSKDIR/$DISK1 ]]; then + if is_disk_device $DEV_RDSKDIR/$DISK1; then max_discard=$(lsblk -Dbn $DEV_RDSKDIR/$DISK1 | awk '{ print $4; exit }') fi diff --git a/tests/zfs-tests/tests/functional/zvol/zvol_misc/zvol_misc_common.kshlib b/tests/zfs-tests/tests/functional/zvol/zvol_misc/zvol_misc_common.kshlib index fb6d992ff..505e76ca5 100644 --- a/tests/zfs-tests/tests/functional/zvol/zvol_misc/zvol_misc_common.kshlib +++ b/tests/zfs-tests/tests/functional/zvol/zvol_misc/zvol_misc_common.kshlib @@ -80,7 +80,7 @@ function blockdev_exists # device # that can affect device nodes for i in {1..3}; do udev_wait - [[ -b "$device" ]] && return 0 + is_disk_device "$device" && return 0 done log_fail "$device does not exist as a block device" } @@ -127,17 +127,17 @@ function verify_partition # device { typeset device="$1" - if [[ ! -b "$device" ]]; then + if ! is_disk_device "$device"; then log_fail "$device is not a block device" fi # create a small dummy partition set_partition 0 1 1m $device # verify we can access the partition on the device devname="$(readlink -f "$device")" - if is_linux; then - [[ -b "$devname""p1" ]] + if is_linux || is_freebsd; then + is_disk_device "$devname""p1" else - [[ -b "$devname""s0" ]] + is_disk_device "$devname""s0" fi return $? } |