]> granicus.if.org Git - zfs/commitdiff
zdb and inuse tests don't pass with real disks
authorPaul Zuchowski <31706010+PaulZ-98@users.noreply.github.com>
Thu, 8 Mar 2018 01:03:33 +0000 (20:03 -0500)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Thu, 8 Mar 2018 01:03:33 +0000 (17:03 -0800)
Due to zpool create auto-partioning in Linux (i.e. sdb1),
certain utilities need to use the parition (sdb1) while
others use the whole disk name (sdb).

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Paul Zuchowski <pzuchowski@datto.com>
Closes #6939
Closes #7261

tests/zfs-tests/include/blkdev.shlib
tests/zfs-tests/include/libtest.shlib
tests/zfs-tests/tests/functional/cli_root/zdb/zdb_003_pos.ksh
tests/zfs-tests/tests/functional/cli_root/zdb/zdb_004_pos.ksh
tests/zfs-tests/tests/functional/cli_root/zdb/zdb_005_pos.ksh
tests/zfs-tests/tests/functional/inuse/inuse_005_pos.ksh
tests/zfs-tests/tests/functional/inuse/inuse_008_pos.ksh
tests/zfs-tests/tests/functional/inuse/inuse_009_pos.ksh

index 28ac1052c3d0cbdaeb4c1f6d38a97e4da434df45..87ffa8560b7e58012ab14106ef92c1155d1a3660 100644 (file)
@@ -423,3 +423,19 @@ function get_debug_device
 {
        lsscsi | nawk '/scsi_debug/ {print $6; exit}' | cut -d / -f3
 }
+
+#
+# Get actual devices used by the pool (i.e. linux sdb1 not sdb).
+#
+function get_pool_devices #testpool #devdir
+{
+       typeset testpool=$1
+       typeset devdir=$2
+       typeset out=""
+
+       if is_linux; then
+               out=$(zpool status -P $testpool |grep ${devdir} | awk '{print $1}')
+               out=$(echo $out | sed -e "s|${devdir}/||g" | tr '\n' ' ')
+       fi
+       echo $out
+}
index 464b59d3f8561756881d1de1089f015ae7ff3c31..3a310680b521bb53946af111353581bf0af4ee3f 100644 (file)
@@ -806,7 +806,11 @@ function zero_partitions #<whole_disk_name>
        typeset i
 
        if is_linux; then
-               log_must parted $DEV_DSKDIR/$diskname -s -- mklabel gpt
+               DSK=$DEV_DSKDIR/$diskname
+               DSK=$(echo $DSK | sed -e "s|//|/|g")
+               log_must parted $DSK -s -- mklabel gpt
+               blockdev --rereadpt $DSK 2>/dev/null
+               block_device_wait
        else
                for i in 0 1 3 4 5 6 7
                do
@@ -834,10 +838,11 @@ function set_partition #<slice_num> <slice_start> <size_plus_units>  <whole_disk
        typeset start=$2
        typeset size=$3
        typeset disk=$4
-       [[ -z $slicenum || -z $size || -z $disk ]] && \
-           log_fail "The slice, size or disk name is unspecified."
 
        if is_linux; then
+               if [[ -z $size || -z $disk ]]; then
+                       log_fail "The size or disk name is unspecified."
+               fi
                typeset size_mb=${size%%[mMgG]}
 
                size_mb=${size_mb%%[mMgG][bB]}
@@ -880,6 +885,10 @@ function set_partition #<slice_num> <slice_start> <size_plus_units>  <whole_disk
                blockdev --rereadpt $DEV_DSKDIR/$disk 2>/dev/null
                block_device_wait
        else
+               if [[ -z $slicenum || -z $size || -z $disk ]]; then
+                       log_fail "The slice, size or disk name is unspecified."
+               fi
+
                typeset format_file=/var/tmp/format_in.$$
 
                echo "partition" >$format_file
index 4c57cb587a7bd5462d6cfd118df0cd49cb89b52d..3c444ae983dcffc0c02a615bea57f91c5fa7911c 100755 (executable)
@@ -43,6 +43,11 @@ config_count=(1 2)
 set -A DISK $DISKS
 
 default_mirror_setup_noexit $DISKS
+
+DEVS=$(get_pool_devices ${TESTPOOL} ${DEV_RDSKDIR})
+log_note "$DEVS"
+[[ -n $DEVS ]] && set -A DISK $DEVS
+
 log_must dd if=/dev/${DISK[0]} of=/dev/${DISK[1]} bs=1K count=256 conv=notrunc
 
 for x in 0 1 ; do
index 2b4057aa76bb594fb0feec602af18aa0806c5abd..91a5c979976276f53af1e912b6ef9cb73c8cd11b 100755 (executable)
@@ -45,17 +45,22 @@ function cleanup
 verify_runnable "global"
 verify_disk_count "$DISKS" 2
 set -A DISK $DISKS
+WHOLE_DISK=${DISK[0]}
 
 default_mirror_setup_noexit $DISKS
-log_must zpool offline $TESTPOOL ${DISK[0]}
+DEVS=$(get_pool_devices ${TESTPOOL} ${DEV_RDSKDIR})
+[[ -n $DEVS ]] && set -A DISK $DEVS
+
+log_must zpool offline $TESTPOOL ${WHOLE_DISK}
 log_must dd if=/dev/urandom of=$TESTDIR/testfile bs=1K count=2
 log_must zpool export $TESTPOOL
+
 log_must dd if=$DEV_RDSKDIR/${DISK[0]} of=$DEV_RDSKDIR/${DISK[1]} bs=1K count=256 conv=notrunc
 
-ubs=$(zdb -lu $DEV_RDSKDIR/${DISK[1]} | grep -e LABEL -e Uberblock -e 'labels = ')
+ubs=$(zdb -lu ${DISK[1]} | grep -e LABEL -e Uberblock -e 'labels = ')
 log_note "vdev 1: ubs $ubs"
 
-ub_dump_counts=$(zdb -lu $DEV_RDSKDIR/${DISK[1]} | \
+ub_dump_counts=$(zdb -lu ${DISK[1]} | \
        awk '   /LABEL/ {label=$NF; blocks[label]=0};
                /Uberblock/ {blocks[label]++};
                END {print blocks[0],blocks[1],blocks[2],blocks[3]}')
index c98caed426f6ca03de7341ccbf954cd66f73a1d8..49e237c7052d75cf68c36477f7981889fccc0394 100755 (executable)
@@ -45,6 +45,10 @@ verify_disk_count "$DISKS" 2
 set -A DISK $DISKS
 
 default_mirror_setup_noexit $DISKS
+DEVS=$(get_pool_devices ${TESTPOOL} ${DEV_RDSKDIR})
+log_note "$DEVS"
+[[ -n $DEVS ]] && set -A DISK $DEVS
+
 log_must dd if=/dev/zero of=$DEV_RDSKDIR/${DISK[1]} bs=1K count=256 conv=notrunc
 log_must truncate -s 0 $TEMPFILE
 
index 9dd1e25bf408fcd68ed0b414f8b05e00db364a94..6b0abf429dfc4d0e098284b4d6384d6ed993236b 100755 (executable)
@@ -82,19 +82,18 @@ typeset -i i=0
 
 unset NOINUSE_CHECK
 while (( i < ${#vdevs[*]} )); do
-
        for num in 0 1 2 3 ; do
                eval typeset disk=\${FS_DISK$num}
                zero_partitions $disk
        done
-
        typeset cyl=""
        for num in 0 1 2 3 ; do
                eval typeset slice=\${FS_SIDE$num}
                disk=${slice%${SLICE_PREFIX}*}
-               slice=${slice##*${SLICE_PREFIX}}
+               [[ -z $SLICE_PREFIX ]] && eval typeset disk=\${FS_DISK$num}
+               slice=$(echo $slice | awk '{ print substr($1,length($1),1) }')
                log_must set_partition $slice "$cyl" $FS_SIZE $disk
-               cyl=$(get_endslice $disk $slice)
+               [[ $num < 3 ]] && cyl=$(get_endslice $disk $slice)
        done
 
        if [[ -n $SINGLE_DISK && -n ${vdevs[i]} ]]; then
@@ -115,7 +114,6 @@ while (( i < ${#vdevs[*]} )); do
                (( i = i + 1 ))
                continue
        fi
-
        create_pool $TESTPOOL1 ${vdevs[i]} $vdisks spare $sdisks
        verify_assertion "$rawtargets"
        destroy_pool $TESTPOOL1
index 95d39d958c3fcd8f8af4deb3bf560854c0b8f055..ddc8fa7a49c2a286a582eda3488ebf9a54fbbd54 100755 (executable)
@@ -92,9 +92,10 @@ done
 for num in 0 1 2 3 ; do
        eval typeset slice=\${FS_SIDE$num}
        disk=${slice%${SLICE_PREFIX}*}
-       slice=${slice##*${SLICE_PREFIX}}
+       [[ -z $SLICE_PREFIX ]] && eval typeset disk=\${FS_DISK$num}
+       slice=$(echo $slice | awk '{ print substr($1,length($1),1) }')
        log_must set_partition $slice "$cyl" $FS_SIZE $disk
-       cyl=$(get_endslice $disk $slice)
+       [[ $num < 3 ]] && cyl=$(get_endslice $disk $slice)
 done
 
 while (( i < ${#vdevs[*]} )); do
index 6a9b9623cc878170bdbabc5570b868ebd2610de2..a5e9fda596dcc080fb86210a45d7a57b86c744cc 100755 (executable)
@@ -82,13 +82,19 @@ typeset -i i=0
 
 while (( i < ${#vdevs[*]} )); do
 
+       for num in 0 1 2 3 ; do
+               eval typeset disk=\${FS_DISK$num}
+               zero_partitions $disk
+       done
+
        typeset cyl=""
        for num in 0 1 2 3 ; do
                eval typeset slice=\${FS_SIDE$num}
                disk=${slice%${SLICE_PREFIX}*}
-               slice=${slice##*${SLICE_PREFIX}}
+               [[ -z $SLICE_PREFIX ]] && eval typeset disk=\${FS_DISK$num}
+               slice=$(echo $slice | awk '{ print substr($1,length($1),1) }')
                log_must set_partition $slice "$cyl" $FS_SIZE $disk
-               cyl=$(get_endslice $disk $slice)
+               [[ $num < 3 ]] && cyl=$(get_endslice $disk $slice)
        done
 
        if [[ -n $SINGLE_DISK && -n ${vdevs[i]} ]]; then