btrfs-progs/tests/fsck-tests/013-extent-tree-rebuild/test.sh
Gu Jinxiang cebf3b3722 btrfs-progs: introduce TEST_TOP and INTERNAL_BIN for tests
Use TEST_TOP as base for tests to reference any files, this will be used
for git and external testsuite.

INTERNAL_BIN is needed for referencing binaries that could reside in
different paths in git vs external testsuite.

Signed-off-by: Gu Jinxiang <gujx@cn.fujitsu.com>
[ add quotes around sourced files, update changelog ]
Signed-off-by: David Sterba <dsterba@suse.com>
2018-02-13 15:41:32 +01:00

44 lines
1.1 KiB
Bash
Executable File

#!/bin/bash
source "$TEST_TOP/common"
check_prereq btrfs-corrupt-block
check_prereq mkfs.btrfs
check_prereq btrfs
setup_root_helper
prepare_test_dev
# test whether fsck can rebuild a corrupted extent tree
test_extent_tree_rebuild()
{
run_check $SUDO_HELPER "$TOP/mkfs.btrfs" -f "$TEST_DEV"
run_check_mount_test_dev
generate_dataset small
for i in `seq 1 100`;do
run_check $SUDO_HELPER "$TOP/btrfs" sub snapshot "$TEST_MNT" \
"$TEST_MNT/snapaaaaaaa_$i"
done
run_check_umount_test_dev
# get extent root bytenr
extent_root_bytenr=`$SUDO_HELPER "$TOP/btrfs" inspect-internal dump-tree -r "$TEST_DEV" | \
grep extent | awk '{print $7}'`
if [ -z "$extent_root_bytenr" ];then
_fail "fail to get extent root bytenr"
fi
# corrupt extent root node block
run_check $SUDO_HELPER "$INTERNAL_BIN/btrfs-corrupt-block" -l "$extent_root_bytenr" \
-b 4096 "$TEST_DEV"
$SUDO_HELPER "$TOP/btrfs" check "$TEST_DEV" >& /dev/null && \
_fail "btrfs check should detect failure"
run_check $SUDO_HELPER "$TOP/btrfs" check --repair --init-extent-tree "$TEST_DEV"
run_check $SUDO_HELPER "$TOP/btrfs" check "$TEST_DEV"
}
test_extent_tree_rebuild