diff --git a/tests/zfs-tests/tests/functional/cli_root/zhack/zhack_metaslab_leak.ksh b/tests/zfs-tests/tests/functional/cli_root/zhack/zhack_metaslab_leak.ksh index cc72d6313d4c..0d2a39be6b5a 100755 --- a/tests/zfs-tests/tests/functional/cli_root/zhack/zhack_metaslab_leak.ksh +++ b/tests/zfs-tests/tests/functional/cli_root/zhack/zhack_metaslab_leak.ksh @@ -1,70 +1,70 @@ #!/bin/ksh # SPDX-License-Identifier: CDDL-1.0 # # This file and its contents are supplied under the terms of the # Common Development and Distribution License ("CDDL"), version 1.0. # You may only use this file in accordance with the terms of version # 1.0 of the CDDL. # # # Description: # # Test whether zhack metaslab leak functions correctly # # Strategy: # # 1. Create pool on a loopback device with some test data # 2. Gather pool capacity stats # 3. Generate fragmentation data with zdb # 4. Destroy the pool # 5. Create a new pool with the same configuration # 6. Export the pool # 7. Apply the fragmentation information with zhack metaslab leak # 8. Import the pool # 9. Verify that pool capacity stats match . "$STF_SUITE"/include/libtest.shlib verify_runnable "global" function cleanup { zpool destroy $TESTPOOL rm $tmp } log_onexit cleanup log_assert "zhack metaslab leak leaks the right amount of space" typeset tmp=$(mktemp) log_must zpool create $TESTPOOL $DISKS for i in `seq 1 16`; do log_must dd if=/dev/urandom of=/$TESTPOOL/f$i bs=1M count=16 log_must zpool sync $TESTPOOL done for i in `seq 2 2 16`; do log_must rm /$TESTPOOL/f$i done for i in `seq 1 16`; do log_must touch /$TESTPOOL/g$i log_must zpool sync $TESTPOOL done alloc=$(zpool get -Hpo value alloc $TESTPOOL) log_must eval "zdb -m --allocated-map $TESTPOOL > $tmp" log_must zpool destroy $TESTPOOL log_must zpool create $TESTPOOL $DISKS log_must zpool export $TESTPOOL log_must eval "zhack metaslab leak $TESTPOOL < $tmp" log_must zpool import $TESTPOOL alloc2=$(zpool get -Hpo value alloc $TESTPOOL) -[[ $((alloc * 1.05)) -gt $alloc2 ]] && [[ $alloc -lt $alloc2 ]] || \ +within_percent $alloc $alloc2 98 || log_fail "space usage changed too much: $alloc to $alloc2" log_pass "zhack metaslab leak behaved correctly"