From 0ff18d3679f7a5c9c9d480018f6c26c08979fdcd Mon Sep 17 00:00:00 2001 From: "Darrick J. Wong" Date: Mon, 4 Mar 2019 13:19:35 -0800 Subject: [PATCH] generic: test statx attribute_mask setting Make sure the filesystem reports attribute_mask for the attributes it supports. Signed-off-by: Darrick J. Wong Reviewed-by: Eryu Guan Signed-off-by: Eryu Guan --- tests/generic/532 | 70 +++++++++++++++++++++++++++++++++++++++++++ tests/generic/532.out | 2 ++ tests/generic/group | 1 + 3 files changed, 73 insertions(+) create mode 100755 tests/generic/532 create mode 100644 tests/generic/532.out diff --git a/tests/generic/532 b/tests/generic/532 new file mode 100755 index 00000000..ac8b7a89 --- /dev/null +++ b/tests/generic/532 @@ -0,0 +1,70 @@ +#! /bin/bash +# SPDX-License-Identifier: GPL-2.0+ +# Copyright (c) 2019 Oracle, Inc. All Rights Reserved. +# +# FS QA Test No. 532 +# +# Regression test for a bug where XFS fails to set statx attributes_mask but +# sets attribute flags anyway. +# +seq=`basename $0` +seqres=$RESULT_DIR/$seq +echo "QA output created by $seq" +tmp=/tmp/$$ +status=1 # failure is the default! +trap "_cleanup; exit \$status" 0 1 2 3 15 + +_cleanup() +{ + cd / + rm -f $tmp.* $testfile +} + +# get standard environment, filters and checks +. ./common/rc + +# real QA test starts here +_supported_fs generic +_supported_os Linux +_require_test + +get_attributes() { + $XFS_IO_PROG -r -c "statx -r" $1 | grep 'stat.attributes =' | cut -d ' ' -f 3 +} + +get_attributes_mask() { + $XFS_IO_PROG -r -c "statx -r" $1 | grep 'stat.attributes_mask =' | cut -d ' ' -f 3 +} + +check_statx_attributes() +{ + local attrs=$(get_attributes $testfile) + local mask=$(get_attributes_mask $testfile) + + echo "MASK:$mask:ATTRS:$attrs:" >> $seqres.full + + test -z "$mask" && _notrun "xfs_io statx command does not support attributes_mask" + test $(( mask )) -eq 0 && echo "attributes mask is zero" + test $(( attrs & ~(mask) )) -ne 0 && echo "attributes $attrs do not appear in mask $mask" +} + +rm -f $seqres.full +echo "Silence is golden" + +# Create file, check for incorrect mask +testfile=$TEST_DIR/$seq.$$.test +touch $testfile +check_statx_attributes + +# Do it again, but this time try to turn on one of the attributes. +if $CHATTR_PROG +i $testfile > /dev/null 2>&1; then + check_statx_attributes + $CHATTR_PROG -i $testfile +fi +if $CHATTR_PROG +a $testfile > /dev/null 2>&1; then + check_statx_attributes + $CHATTR_PROG -a $testfile +fi + +status=0 +exit diff --git a/tests/generic/532.out b/tests/generic/532.out new file mode 100644 index 00000000..1f7d4677 --- /dev/null +++ b/tests/generic/532.out @@ -0,0 +1,2 @@ +QA output created by 532 +Silence is golden diff --git a/tests/generic/group b/tests/generic/group index 15227b67..f10db942 100644 --- a/tests/generic/group +++ b/tests/generic/group @@ -534,3 +534,4 @@ 529 auto quick attr 530 auto quick unlink 531 auto quick unlink +532 auto quick -- 2.39.5