3 source "$TEST_TOP/common"
5 check_prereq btrfs-corrupt-block
6 check_prereq mkfs.btrfs
12 # test whether fsck can rebuild a corrupted extent tree
13 test_extent_tree_rebuild()
15 run_check $SUDO_HELPER "$TOP/mkfs.btrfs" -f "$TEST_DEV"
17 run_check_mount_test_dev
18 generate_dataset small
20 for i in `seq 1 100`;do
21 run_check $SUDO_HELPER "$TOP/btrfs" sub snapshot "$TEST_MNT" \
22 "$TEST_MNT/snapaaaaaaa_$i"
24 run_check_umount_test_dev
26 # get extent root bytenr
27 extent_root_bytenr=`$SUDO_HELPER "$TOP/btrfs" inspect-internal dump-tree -r "$TEST_DEV" | \
28 grep extent | awk '{print $7}'`
29 if [ -z "$extent_root_bytenr" ];then
30 _fail "fail to get extent root bytenr"
33 # corrupt extent root node block
34 run_check $SUDO_HELPER "$INTERNAL_BIN/btrfs-corrupt-block" -l "$extent_root_bytenr" \
37 $SUDO_HELPER "$TOP/btrfs" check "$TEST_DEV" >& /dev/null && \
38 _fail "btrfs check should detect failure"
39 run_check $SUDO_HELPER "$TOP/btrfs" check --repair --init-extent-tree "$TEST_DEV"
40 run_check $SUDO_HELPER "$TOP/btrfs" check "$TEST_DEV"
43 test_extent_tree_rebuild