linux-btrfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Wang Shilong <wangsl.fnst@cn.fujitsu.com>
To: <linux-btrfs@vger.kernel.org>
Subject: [PATCH 3/3] Btrfs-progs: fsck: add tests for extent tree rebuilding
Date: Thu, 29 May 2014 18:01:44 +0800	[thread overview]
Message-ID: <1401357704-9752-3-git-send-email-wangsl.fnst@cn.fujitsu.com> (raw)
In-Reply-To: <1401357704-9752-1-git-send-email-wangsl.fnst@cn.fujitsu.com>

We need test to verify extent tree rebuilding work, this test
create a strange filesystem with some snapshots, destroy
extent root node, and run fsck with "--init-extent-tree".

Since this tests need btrfs internal tool(btrfs-corrupt-block),so
i add this test into btrfs-progs.

Signed-off-by: Wang Shilong <wangsl.fnst@cn.fujitsu.com>
---
 tests/fsck-tests.sh | 69 ++++++++++++++++++++++++++++++++++++++++++++---------
 1 file changed, 58 insertions(+), 11 deletions(-)

diff --git a/tests/fsck-tests.sh b/tests/fsck-tests.sh
index 25c390d..b783b78 100644
--- a/tests/fsck-tests.sh
+++ b/tests/fsck-tests.sh
@@ -6,27 +6,74 @@
 #
 
 here=`pwd`
+TEST_DEV=
+TEST_MNT=
+RESULT="fsck-tests-results.txt"
 
 _fail()
 {
-	echo "$*" | tee -a fsck-tests-results.txt
+	echo "$*" | tee -a $RESULT
 	exit 1
 }
 
-rm -f fsck-tests-results.txt
+run_check()
+{
+	echo "############### $@" >> $RESULT 2>&1
+	"$@" >> $RESULT 2>&1 || _fail "failed: $@"
+}
+
+rm -f $RESULT
+
+if [ -z $TEST_DEV ] || [ -z $TEST_MNT ];then
+	_fail "please set TEST_DEV and TEST_MNT"
+fi
+
+# test rely on corrupting blocks tool
+run_check make btrfs-corrupt-block
 
 for i in $(find $here/tests/fsck-tests -name '*.img')
 do
 	echo "     [TEST]    $(basename $i)"
-	echo "testing image $i" >> fsck-tests-results.txt
-	$here/btrfs-image -r $i test.img >> fsck-tests-results.txt 2>&1 \
-		|| _fail "restore failed"
-	$here/btrfsck test.img >> fsck-test-results.txt 2>&1
-	[ $? -eq 0 ] && _fail "btrfsck should have detected corruption"
+	echo "testing image $i" >> $RESULT
+
+	run_check $here/btrfs-image -r $i test.img
 
-	$here/btrfsck --repair test.img >> fsck-test-results.txt 2>&1 || \
-		_fail "btrfsck should have repaired the image"
+	$here/btrfsck test.img >> $RESULT 2>&1
+	[ $? -eq 0 ] && _fail "btrfsck should have detected corruption"
 
-	$here/btrfsck test.img >> fsck-test-results.txt 2>&1 || \
-		_fail "btrfsck did not correct corruption"
+	run_check $here/btrfsck --repair test.img
+	run_check $here/btrfsck test.img
 done
+
+# test whether fsck can rebuild a corrupted extent tree
+test_extent_tree_rebuild()
+{
+	echo "     [TEST]    extent tree rebuild"
+	$here/mkfs.btrfs -f $TEST_DEV >> /dev/null 2>&1 || _fail "fail to mkfs"
+
+	run_check mount $TEST_DEV $TEST_MNT
+	cp -aR /lib/modules/`uname -r`/ $TEST_MNT 2>&1
+
+	for i in `seq 1 100`;do
+		$here/btrfs sub snapshot $TEST_MNT \
+			$TEST_MNT/snapaaaaaaa_$i >& /dev/null
+	done
+	run_check umount $TEST_DEV
+
+	# get extent root bytenr
+	extent_root_bytenr=`$here/btrfs-debug-tree -r $TEST_DEV | grep extent | awk '{print $7}'`
+	if [ -z $extent_root_bytenr ];then
+		_fail "fail to get extent root bytenr"
+	fi
+
+	# corrupt extent root node block
+	run_check $here/btrfs-corrupt-block -l $extent_root_bytenr \
+		-b 4096 $TEST_DEV
+
+	$here/btrfs check $TEST_DEV >& /dev/null && \
+			_fail "fsck should detect failure"
+	run_check $here/btrfs check --init-extent-tree $TEST_DEV
+	run_check $here/btrfs check $TEST_DEV
+}
+
+test_extent_tree_rebuild
-- 
1.9.0


      parent reply	other threads:[~2014-05-29 10:05 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-05-29 10:01 [PATCH 1/3] Btrfs-progs: fsck: finish transaction commit if repair error out Wang Shilong
2014-05-29 10:01 ` [PATCH 2/3] Btrfs-progs: fsck: remove unfriendly BUG_ON() for searching tree failure Wang Shilong
2014-05-29 10:01 ` Wang Shilong [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1401357704-9752-3-git-send-email-wangsl.fnst@cn.fujitsu.com \
    --to=wangsl.fnst@cn.fujitsu.com \
    --cc=linux-btrfs@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).