@@ -29,6 +29,9 @@ corrupt_fst_item()
objectid=$("$TOP/btrfs" inspect-internal dump-tree -t 10 "$TEST_DEV" | \
grep -o "[[:digit:]]* FREE_SPACE_BITMAP [[:digit:]]*" | \
cut -d' ' -f1 | tail -2 | head -1)
+ if [[ $objectid == "" ]]; then
+ return 1
+ fi
offset=$("$TOP/btrfs" inspect-internal dump-tree -t 10 "$TEST_DEV" | \
grep -o "[[:digit:]]* FREE_SPACE_BITMAP [[:digit:]]*" | \
cut -d' ' -f3 | tail -2 | head -1)
@@ -38,6 +41,9 @@ corrupt_fst_item()
objectid=$("$TOP/btrfs" inspect-internal dump-tree -t 10 "$TEST_DEV" | \
grep -o "[[:digit:]]* FREE_SPACE_EXTENT [[:digit:]]*" | \
cut -d' ' -f1 | tail -2 | head -1)
+ if [[ $objectid == "" ]]; then
+ return 1
+ fi
offset=$("$TOP/btrfs" inspect-internal dump-tree -t 10 "$TEST_DEV" | \
grep -o "[[:digit:]]* FREE_SPACE_EXTENT [[:digit:]]*" | \
cut -d' ' -f3 | tail -2 | head -1)
@@ -48,6 +54,8 @@ corrupt_fst_item()
run_check "$TOP/btrfs-corrupt-block" -r 10 -K "$objectid,$type,$offset" \
-f offset "$TEST_DEV"
+
+ return 0
}
if ! [ -f "/sys/fs/btrfs/features/free_space_tree" ]; then
@@ -69,8 +77,7 @@ done
run_check_umount_test_dev
# now corrupt one of the bitmap items
-corrupt_fst_item "bitmap"
-check_image "$TEST_DEV"
+corrupt_fst_item "bitmap" && check_image "$TEST_DEV"
# change the freespace such that we now have at least one free_space_extent
# object
@@ -80,5 +87,4 @@ run_check $SUDO_HELPER fallocate -l 50m "$TEST_MNT/file"
run_check_umount_test_dev
# now corrupt an extent
-corrupt_fst_item "extent"
-check_image "$TEST_DEV"
+corrupt_fst_item "extent" && check_image "$TEST_DEV"
We don't have the FREE_SPACE_BITMAP in the default filesystem, skip the sub test by checking if the objectid is null for the FREE_SPACE_BITMAP. The null objectid check for the FREE_SPACE_EXTENT is not actually required, it is added to maintain similar flow in the code above it. Signed-off-by: Anand Jain <anand.jain@oracle.com> --- tests/fsck-tests/037-freespacetree-repair/test.sh | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-)