Re: [PATCH] btrfs/016: fix a false alert due to xattrs mismatch

[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]



On Mon, Feb 19, 2024 at 8:18 AM Qu Wenruo <wqu@xxxxxxxx> wrote:
>
> [BUG]
> When running btrfs/016 after any other test case, it would fail on a
> SELinux enabled environment:
>
>   btrfs/015 1s ...  0s
>   btrfs/016 1s ... [failed, exit status 1]- output mismatch (see ~/xfstests-dev/results//btrfs/016.out.bad)
>       --- tests/btrfs/016.out   2023-12-28 10:39:36.481027970 +1030
>       +++ ~/xfstests-dev/results//btrfs/016.out.bad     2023-12-28 15:53:10.745436664 +1030
>       @@ -1,2 +1,3 @@
>        QA output created by 016
>       -Silence is golden
>       +fssum failed
>       +(see ~/xfstests-dev/results//btrfs/016.full for details)
>       ...
>       (Run 'diff -u ~/xfstests-dev/tests/btrfs/016.out ~/xfstests-dev/results//btrfs/016.out.bad'  to see the entire diff)
>   Ran: btrfs/015 btrfs/016
>   Failures: btrfs/016
>   Failed 1 of 2 tests
>
> [CAUSE]
> The test case itself would try to use a blank SELinux context for the
> SCRATCH_MNT, to control the xattrs.
>
> But the initial send stream is generated from $TEST_DIR, which may still
> have the default SELinux mount context.
>
> And such mismatch in the SELinux xattr (source on $TEST_DIR still has
> the extra xattr, meanwhile the receve end on $SCRATCH_MNT doesn't) would
> lead to above mismatch.
>
> [FIX]
> Fix the false alerts by disable XATTR checks.
>
> Furthermore instead of doing all the edge juggling using $TEST_DIR, this
> time we do all the work on $SCRATCH_MNT.
>
> This means we would generate the initial send stream from $SCRATCH_MNT,
> then reformat the fs, mount scratch again, receive and verify.
>
> We no longer needs to cleanup the extra file for the initial send
> stream, as they are on the scratch device and would be formatted anyway.
>
> Signed-off-by: Qu Wenruo <wqu@xxxxxxxx>
> ---
> Changelog:
> v2:
> - Add -T option to avoid xattrs checks
>   Since this test case is only verify the hole punching behavior, XATTR
>   is not our interest.
> ---
>  tests/btrfs/016 | 53 ++++++++++++++++++++-----------------------------
>  1 file changed, 22 insertions(+), 31 deletions(-)
>
> diff --git a/tests/btrfs/016 b/tests/btrfs/016
> index 35609329..37119363 100755
> --- a/tests/btrfs/016
> +++ b/tests/btrfs/016
> @@ -12,58 +12,48 @@ _begin_fstest auto quick send prealloc
>  tmp=`mktemp -d`
>  tmp_dir=send_temp_$seq
>
> -# Override the default cleanup function.
> -_cleanup()
> -{
> -       $BTRFS_UTIL_PROG subvolume delete $TEST_DIR/$tmp_dir/snap > /dev/null 2>&1
> -       $BTRFS_UTIL_PROG subvolume delete $TEST_DIR/$tmp_dir/snap1 > /dev/null 2>&1
> -       $BTRFS_UTIL_PROG subvolume delete $TEST_DIR/$tmp_dir/send > /dev/null 2>&1
> -       rm -rf $TEST_DIR/$tmp_dir
> -       rm -f $tmp.*
> -}
> -
>  # Import common functions.
>  . ./common/filter
>
>  # real QA test starts here
>  _supported_fs btrfs
> -_require_test
>  _require_scratch
>  _require_fssum
>  _require_xfs_io_command "falloc"
>
>  _scratch_mkfs > /dev/null 2>&1
> -
> -#receive needs to be able to setxattrs, including the selinux context, if we use
> -#the normal nfs context thing it screws up our ability to set the
> -#security.selinux xattrs so we need to disable this for this test
> -export SELINUX_MOUNT_OPTIONS=""
> -
>  _scratch_mount
>
> -mkdir $TEST_DIR/$tmp_dir
> -$BTRFS_UTIL_PROG subvolume create $TEST_DIR/$tmp_dir/send \
> +mkdir $SCRATCH_MNT/$tmp_dir
> +$BTRFS_UTIL_PROG subvolume create $SCRATCH_MNT/$tmp_dir/send \
>         > $seqres.full 2>&1 || _fail "failed subvolume create"
>
> -_ddt of=$TEST_DIR/$tmp_dir/send/foo bs=1M count=10 >> $seqres.full \
> +_ddt of=$SCRATCH_MNT/$tmp_dir/send/foo bs=1M count=10 >> $seqres.full \
>         2>&1 || _fail "dd failed"
> -$BTRFS_UTIL_PROG subvolume snapshot -r $TEST_DIR/$tmp_dir/send \
> -       $TEST_DIR/$tmp_dir/snap >> $seqres.full 2>&1 || _fail "failed snap"
> -$XFS_IO_PROG -c "fpunch 1m 1m" $TEST_DIR/$tmp_dir/send/foo
> -$BTRFS_UTIL_PROG subvolume snapshot -r $TEST_DIR/$tmp_dir/send \
> -       $TEST_DIR/$tmp_dir/snap1 >> $seqres.full 2>&1 || _fail "failed snap"
> +$BTRFS_UTIL_PROG subvolume snapshot -r $SCRATCH_MNT/$tmp_dir/send \
> +       $SCRATCH_MNT/$tmp_dir/snap >> $seqres.full 2>&1 || _fail "failed snap"
> +$XFS_IO_PROG -c "fpunch 1m 1m" $SCRATCH_MNT/$tmp_dir/send/foo
> +$BTRFS_UTIL_PROG subvolume snapshot -r $SCRATCH_MNT/$tmp_dir/send \
> +       $SCRATCH_MNT/$tmp_dir/snap1 >> $seqres.full 2>&1 || _fail "failed snap"
>
> -$FSSUM_PROG -A -f -w $tmp/fssum.snap $TEST_DIR/$tmp_dir/snap >> $seqres.full \
> +# -A disable access time check.
> +# And -T disable xattrs to prevent SELinux changes causing false alerts, and the
> +# test case only cares about hole punching.
> +$FSSUM_PROG -AT -f -w $tmp/fssum.snap $SCRATCH_MNT/$tmp_dir/snap >> $seqres.full \
>         2>&1 || _fail "fssum gen failed"
> -$FSSUM_PROG -A -f -w $tmp/fssum.snap1 $TEST_DIR/$tmp_dir/snap1 >> $seqres.full \
> +$FSSUM_PROG -AT -f -w $tmp/fssum.snap1 $SCRATCH_MNT/$tmp_dir/snap1 >> $seqres.full \
>         2>&1 || _fail "fssum gen failed"
>
> -$BTRFS_UTIL_PROG send -f $tmp/send.snap $TEST_DIR/$tmp_dir/snap >> \
> +$BTRFS_UTIL_PROG send -f $tmp/send.snap $SCRATCH_MNT/$tmp_dir/snap >> \
>         $seqres.full 2>&1 || _fail "failed send"
> -$BTRFS_UTIL_PROG send -p $TEST_DIR/$tmp_dir/snap \
> -       -f $tmp/send.snap1 $TEST_DIR/$tmp_dir/snap1 \
> +$BTRFS_UTIL_PROG send -p $SCRATCH_MNT/$tmp_dir/snap \
> +       -f $tmp/send.snap1 $SCRATCH_MNT/$tmp_dir/snap1 \
>         >> $seqres.full 2>&1 || _fail "failed send"
>
> +_scratch_unmount
> +_scratch_mkfs > /dev/null 2>&1
> +_scratch_mount
> +
>  $BTRFS_UTIL_PROG receive -f $tmp/send.snap $SCRATCH_MNT >> $seqres.full 2>&1 \
>         || _fail "failed recv"
>  $BTRFS_UTIL_PROG receive -f $tmp/send.snap1 $SCRATCH_MNT >> $seqres.full 2>&1 \
> @@ -75,4 +65,5 @@ $FSSUM_PROG -r $tmp/fssum.snap1 $SCRATCH_MNT/snap1 >> $seqres.full 2>&1 \
>         || _fail "fssum failed"
>
>  echo "Silence is golden"
> -status=0 ; exit
> +status=0
> +exit

This hunk is unrelated and unnecessary.

But other than that, it looks good to me:

Reviewed-by: Filipe Manana <fdmanana@xxxxxxxx>

Thanks.

> --
> 2.43.1
>
>





[Index of Archives]     [Linux Filesystems Development]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux