btrfs-progs: tests: Allow check test to repair in lowmem mode for certain errors
authorQu Wenruo <quwenruo@cn.fujitsu.com>
Wed, 1 Mar 2017 01:21:51 +0000 (09:21 +0800)
committerDavid Sterba <dsterba@suse.com>
Mon, 16 Oct 2017 18:33:00 +0000 (20:33 +0200)
Since lowmem mode can repair certain corruptions (mostly in fs tree),
insert a beacon into each fsck test cases to allow some of them be
tested in lowmem mode.

With this patch, fsck option override will check the beacon file
".lowmem_repairable" in the same directory of the test image, and if the
beacon exists, then it will also run lowmem mode repair to repair the
image.

Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.com>
tests/common.local
tests/fsck-tests/004-no-dir-index/.lowmem_repairable [new file with mode: 0644]
tests/fsck-tests/009-no-dir-item-or-index/.lowmem_repairable [new file with mode: 0644]
tests/fsck-tests/010-no-rootdir-inode-item/.lowmem_repairable [new file with mode: 0644]
tests/fsck-tests/011-no-inode-item/.lowmem_repairable [new file with mode: 0644]
tests/fsck-tests/016-wrong-inode-nbytes/.lowmem_repairable [new file with mode: 0644]
tests/fsck-tests/017-missing-all-file-extent/.lowmem_repairable [new file with mode: 0644]

index d2b8d07..f5e96f5 100644 (file)
@@ -14,11 +14,24 @@ fi
 # gets arguments of a current command and can decide if the argument insertion
 # should happen, eg. if some option combination does not make sense or would
 # break tests
+#
+# Return 0 if we need to skip option override
+# Return 1 if we don't need to skip option override
 _skip_spec()
 {
+       local beacon
+
+       beacon=.lowmem_repairable
+
+       # For lowmem repair, only support fs tree repair for now
+       # So we place lowmem repair beacon in the same dir of the test case
        if echo "$TEST_ARGS_CHECK" | grep -q 'mode=lowmem' &&
           echo "$@" | grep -q -- '--repair'; then
-               return 0
+               dir="$(dirname ${@: -1})"
+               if [ -f ${dir}/${beacon} ]; then
+                       return 1;
+               fi
+               return 0;
        fi
        return 1
 }
diff --git a/tests/fsck-tests/004-no-dir-index/.lowmem_repairable b/tests/fsck-tests/004-no-dir-index/.lowmem_repairable
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/tests/fsck-tests/009-no-dir-item-or-index/.lowmem_repairable b/tests/fsck-tests/009-no-dir-item-or-index/.lowmem_repairable
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/tests/fsck-tests/010-no-rootdir-inode-item/.lowmem_repairable b/tests/fsck-tests/010-no-rootdir-inode-item/.lowmem_repairable
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/tests/fsck-tests/011-no-inode-item/.lowmem_repairable b/tests/fsck-tests/011-no-inode-item/.lowmem_repairable
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/tests/fsck-tests/016-wrong-inode-nbytes/.lowmem_repairable b/tests/fsck-tests/016-wrong-inode-nbytes/.lowmem_repairable
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/tests/fsck-tests/017-missing-all-file-extent/.lowmem_repairable b/tests/fsck-tests/017-missing-all-file-extent/.lowmem_repairable
new file mode 100644 (file)
index 0000000..e69de29