mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/kdave/btrfs-progs.git
synced 2024-11-27 14:14:30 +08:00
btrfs-progs: tests: in misc/038 test cases
The test case always fails in my VM, with the following error: $ sudo TEST=038\* make test-misc [TEST] misc-tests.sh [TEST/misc] 038-backup-root-corruption Backup 2 not overwritten test failed for case 038-backup-root-corruption After more debugging, it turns out that there is nothing wrong except the final check: [ "$main_root_ptr" -ne "$backup_new_root_ptr" ] || _fail "Backup 2 not overwritten" The _fail() is only triggered if the previous check returns false, which is completely the opposite. Furthermore on the github CI, the kernel commits 2 instead of 1 transaction, resulting the next slot never to match the current generation/tree root. The two bugs combined, github CI always passses the test case, while for my VM which does the expected one transaction, it would always fail. Fix it by: - Use a proper "if [] then; fi" block to check the tree root bytenr - Use the generation diff to calculate the expected backup root slot - Log the full super block dump for debug usage Signed-off-by: Qu Wenruo <wqu@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
0eeb12aef5
commit
ff1ff014f0
@ -41,6 +41,9 @@ slot_num=$(echo $found | cut -f1 -d:)
|
||||
# To follow the dump-super output, where backup slot starts at 0.
|
||||
slot_num=$(($slot_num - 1))
|
||||
|
||||
_log "Original superblock:"
|
||||
_log "$(dump_super)"
|
||||
|
||||
# Save the backup slot info into the log
|
||||
_log "Backup slot $slot_num will be utilized"
|
||||
dump_super | run_check grep -A9 "backup $slot_num:"
|
||||
@ -56,9 +59,14 @@ run_check_mount_test_dev -o usebackuproot
|
||||
run_check_umount_test_dev
|
||||
|
||||
main_root_ptr=$(dump_super | awk '/^root\t/{print $2}')
|
||||
|
||||
# The next slot should be overwritten
|
||||
slot_num=$(( ($slot_num + 1) % 4 ))
|
||||
cur_gen=$(dump_super | grep ^generation | awk '{print $2}')
|
||||
# The slot to be used is based on how many transaction are committed.
|
||||
slot_num=$(( ($slot_num + $cur_gen - $backup_gen) % 4 ))
|
||||
backup_new_root_ptr=$(dump_super | grep -A1 "backup $slot_num" | grep backup_tree_root | awk '{print $2}')
|
||||
|
||||
[ "$main_root_ptr" -ne "$backup_new_root_ptr" ] || _fail "Backup 2 not overwritten"
|
||||
_log "After the backup usage:"
|
||||
_log "$(dump_super)"
|
||||
|
||||
if [ "$main_root_ptr" -ne "$backup_new_root_ptr" ]; then
|
||||
_fail "Backup ${slot_num} not overwritten"
|
||||
fi
|
||||
|
Loading…
Reference in New Issue
Block a user