btrfs-progs: tests: add test case for init-csum-tree
This new test script will create a fs with the following situations: - Preallocated extents (no data csum) - Nodatasum inodes (no data csum) - Partially written preallocated extents (no data csum for part of the extent) - Regular data extents (with data csum) - Regular data extents then hole punched (with data csum) - Preallocated data, then written, then hole punched (with data csum) - Compressed extents (with data csum) And make sure after --init-csum-tree (with or without --init-extent-tree) the result fs can still pass check. Signed-off-by: Qu Wenruo <wqu@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
ec36c043ba
commit
f2828ff819
|
@ -0,0 +1,65 @@
|
|||
#!/bin/bash
|
||||
#
|
||||
# Verify that `btrfs check --init-csum-tree` can handle various nodatasum
|
||||
# cases.
|
||||
|
||||
source "$TEST_TOP/common"
|
||||
|
||||
check_prereq btrfs
|
||||
check_global_prereq fallocate
|
||||
check_global_prereq dd
|
||||
|
||||
setup_root_helper
|
||||
prepare_test_dev
|
||||
|
||||
run_check_mkfs_test_dev
|
||||
|
||||
# Create an inode with nodatasum and some content
|
||||
run_check_mount_test_dev -o nodatasum
|
||||
|
||||
run_check $SUDO_HELPER dd if=/dev/urandom of="$TEST_MNT/nodatasum_file" \
|
||||
bs=16k count=1 status=noxfer > /dev/null 2>&1
|
||||
|
||||
# Revert to default datasum
|
||||
run_check $SUDO_HELPER mount -o remount,datasum "$TEST_MNT"
|
||||
|
||||
# Then create an inode with datasum, but all preallocated extents
|
||||
run_check $SUDO_HELPER fallocate -l 32k "$TEST_MNT/prealloc1"
|
||||
|
||||
# Create preallocated extent but partially written
|
||||
run_check $SUDO_HELPER fallocate -l 32k "$TEST_MNT/prealloc2"
|
||||
run_check $SUDO_HELPER dd if=/dev/urandom of="$TEST_MNT/prealloc2" \
|
||||
bs=16k count=1 conv=notrunc status=noxfer> /dev/null 2>&1
|
||||
|
||||
# Then some regular files
|
||||
run_check $SUDO_HELPER dd if=/dev/urandom of="$TEST_MNT/regular" \
|
||||
bs=16k count=1 status=noxfer > /dev/null 2>&1
|
||||
|
||||
# And some regular files with holes
|
||||
run_check $SUDO_HELPER dd if=/dev/urandom of="$TEST_MNT/regular_with_holes" \
|
||||
bs=16k count=1 status=noxfer > /dev/null 2>&1
|
||||
run_check $SUDO_HELPER fallocate -p -o 4096 -l 4096 "$TEST_MNT/regular_with_holes"
|
||||
|
||||
# And the most complex one, preallocated, written, then hole
|
||||
run_check $SUDO_HELPER fallocate -l 8192 "$TEST_MNT/complex"
|
||||
run_check $SUDO_HELPER dd if=/dev/urandom of="$TEST_MNT/compex" \
|
||||
bs=4k count=1 conv=notrunc status=noxfer > /dev/null 2>&1
|
||||
sync
|
||||
run_check $SUDO_HELPER fallocate -p -l 4096 "$TEST_MNT/regular_with_holes"
|
||||
|
||||
# Create some compressed file
|
||||
run_check $SUDO_HELPER mount -o remount,compress "$TEST_MNT"
|
||||
run_check $SUDO_HELPER dd if=/dev/zero of="$TEST_MNT/compressed" \
|
||||
bs=16k count=4 conv=notrunc status=noxfer> /dev/null 2>&1
|
||||
|
||||
# And create a snapshot, every data extent is at least shared twice
|
||||
run_check $SUDO_HELPER "$TOP/btrfs" subvolume snapshot "$TEST_MNT" \
|
||||
"$TEST_MNT/snapshot"
|
||||
run_check_umount_test_dev
|
||||
|
||||
# --init-csum-tree should not fail
|
||||
run_check $SUDO_HELPER "$TOP/btrfs" check --force \
|
||||
--init-csum-tree "$TEST_DEV"
|
||||
|
||||
# No error should be found
|
||||
run_check $SUDO_HELPER "$TOP/btrfs" check "$TEST_DEV"
|
Loading…
Reference in New Issue