From: Darrick J. Wong Date: Tue, 30 Oct 2018 18:03:41 +0000 (-0700) Subject: xfs: fuzz directories containing single leafn blocks X-Git-Tag: v2022.05.01~1361 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=a8d2e332b0af824fbce3999ca023f8d8791e700a;p=xfstests-dev.git xfs: fuzz directories containing single leafn blocks Test scrub, repair, and metadata verifiers on directories containing fuzzed single-leafn blocks. Signed-off-by: Darrick J. Wong --- diff --git a/tests/xfs/496 b/tests/xfs/496 new file mode 100755 index 00000000..461d94f2 --- /dev/null +++ b/tests/xfs/496 @@ -0,0 +1,52 @@ +#! /bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (c) 2018 Oracle, Inc. All Rights Reserved. +# +# FS QA Test No. 496 +# +# Populate a XFS filesystem and fuzz every single-leafn-format dir block field. +# Use xfs_repair to fix the corruption. +# +seq=`basename $0` +seqres=$RESULT_DIR/$seq +echo "QA output created by $seq" + +here=`pwd` +tmp=/tmp/$$ +status=1 # failure is the default! +trap "_cleanup; exit \$status" 0 1 2 3 7 15 + +_cleanup() +{ + cd / + rm -rf $tmp.* +} + +# get standard environment, filters and checks +. ./common/rc +. ./common/filter +. ./common/populate +. ./common/fuzzy + +# real QA test starts here +_supported_os Linux +_supported_fs xfs +_require_scratch_xfs_fuzz_fields + +echo "Format and populate" +_scratch_populate_cached nofill > $seqres.full 2>&1 + +echo "Find single-leafn-format dir block" +_scratch_mount +inum=$(stat -c '%i' $SCRATCH_MNT/S_IFDIR.FMT_LEAFN) +blk_sz=$(_get_block_size $SCRATCH_MNT) +_scratch_unmount + +leaf_offset=$(( (2 ** 35) / blk_sz )) +echo "Fuzz single-leafn-format dir block" +_scratch_xfs_fuzz_metadata '' 'offline' "inode ${inum}" "dblock ${leaf_offset}" >> $seqres.full +echo "Done fuzzing single-leafn-format dir block" + +# success, all done +status=0 +exit diff --git a/tests/xfs/496.out b/tests/xfs/496.out new file mode 100644 index 00000000..08597a2d --- /dev/null +++ b/tests/xfs/496.out @@ -0,0 +1,5 @@ +QA output created by 496 +Format and populate +Find single-leafn-format dir block +Fuzz single-leafn-format dir block +Done fuzzing single-leafn-format dir block diff --git a/tests/xfs/497 b/tests/xfs/497 new file mode 100755 index 00000000..3f44a304 --- /dev/null +++ b/tests/xfs/497 @@ -0,0 +1,52 @@ +#! /bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (c) 2018 Oracle, Inc. All Rights Reserved. +# +# FS QA Test No. 497 +# +# Populate a XFS filesystem and fuzz every single-leafn-format dir block field. +# Use xfs_scrub to fix the corruption. +# +seq=`basename $0` +seqres=$RESULT_DIR/$seq +echo "QA output created by $seq" + +here=`pwd` +tmp=/tmp/$$ +status=1 # failure is the default! +trap "_cleanup; exit \$status" 0 1 2 3 7 15 + +_cleanup() +{ + cd / + rm -rf $tmp.* +} + +# get standard environment, filters and checks +. ./common/rc +. ./common/filter +. ./common/populate +. ./common/fuzzy + +# real QA test starts here +_supported_os Linux +_supported_fs xfs +_require_scratch_xfs_fuzz_fields + +echo "Format and populate" +_scratch_populate_cached nofill > $seqres.full 2>&1 + +echo "Find single-leafn-format dir block" +_scratch_mount +inum=$(stat -c '%i' $SCRATCH_MNT/S_IFDIR.FMT_LEAFN) +blk_sz=$(_get_block_size $SCRATCH_MNT) +_scratch_unmount + +leaf_offset=$(( (2 ** 35) / blk_sz )) +echo "Fuzz single-leafn-format dir block" +_scratch_xfs_fuzz_metadata '' 'online' "inode ${inum}" "dblock ${leaf_offset}" >> $seqres.full +echo "Done fuzzing single-leafn-format dir block" + +# success, all done +status=0 +exit diff --git a/tests/xfs/497.out b/tests/xfs/497.out new file mode 100644 index 00000000..8e5ae8b6 --- /dev/null +++ b/tests/xfs/497.out @@ -0,0 +1,5 @@ +QA output created by 497 +Format and populate +Find single-leafn-format dir block +Fuzz single-leafn-format dir block +Done fuzzing single-leafn-format dir block diff --git a/tests/xfs/498 b/tests/xfs/498 new file mode 100755 index 00000000..6347b144 --- /dev/null +++ b/tests/xfs/498 @@ -0,0 +1,52 @@ +#! /bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (c) 2018 Oracle, Inc. All Rights Reserved. +# +# FS QA Test No. 498 +# +# Populate a XFS filesystem and fuzz every single-leafn-format dir block field. +# Do not fix the filesystem, to test metadata verifiers. +# +seq=`basename $0` +seqres=$RESULT_DIR/$seq +echo "QA output created by $seq" + +here=`pwd` +tmp=/tmp/$$ +status=1 # failure is the default! +trap "_cleanup; exit \$status" 0 1 2 3 7 15 + +_cleanup() +{ + cd / + rm -rf $tmp.* +} + +# get standard environment, filters and checks +. ./common/rc +. ./common/filter +. ./common/populate +. ./common/fuzzy + +# real QA test starts here +_supported_os Linux +_supported_fs xfs +_require_scratch_xfs_fuzz_fields + +echo "Format and populate" +_scratch_populate_cached nofill > $seqres.full 2>&1 + +echo "Find single-leafn-format dir block" +_scratch_mount +inum=$(stat -c '%i' $SCRATCH_MNT/S_IFDIR.FMT_LEAFN) +blk_sz=$(_get_block_size $SCRATCH_MNT) +_scratch_unmount + +leaf_offset=$(( (2 ** 35) / blk_sz )) +echo "Fuzz single-leafn-format dir block" +_scratch_xfs_fuzz_metadata '' 'none' "inode ${inum}" "dblock ${leaf_offset}" >> $seqres.full +echo "Done fuzzing single-leafn-format dir block" + +# success, all done +status=0 +exit diff --git a/tests/xfs/498.out b/tests/xfs/498.out new file mode 100644 index 00000000..5c5ef591 --- /dev/null +++ b/tests/xfs/498.out @@ -0,0 +1,5 @@ +QA output created by 498 +Format and populate +Find single-leafn-format dir block +Fuzz single-leafn-format dir block +Done fuzzing single-leafn-format dir block diff --git a/tests/xfs/group b/tests/xfs/group index cd8e5141..dfaae2bc 100644 --- a/tests/xfs/group +++ b/tests/xfs/group @@ -493,3 +493,6 @@ 493 auto quick fuzz 494 auto quick 495 auto quick repair +496 dangerous_fuzzers dangerous_scrub dangerous_repair +497 dangerous_fuzzers dangerous_scrub dangerous_online_repair +498 dangerous_fuzzers dangerous_norepair