summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@linux.dev>2025-06-25 13:40:07 -0400
committerKent Overstreet <kent.overstreet@linux.dev>2025-06-25 13:40:09 -0400
commit7e905482ccc906c4ceb4b00604fceeae74b374ce (patch)
tree939b0bca86cff6411e61db5d3cb1da8409490641
parenta632994d58b0745bc2b3e9c4f7aff4b86f7f98d3 (diff)
tests/fs/bcachefs: kill_btree_root_autofix
Test killing a btree root that we should be able to automatically repair node (extents, when tree depth > 0). Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
-rwxr-xr-xtests/fs/bcachefs/single_device.ktest41
1 files changed, 39 insertions, 2 deletions
diff --git a/tests/fs/bcachefs/single_device.ktest b/tests/fs/bcachefs/single_device.ktest
index 772f3b1..5d17942 100755
--- a/tests/fs/bcachefs/single_device.ktest
+++ b/tests/fs/bcachefs/single_device.ktest
@@ -1777,7 +1777,7 @@ test_kill_btree_node()
bcachefs_test_end_checks ${ktest_scratch_dev[0]}
}
-test_kill_btree_root()
+test_kill_btree_root_autofix()
{
set_watchdog 240
run_quiet "" bcachefs format -f --btree_node_size=64k ${ktest_scratch_dev[0]}
@@ -1791,11 +1791,48 @@ test_kill_btree_root()
umount /mnt
bcachefs list -m nodes ${ktest_scratch_dev[0]} > /root/nodes_before
- bcachefs kill_btree_node -nsnapshots -nsnapshot_trees -nsubvolumes ${ktest_scratch_dev[0]}
+ bcachefs kill_btree_node -nextents:1 ${ktest_scratch_dev[0]}
echo "Running fsck"
# How to assert exit status equals something specific with -o errexit?
+ mount -t bcachefs ${ktest_scratch_dev[0]} /mnt
+
+ cat /sys/kernel/debug/bcachefs/*/btrees/extents/keys > /root/extents_after
+
+ umount /mnt
+ bcachefs list -m nodes ${ktest_scratch_dev[0]} > /root/nodes_after
+ #bcachefs fsck -y ${ktest_scratch_dev[0]} || true
+
+ echo
+ echo "Running fsck again; should be clean"
+
+ bcachefs fsck -yk ${ktest_scratch_dev[0]} || true
mount -t bcachefs -o fsck,fix_errors,verbose ${ktest_scratch_dev[0]} /mnt
+ diff -rq /usr/bin /mnt/bin
+ umount /mnt
+
+ bcachefs_test_end_checks ${ktest_scratch_dev[0]}
+}
+
+test_kill_btree_root()
+{
+ set_watchdog 240
+ run_quiet "" bcachefs format -f --btree_node_size=64k ${ktest_scratch_dev[0]}
+
+ mount -t bcachefs ${ktest_scratch_dev[0]} /mnt
+ cp -rL /usr/bin /mnt
+ sync
+
+ cat /sys/kernel/debug/bcachefs/*/btrees/extents/keys > /root/extents_before
+
+ umount /mnt
+ bcachefs list -m nodes ${ktest_scratch_dev[0]} > /root/nodes_before
+
+ bcachefs kill_btree_node -nextents:1 -nsnapshots -nsnapshot_trees -nsubvolumes ${ktest_scratch_dev[0]}
+
+ echo "Running fsck"
+ # How to assert exit status equals something specific with -o errexit?
+ mount -t bcachefs -o fsck,fix_errors ${ktest_scratch_dev[0]} /mnt
cat /sys/kernel/debug/bcachefs/*/btrees/extents/keys > /root/extents_after