@@ -97,20 +97,19 @@ function verify_pool_prop_eq
97
97
98
98
function verify_pool_props
99
99
{
100
- typeset -r dsize=$1
101
- typeset -r ratio=$2
100
+ typeset -r oused=$1
101
+ typeset -r osaved=$2
102
+ typeset dsize=$3
103
+ typeset ratio=$4
102
104
103
105
if [[ $dsize -eq 0 ]]; then
104
- verify_pool_prop_eq bcloneused 0
105
- verify_pool_prop_eq bclonesaved 0
106
- verify_pool_prop_eq bcloneratio 1.00
107
- else
108
- if [[ $ratio -eq 1 ]]; then
109
- verify_pool_prop_eq bcloneused 0
110
- else
111
- verify_pool_prop_eq bcloneused $dsize
112
- fi
113
- verify_pool_prop_eq bclonesaved $((dsize*(ratio-1)))
106
+ ratio=1
107
+ elif [[ $ratio -eq 1 ]]; then
108
+ dsize=0
109
+ fi
110
+ verify_pool_prop_eq bcloneused $(($oused+$dsize))
111
+ verify_pool_prop_eq bclonesaved $(($osaved+dsize*(ratio-1)))
112
+ if [[ $oused -eq 0 ]]; then
114
113
verify_pool_prop_eq bcloneratio "${ratio}.00"
115
114
fi
116
115
}
@@ -124,16 +123,22 @@ function bclone_test
124
123
typeset -r srcdir=$4
125
124
typeset -r dstdir=$5
126
125
typeset dsize
126
+ typeset oused
127
+ typeset osaved
127
128
128
129
typeset -r original="${srcdir}/original"
129
130
typeset -r clone="${dstdir}/clone"
130
131
131
132
log_note "Testing file copy with datatype $datatype, file size $filesize, embedded $embedded"
132
133
134
+ # Save current block cloning stats for later use.
135
+ sync_pool $TESTPOOL
136
+ oused=$(get_pool_prop bcloneused $TESTPOOL)
137
+ osaved=$(get_pool_prop bclonesaved $TESTPOOL)
138
+
133
139
# Create a test file with known content.
134
140
case $datatype in
135
141
random|text)
136
- sync_pool $TESTPOOL
137
142
if [[ $datatype = "random" ]]; then
138
143
dd if=/dev/urandom of=$original bs=$filesize count=1 2>/dev/null
139
144
else
@@ -146,13 +151,13 @@ function bclone_test
146
151
sync_pool $TESTPOOL
147
152
# It is hard to predict block sizes that will be used,
148
153
# so just do one clone and take it from bcloneused.
149
- filesize=$(zpool get -Hp -o value bcloneused $TESTPOOL)
154
+ dsize=$(get_pool_prop bcloneused $TESTPOOL)
155
+ dsize=$(($dsize-$oused))
150
156
if [[ $embedded = "false" ]]; then
151
- log_must test $filesize -gt 0
157
+ log_must test $dsize -gt 0
152
158
fi
153
159
rm -f "${clone}-tmp"
154
160
sync_pool $TESTPOOL
155
- dsize=$filesize
156
161
;;
157
162
hole)
158
163
log_must truncate_test -s $filesize -f $original
@@ -217,7 +222,7 @@ function bclone_test
217
222
test_file_integrity $original_checksum "${clone}4" $filesize
218
223
test_file_integrity $original_checksum "${clone}5" $filesize
219
224
220
- verify_pool_props $dsize 7
225
+ verify_pool_props $oused $osaved $ dsize 7
221
226
222
227
# Clear cache and test after fresh import.
223
228
log_must zpool export $TESTPOOL
@@ -240,7 +245,7 @@ function bclone_test
240
245
241
246
sync_pool $TESTPOOL
242
247
243
- verify_pool_props $dsize 11
248
+ verify_pool_props $oused $osaved $ dsize 11
244
249
245
250
log_must zpool export $TESTPOOL
246
251
log_must zpool import $TESTPOOL
@@ -268,19 +273,19 @@ function bclone_test
268
273
test_file_integrity $original_checksum "${clone}8" $filesize
269
274
test_file_integrity $original_checksum "${clone}9" $filesize
270
275
271
- verify_pool_props $dsize 6
276
+ verify_pool_props $oused $osaved $ dsize 6
272
277
273
278
rm -f "${clone}0" "${clone}2" "${clone}4" "${clone}8" "${clone}9"
274
279
275
280
sync_pool $TESTPOOL
276
281
277
282
test_file_integrity $original_checksum "${clone}6" $filesize
278
283
279
- verify_pool_props $dsize 1
284
+ verify_pool_props $oused $osaved $ dsize 1
280
285
281
286
rm -f "${clone}6"
282
287
283
288
sync_pool $TESTPOOL
284
289
285
- verify_pool_props $dsize 1
290
+ verify_pool_props $oused $osaved $ dsize 1
286
291
}
0 commit comments