]> git.proxmox.com Git - zfsonlinux.git/blob - zfs-patches/0050-zdb-and-inuse-tests-don-t-pass-with-real-disks.patch
revert potentially buggy zap_add change
[zfsonlinux.git] / zfs-patches / 0050-zdb-and-inuse-tests-don-t-pass-with-real-disks.patch
1 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
2 From: Paul Zuchowski <31706010+PaulZ-98@users.noreply.github.com>
3 Date: Wed, 7 Mar 2018 20:03:33 -0500
4 Subject: [PATCH] zdb and inuse tests don't pass with real disks
5 MIME-Version: 1.0
6 Content-Type: text/plain; charset=UTF-8
7 Content-Transfer-Encoding: 8bit
8
9 Due to zpool create auto-partioning in Linux (i.e. sdb1),
10 certain utilities need to use the parition (sdb1) while
11 others use the whole disk name (sdb).
12
13 Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
14 Signed-off-by: Paul Zuchowski <pzuchowski@datto.com>
15 Closes #6939
16 Closes #7261
17 (cherry picked from commit 0a0af41bd926ca20a26d7476d792ce82bca9c077)
18 Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
19 ---
20 tests/zfs-tests/include/libtest.shlib | 31 +++++++++++++++++++---
21 .../tests/functional/cli_root/zdb/zdb_003_pos.ksh | 5 ++++
22 .../tests/functional/cli_root/zdb/zdb_004_pos.ksh | 11 +++++---
23 .../tests/functional/cli_root/zdb/zdb_005_pos.ksh | 4 +++
24 .../tests/functional/inuse/inuse_005_pos.ksh | 8 +++---
25 .../tests/functional/inuse/inuse_008_pos.ksh | 5 ++--
26 .../tests/functional/inuse/inuse_009_pos.ksh | 10 +++++--
27 7 files changed, 59 insertions(+), 15 deletions(-)
28
29 diff --git a/tests/zfs-tests/include/libtest.shlib b/tests/zfs-tests/include/libtest.shlib
30 index 48fb5e7c5..d51d73e61 100644
31 --- a/tests/zfs-tests/include/libtest.shlib
32 +++ b/tests/zfs-tests/include/libtest.shlib
33 @@ -767,7 +767,11 @@ function zero_partitions #<whole_disk_name>
34 typeset i
35
36 if is_linux; then
37 - log_must parted $DEV_DSKDIR/$diskname -s -- mklabel gpt
38 + DSK=$DEV_DSKDIR/$diskname
39 + DSK=$(echo $DSK | sed -e "s|//|/|g")
40 + log_must parted $DSK -s -- mklabel gpt
41 + blockdev --rereadpt $DSK 2>/dev/null
42 + block_device_wait
43 else
44 for i in 0 1 3 4 5 6 7
45 do
46 @@ -795,10 +799,11 @@ function set_partition #<slice_num> <slice_start> <size_plus_units> <whole_disk
47 typeset start=$2
48 typeset size=$3
49 typeset disk=$4
50 - [[ -z $slicenum || -z $size || -z $disk ]] && \
51 - log_fail "The slice, size or disk name is unspecified."
52
53 if is_linux; then
54 + if [[ -z $size || -z $disk ]]; then
55 + log_fail "The size or disk name is unspecified."
56 + fi
57 typeset size_mb=${size%%[mMgG]}
58
59 size_mb=${size_mb%%[mMgG][bB]}
60 @@ -841,6 +846,10 @@ function set_partition #<slice_num> <slice_start> <size_plus_units> <whole_disk
61 blockdev --rereadpt $DEV_DSKDIR/$disk 2>/dev/null
62 block_device_wait
63 else
64 + if [[ -z $slicenum || -z $size || -z $disk ]]; then
65 + log_fail "The slice, size or disk name is unspecified."
66 + fi
67 +
68 typeset format_file=/var/tmp/format_in.$$
69
70 echo "partition" >$format_file
71 @@ -3634,3 +3643,19 @@ function get_tunable_impl
72
73 return 1
74 }
75 +
76 +#
77 +# Get actual devices used by the pool (i.e. linux sdb1 not sdb).
78 +#
79 +function get_pool_devices #testpool #devdir
80 +{
81 + typeset testpool=$1
82 + typeset devdir=$2
83 + typeset out=""
84 +
85 + if is_linux; then
86 + out=$(zpool status -P $testpool |grep ${devdir} | awk '{print $1}')
87 + out=$(echo $out | sed -e "s|${devdir}/||g" | tr '\n' ' ')
88 + fi
89 + echo $out
90 +}
91 diff --git a/tests/zfs-tests/tests/functional/cli_root/zdb/zdb_003_pos.ksh b/tests/zfs-tests/tests/functional/cli_root/zdb/zdb_003_pos.ksh
92 index 4c57cb587..3c444ae98 100755
93 --- a/tests/zfs-tests/tests/functional/cli_root/zdb/zdb_003_pos.ksh
94 +++ b/tests/zfs-tests/tests/functional/cli_root/zdb/zdb_003_pos.ksh
95 @@ -43,6 +43,11 @@ config_count=(1 2)
96 set -A DISK $DISKS
97
98 default_mirror_setup_noexit $DISKS
99 +
100 +DEVS=$(get_pool_devices ${TESTPOOL} ${DEV_RDSKDIR})
101 +log_note "$DEVS"
102 +[[ -n $DEVS ]] && set -A DISK $DEVS
103 +
104 log_must dd if=/dev/${DISK[0]} of=/dev/${DISK[1]} bs=1K count=256 conv=notrunc
105
106 for x in 0 1 ; do
107 diff --git a/tests/zfs-tests/tests/functional/cli_root/zdb/zdb_004_pos.ksh b/tests/zfs-tests/tests/functional/cli_root/zdb/zdb_004_pos.ksh
108 index 2b4057aa7..91a5c9799 100755
109 --- a/tests/zfs-tests/tests/functional/cli_root/zdb/zdb_004_pos.ksh
110 +++ b/tests/zfs-tests/tests/functional/cli_root/zdb/zdb_004_pos.ksh
111 @@ -45,17 +45,22 @@ function cleanup
112 verify_runnable "global"
113 verify_disk_count "$DISKS" 2
114 set -A DISK $DISKS
115 +WHOLE_DISK=${DISK[0]}
116
117 default_mirror_setup_noexit $DISKS
118 -log_must zpool offline $TESTPOOL ${DISK[0]}
119 +DEVS=$(get_pool_devices ${TESTPOOL} ${DEV_RDSKDIR})
120 +[[ -n $DEVS ]] && set -A DISK $DEVS
121 +
122 +log_must zpool offline $TESTPOOL ${WHOLE_DISK}
123 log_must dd if=/dev/urandom of=$TESTDIR/testfile bs=1K count=2
124 log_must zpool export $TESTPOOL
125 +
126 log_must dd if=$DEV_RDSKDIR/${DISK[0]} of=$DEV_RDSKDIR/${DISK[1]} bs=1K count=256 conv=notrunc
127
128 -ubs=$(zdb -lu $DEV_RDSKDIR/${DISK[1]} | grep -e LABEL -e Uberblock -e 'labels = ')
129 +ubs=$(zdb -lu ${DISK[1]} | grep -e LABEL -e Uberblock -e 'labels = ')
130 log_note "vdev 1: ubs $ubs"
131
132 -ub_dump_counts=$(zdb -lu $DEV_RDSKDIR/${DISK[1]} | \
133 +ub_dump_counts=$(zdb -lu ${DISK[1]} | \
134 awk ' /LABEL/ {label=$NF; blocks[label]=0};
135 /Uberblock/ {blocks[label]++};
136 END {print blocks[0],blocks[1],blocks[2],blocks[3]}')
137 diff --git a/tests/zfs-tests/tests/functional/cli_root/zdb/zdb_005_pos.ksh b/tests/zfs-tests/tests/functional/cli_root/zdb/zdb_005_pos.ksh
138 index 60bbb5615..f6730f611 100755
139 --- a/tests/zfs-tests/tests/functional/cli_root/zdb/zdb_005_pos.ksh
140 +++ b/tests/zfs-tests/tests/functional/cli_root/zdb/zdb_005_pos.ksh
141 @@ -44,6 +44,10 @@ verify_disk_count "$DISKS" 2
142 set -A DISK $DISKS
143
144 default_mirror_setup_noexit $DISKS
145 +DEVS=$(get_pool_devices ${TESTPOOL} ${DEV_RDSKDIR})
146 +log_note "$DEVS"
147 +[[ -n $DEVS ]] && set -A DISK $DEVS
148 +
149 log_must dd if=/dev/zero of=$DEV_RDSKDIR/${DISK[1]} bs=1K count=256 conv=notrunc
150 log_must truncate -s 0 $TEMPFILE
151
152 diff --git a/tests/zfs-tests/tests/functional/inuse/inuse_005_pos.ksh b/tests/zfs-tests/tests/functional/inuse/inuse_005_pos.ksh
153 index 9dd1e25bf..6b0abf429 100755
154 --- a/tests/zfs-tests/tests/functional/inuse/inuse_005_pos.ksh
155 +++ b/tests/zfs-tests/tests/functional/inuse/inuse_005_pos.ksh
156 @@ -82,19 +82,18 @@ typeset -i i=0
157
158 unset NOINUSE_CHECK
159 while (( i < ${#vdevs[*]} )); do
160 -
161 for num in 0 1 2 3 ; do
162 eval typeset disk=\${FS_DISK$num}
163 zero_partitions $disk
164 done
165 -
166 typeset cyl=""
167 for num in 0 1 2 3 ; do
168 eval typeset slice=\${FS_SIDE$num}
169 disk=${slice%${SLICE_PREFIX}*}
170 - slice=${slice##*${SLICE_PREFIX}}
171 + [[ -z $SLICE_PREFIX ]] && eval typeset disk=\${FS_DISK$num}
172 + slice=$(echo $slice | awk '{ print substr($1,length($1),1) }')
173 log_must set_partition $slice "$cyl" $FS_SIZE $disk
174 - cyl=$(get_endslice $disk $slice)
175 + [[ $num < 3 ]] && cyl=$(get_endslice $disk $slice)
176 done
177
178 if [[ -n $SINGLE_DISK && -n ${vdevs[i]} ]]; then
179 @@ -115,7 +114,6 @@ while (( i < ${#vdevs[*]} )); do
180 (( i = i + 1 ))
181 continue
182 fi
183 -
184 create_pool $TESTPOOL1 ${vdevs[i]} $vdisks spare $sdisks
185 verify_assertion "$rawtargets"
186 destroy_pool $TESTPOOL1
187 diff --git a/tests/zfs-tests/tests/functional/inuse/inuse_008_pos.ksh b/tests/zfs-tests/tests/functional/inuse/inuse_008_pos.ksh
188 index 95d39d958..ddc8fa7a4 100755
189 --- a/tests/zfs-tests/tests/functional/inuse/inuse_008_pos.ksh
190 +++ b/tests/zfs-tests/tests/functional/inuse/inuse_008_pos.ksh
191 @@ -92,9 +92,10 @@ done
192 for num in 0 1 2 3 ; do
193 eval typeset slice=\${FS_SIDE$num}
194 disk=${slice%${SLICE_PREFIX}*}
195 - slice=${slice##*${SLICE_PREFIX}}
196 + [[ -z $SLICE_PREFIX ]] && eval typeset disk=\${FS_DISK$num}
197 + slice=$(echo $slice | awk '{ print substr($1,length($1),1) }')
198 log_must set_partition $slice "$cyl" $FS_SIZE $disk
199 - cyl=$(get_endslice $disk $slice)
200 + [[ $num < 3 ]] && cyl=$(get_endslice $disk $slice)
201 done
202
203 while (( i < ${#vdevs[*]} )); do
204 diff --git a/tests/zfs-tests/tests/functional/inuse/inuse_009_pos.ksh b/tests/zfs-tests/tests/functional/inuse/inuse_009_pos.ksh
205 index 6a9b9623c..a5e9fda59 100755
206 --- a/tests/zfs-tests/tests/functional/inuse/inuse_009_pos.ksh
207 +++ b/tests/zfs-tests/tests/functional/inuse/inuse_009_pos.ksh
208 @@ -82,13 +82,19 @@ typeset -i i=0
209
210 while (( i < ${#vdevs[*]} )); do
211
212 + for num in 0 1 2 3 ; do
213 + eval typeset disk=\${FS_DISK$num}
214 + zero_partitions $disk
215 + done
216 +
217 typeset cyl=""
218 for num in 0 1 2 3 ; do
219 eval typeset slice=\${FS_SIDE$num}
220 disk=${slice%${SLICE_PREFIX}*}
221 - slice=${slice##*${SLICE_PREFIX}}
222 + [[ -z $SLICE_PREFIX ]] && eval typeset disk=\${FS_DISK$num}
223 + slice=$(echo $slice | awk '{ print substr($1,length($1),1) }')
224 log_must set_partition $slice "$cyl" $FS_SIZE $disk
225 - cyl=$(get_endslice $disk $slice)
226 + [[ $num < 3 ]] && cyl=$(get_endslice $disk $slice)
227 done
228
229 if [[ -n $SINGLE_DISK && -n ${vdevs[i]} ]]; then
230 --
231 2.14.2
232