From 88f4bcb35173d0dbdfaa493730eb37b9f99ff8fa Mon Sep 17 00:00:00 2001 From: David Sterba Date: Tue, 2 Jul 2019 15:17:47 +0200 Subject: [PATCH] btrfs-progs: test: add simple test for defrag recursion depth The documentation lacks clarity about depth to which recursive defragmentation go, and was pointed out by a user. The problem here is that the subvolume behaves the same as mount point regarding path traversal. The nftw stops on mount boundary (FTW_MOUNT). Add test that verifies this behaviour. Defrag has to be updated to allow descending to subvolumes (and not mountpoints). Issue: #185 Signed-off-by: David Sterba --- Documentation/btrfs-scrub.asciidoc | 2 +- tests/cli-tests/011-defrag-recursion/test.sh | 27 ++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) create mode 100755 tests/cli-tests/011-defrag-recursion/test.sh diff --git a/Documentation/btrfs-scrub.asciidoc b/Documentation/btrfs-scrub.asciidoc index 44022657..03f7f008 100644 --- a/Documentation/btrfs-scrub.asciidoc +++ b/Documentation/btrfs-scrub.asciidoc @@ -16,7 +16,7 @@ and metadata blocks from all devices and verify checksums. Automatically repair corrupted blocks if there's a correct copy available. NOTE: Scrub is not a filesystem checker (fsck) and does not verify nor repair -structural damage in the filesystem. It really only checks checksums of of data +structural damage in the filesystem. It really only checks checksums of data and tree blocks, it doesn't ensure the content of tree blocks is valid and consistent. There's some validation performed when metadata blocks are read from disk but it's not extensive and cannot substitute full 'btrfs check' run. diff --git a/tests/cli-tests/011-defrag-recursion/test.sh b/tests/cli-tests/011-defrag-recursion/test.sh new file mode 100755 index 00000000..6123632c --- /dev/null +++ b/tests/cli-tests/011-defrag-recursion/test.sh @@ -0,0 +1,27 @@ +#!/bin/bash +# check how deep does recursive defrag go, currently it has to stop at +# mountpoint and subvolume boundary, ie. only the first file should +# appear in the list of processed files + +source "$TEST_TOP/common" + +check_prereq mkfs.btrfs +check_prereq btrfs + +setup_root_helper +prepare_test_dev + +run_check_mkfs_test_dev +run_check_mount_test_dev + +run_check $SUDO_HELPER dd if=/dev/zero bs=1M count=10 of="$TEST_MNT"/file1 +run_check $SUDO_HELPER "$TOP/btrfs" subvolume create "$TEST_MNT"/subv1 +run_check $SUDO_HELPER dd if=/dev/zero bs=1M count=10 of="$TEST_MNT"/subv1/file2 +run_check $SUDO_HELPER "$TOP/btrfs" subvolume snapshot "$TEST_MNT"/subv1 "$TEST_MNT"/snap1 +run_check $SUDO_HELPER dd if=/dev/zero bs=1M count=10 of="$TEST_MNT"/snap1/file3 + +run_check $SUDO_HELPER find "$TEST_MNT" +run_check_stdout $SUDO_HELPER "$TOP/btrfs" filesystem defrag -v -r "$TEST_MNT" | + grep -q 'file[23]' && _fail "recursive defrag went to subvolumes" + +run_check_umount_test_dev