diff mbox series

[1/1] fstests: test mkfs.xfs protofiles with xattr support

Message ID 173706975673.1928701.14882814105946770615.stgit@frogsfrogsfrogs (mailing list archive)
State New, archived
Headers show
Series [1/1] fstests: test mkfs.xfs protofiles with xattr support | expand

Commit Message

Darrick J. Wong Jan. 16, 2025, 11:35 p.m. UTC
From: Darrick J. Wong <djwong@kernel.org>

Make sure we can do protofiles with xattr support.

Signed-off-by: "Darrick J. Wong" <djwong@kernel.org>
---
 tests/xfs/1937     |  144 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 tests/xfs/1937.out |  102 +++++++++++++++++++++++++++++++++++++
 2 files changed, 246 insertions(+)
 create mode 100755 tests/xfs/1937
 create mode 100644 tests/xfs/1937.out

Comments

Zorro Lang March 2, 2025, 1:15 p.m. UTC | #1
On Thu, Jan 16, 2025 at 03:35:04PM -0800, Darrick J. Wong wrote:
> From: Darrick J. Wong <djwong@kernel.org>
> 
> Make sure we can do protofiles with xattr support.
> 
> Signed-off-by: "Darrick J. Wong" <djwong@kernel.org>
> ---

This test always fails on my side, as below (diff output):

   ...
   Attribute "rootdata" has a 5 byte value for SCRATCH_MNT/directory/test
   Attribute "bigdata" has a 37960 byte value for SCRATCH_MNT/directory/test
   Attribute "acldata" has a 5 byte value for SCRATCH_MNT/directory/test
  +Attribute "selinux" has a 28 byte value for SCRATCH_MNT/directory/test
   *** unmount FS
   *** done
   *** unmount

Looks like the $SELINUX_MOUNT_OPTIONS doesn't help the mkfs protofile
with xattrs.

Thanks,
Zorro


>  tests/xfs/1937     |  144 ++++++++++++++++++++++++++++++++++++++++++++++++++++
>  tests/xfs/1937.out |  102 +++++++++++++++++++++++++++++++++++++
>  2 files changed, 246 insertions(+)
>  create mode 100755 tests/xfs/1937
>  create mode 100644 tests/xfs/1937.out
> 
> 
> diff --git a/tests/xfs/1937 b/tests/xfs/1937
> new file mode 100755
> index 00000000000000..aa4143a75ef643
> --- /dev/null
> +++ b/tests/xfs/1937
> @@ -0,0 +1,144 @@
> +#! /bin/bash
> +# SPDX-License-Identifier: GPL-2.0
> +# Copyright (c) 2024-2025 Oracle.  All Rights Reserved.
> +# Copyright (c) 2000-2004 Silicon Graphics, Inc.  All Rights Reserved.
> +#
> +# FS QA Test No. 1937
> +#
> +# mkfs protofile with xattrs test
> +#
> +. ./common/preamble
> +_begin_fstest mkfs auto quick
> +
> +seqfull="$seqres.full"
> +rm -f $seqfull
> +
> +. ./common/filter
> +
> +_cleanup()
> +{
> +	echo "*** unmount"
> +	_scratch_unmount 2>/dev/null
> +	rm -f $tmp.*
> +	rm -f $TEST_DIR/$seq.file
> +}
> +
> +_full()
> +{
> +	echo ""            >>$seqfull
> +	echo "*** $* ***"  >>$seqfull
> +	echo ""            >>$seqfull
> +}
> +
> +_filter_stat()
> +{
> +	sed '
> +		/^Access:/d;
> +		/^Modify:/d;
> +		/^Change:/d;
> +		s/Device: *[0-9][0-9]*,[0-9][0-9]*/Device: <DEVICE>/;
> +		s/Inode: *[0-9][0-9]*/Inode: <INODE>/;
> +		s/Size: *[0-9][0-9]* *Filetype: Dir/Size: <DSIZE> Filetype: Dir/;
> +	' | tr -s ' '
> +}
> +
> +_require_command $ATTR_PROG "attr"
> +_require_scratch
> +
> +# mkfs cannot create a filesystem with protofiles if realtime is enabled, so
> +# don't run this test if the rtinherit is anywhere in the mkfs options.
> +echo "$MKFS_OPTIONS" | grep -q "rtinherit" && \
> +	_notrun "Cannot mkfs with a protofile and -d rtinherit."
> +
> +protofile=$tmp.proto
> +tempfile=$TEST_DIR/$seq.file
> +
> +$XFS_IO_PROG -f -c 'pwrite 64k 28k' -c 'pwrite 1280k 37960' $tempfile >> $seqres.full
> +$here/src/devzero -b 2048 -n 2 -c -v 44 $tempfile.2 
> +
> +$ATTR_PROG -R -s rootdata -V 0test $tempfile &>> $seqres.full
> +$ATTR_PROG -S -s acldata -V 1test $tempfile &>> $seqres.full
> +$ATTR_PROG -s userdata -V 2test $tempfile &>> $seqres.full
> +perl -e 'print "x" x 37960;' | $ATTR_PROG -s bigdata $tempfile &>> $seqres.full
> +
> +cat >$protofile <<EOF
> +DUMMY1
> +0 0
> +: root directory
> +d--777 3 1
> +: a directory
> +directory d--755 3 1 
> +test ---755 3 1 $tempfile
> +file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_0 ---755 3 1 $tempfile
> +file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_1 ---755 3 1 $tempfile
> +file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_2 ---755 3 1 $tempfile
> +file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_3 ---755 3 1 $tempfile
> +file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_4 ---755 3 1 $tempfile
> +$
> +: back in the root
> +setuid -u-666 0 0 $tempfile
> +setgid --g666 0 0 $tempfile
> +setugid -ug666 0 0 $tempfile
> +directory_setgid d-g755 3 2
> +file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_5 ---755 3 1 $tempfile
> +$
> +: back in the root
> +block_device b--012 3 1 161 162 
> +char_device c--345 3 1 177 178
> +pipe p--670 0 0
> +symlink l--123 0 0 bigfile
> +: a file we actually read
> +bigfile ---666 3 0 $tempfile.2
> +: done
> +$
> +EOF
> +
> +if [ $? -ne 0 ]
> +then
> +	_fail "failed to create test protofile"
> +fi
> +
> +_verify_fs()
> +{
> +	echo "*** create FS version $1"
> +	VERSION="-n version=$1"
> +
> +	_scratch_unmount >/dev/null 2>&1
> +
> +	_full "mkfs"
> +	_scratch_mkfs_xfs $VERSION -p $protofile >>$seqfull 2>&1
> +
> +	echo "*** check FS"
> +	_check_scratch_fs
> +
> +	echo "*** mount FS"
> +	_full " mount"
> +	_try_scratch_mount >>$seqfull 2>&1 \
> +		|| _fail "mount failed"
> +
> +	$ATTR_PROG -l $SCRATCH_MNT/directory/test | \
> +		grep -q 'Attribute.*has a ' || \
> +		_notrun "mkfs.xfs protofile does not support xattrs"
> +
> +	echo "*** verify FS"
> +	(cd $SCRATCH_MNT ; find . | LC_COLLATE=POSIX sort \
> +		| grep -v ".use_space" \
> +		| xargs $here/src/lstat64 | _filter_stat)
> +	diff -q $SCRATCH_MNT/bigfile $tempfile.2 \
> +		|| _fail "bigfile corrupted"
> +	diff -q $SCRATCH_MNT/symlink $tempfile.2 \
> +		|| _fail "symlink broken"
> +
> +	$ATTR_PROG -l $SCRATCH_MNT/directory/test | _filter_scratch
> +
> +	echo "*** unmount FS"
> +	_full "umount"
> +	_scratch_unmount >>$seqfull 2>&1 \
> +		|| _fail "umount failed"
> +}
> +
> +_verify_fs 2
> +
> +echo "*** done"
> +status=0
> +exit
> diff --git a/tests/xfs/1937.out b/tests/xfs/1937.out
> new file mode 100644
> index 00000000000000..050c8318b1abca
> --- /dev/null
> +++ b/tests/xfs/1937.out
> @@ -0,0 +1,102 @@
> +QA output created by 1937
> +Wrote 2048.00Kb (value 0x2c)
> +*** create FS version 2
> +*** check FS
> +*** mount FS
> +*** verify FS
> + File: "."
> + Size: <DSIZE> Filetype: Directory
> + Mode: (0777/drwxrwxrwx) Uid: (3) Gid: (1)
> +Device: <DEVICE> Inode: <INODE> Links: 4 
> +
> + File: "./bigfile"
> + Size: 2097152 Filetype: Regular File
> + Mode: (0666/-rw-rw-rw-) Uid: (3) Gid: (0)
> +Device: <DEVICE> Inode: <INODE> Links: 1 
> +
> + File: "./block_device"
> + Size: 0 Filetype: Block Device
> + Mode: (0012/b-----x-w-) Uid: (3) Gid: (1)
> +Device: <DEVICE> Inode: <INODE> Links: 1 Device type: 161,162
> +
> + File: "./char_device"
> + Size: 0 Filetype: Character Device
> + Mode: (0345/c-wxr--r-x) Uid: (3) Gid: (1)
> +Device: <DEVICE> Inode: <INODE> Links: 1 Device type: 177,178
> +
> + File: "./directory"
> + Size: <DSIZE> Filetype: Directory
> + Mode: (0755/drwxr-xr-x) Uid: (3) Gid: (1)
> +Device: <DEVICE> Inode: <INODE> Links: 2 
> +
> + File: "./directory/file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_0"
> + Size: 1348680 Filetype: Regular File
> + Mode: (0755/-rwxr-xr-x) Uid: (3) Gid: (1)
> +Device: <DEVICE> Inode: <INODE> Links: 1 
> +
> + File: "./directory/file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_1"
> + Size: 1348680 Filetype: Regular File
> + Mode: (0755/-rwxr-xr-x) Uid: (3) Gid: (1)
> +Device: <DEVICE> Inode: <INODE> Links: 1 
> +
> + File: "./directory/file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_2"
> + Size: 1348680 Filetype: Regular File
> + Mode: (0755/-rwxr-xr-x) Uid: (3) Gid: (1)
> +Device: <DEVICE> Inode: <INODE> Links: 1 
> +
> + File: "./directory/file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_3"
> + Size: 1348680 Filetype: Regular File
> + Mode: (0755/-rwxr-xr-x) Uid: (3) Gid: (1)
> +Device: <DEVICE> Inode: <INODE> Links: 1 
> +
> + File: "./directory/file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_4"
> + Size: 1348680 Filetype: Regular File
> + Mode: (0755/-rwxr-xr-x) Uid: (3) Gid: (1)
> +Device: <DEVICE> Inode: <INODE> Links: 1 
> +
> + File: "./directory/test"
> + Size: 1348680 Filetype: Regular File
> + Mode: (0755/-rwxr-xr-x) Uid: (3) Gid: (1)
> +Device: <DEVICE> Inode: <INODE> Links: 1 
> +
> + File: "./directory_setgid"
> + Size: <DSIZE> Filetype: Directory
> + Mode: (2755/drwxr-sr-x) Uid: (3) Gid: (2)
> +Device: <DEVICE> Inode: <INODE> Links: 2 
> +
> + File: "./directory_setgid/file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_5"
> + Size: 1348680 Filetype: Regular File
> + Mode: (0755/-rwxr-xr-x) Uid: (3) Gid: (1)
> +Device: <DEVICE> Inode: <INODE> Links: 1 
> +
> + File: "./pipe"
> + Size: 0 Filetype: Fifo File
> + Mode: (0670/frw-rwx---) Uid: (0) Gid: (0)
> +Device: <DEVICE> Inode: <INODE> Links: 1 
> +
> + File: "./setgid"
> + Size: 1348680 Filetype: Regular File
> + Mode: (2666/-rw-rwsrw-) Uid: (0) Gid: (0)
> +Device: <DEVICE> Inode: <INODE> Links: 1 
> +
> + File: "./setugid"
> + Size: 1348680 Filetype: Regular File
> + Mode: (6666/-rwsrwsrw-) Uid: (0) Gid: (0)
> +Device: <DEVICE> Inode: <INODE> Links: 1 
> +
> + File: "./setuid"
> + Size: 1348680 Filetype: Regular File
> + Mode: (4666/-rwsrw-rw-) Uid: (0) Gid: (0)
> +Device: <DEVICE> Inode: <INODE> Links: 1 
> +
> + File: "./symlink"
> + Size: 7 Filetype: Symbolic Link
> + Mode: (0123/l--x-w--wx) Uid: (0) Gid: (0)
> +Device: <DEVICE> Inode: <INODE> Links: 1 
> +Attribute "userdata" has a 5 byte value for SCRATCH_MNT/directory/test
> +Attribute "rootdata" has a 5 byte value for SCRATCH_MNT/directory/test
> +Attribute "bigdata" has a 37960 byte value for SCRATCH_MNT/directory/test
> +Attribute "acldata" has a 5 byte value for SCRATCH_MNT/directory/test
> +*** unmount FS
> +*** done
> +*** unmount
>
Darrick J. Wong March 4, 2025, 5:42 p.m. UTC | #2
On Sun, Mar 02, 2025 at 09:15:44PM +0800, Zorro Lang wrote:
> On Thu, Jan 16, 2025 at 03:35:04PM -0800, Darrick J. Wong wrote:
> > From: Darrick J. Wong <djwong@kernel.org>
> > 
> > Make sure we can do protofiles with xattr support.
> > 
> > Signed-off-by: "Darrick J. Wong" <djwong@kernel.org>
> > ---
> 
> This test always fails on my side, as below (diff output):
> 
>    ...
>    Attribute "rootdata" has a 5 byte value for SCRATCH_MNT/directory/test
>    Attribute "bigdata" has a 37960 byte value for SCRATCH_MNT/directory/test
>    Attribute "acldata" has a 5 byte value for SCRATCH_MNT/directory/test
>   +Attribute "selinux" has a 28 byte value for SCRATCH_MNT/directory/test
>    *** unmount FS
>    *** done
>    *** unmount
> 
> Looks like the $SELINUX_MOUNT_OPTIONS doesn't help the mkfs protofile
> with xattrs.

Oops.  Ok then, I'll filter them out below...

> Thanks,
> Zorro
> 
> 
> >  tests/xfs/1937     |  144 ++++++++++++++++++++++++++++++++++++++++++++++++++++
> >  tests/xfs/1937.out |  102 +++++++++++++++++++++++++++++++++++++
> >  2 files changed, 246 insertions(+)
> >  create mode 100755 tests/xfs/1937
> >  create mode 100644 tests/xfs/1937.out
> > 
> > 
> > diff --git a/tests/xfs/1937 b/tests/xfs/1937
> > new file mode 100755
> > index 00000000000000..aa4143a75ef643
> > --- /dev/null
> > +++ b/tests/xfs/1937
> > @@ -0,0 +1,144 @@
> > +#! /bin/bash
> > +# SPDX-License-Identifier: GPL-2.0
> > +# Copyright (c) 2024-2025 Oracle.  All Rights Reserved.
> > +# Copyright (c) 2000-2004 Silicon Graphics, Inc.  All Rights Reserved.
> > +#
> > +# FS QA Test No. 1937
> > +#
> > +# mkfs protofile with xattrs test
> > +#
> > +. ./common/preamble
> > +_begin_fstest mkfs auto quick
> > +
> > +seqfull="$seqres.full"
> > +rm -f $seqfull
> > +
> > +. ./common/filter
> > +
> > +_cleanup()
> > +{
> > +	echo "*** unmount"
> > +	_scratch_unmount 2>/dev/null
> > +	rm -f $tmp.*
> > +	rm -f $TEST_DIR/$seq.file
> > +}
> > +
> > +_full()
> > +{
> > +	echo ""            >>$seqfull
> > +	echo "*** $* ***"  >>$seqfull
> > +	echo ""            >>$seqfull
> > +}
> > +
> > +_filter_stat()
> > +{
> > +	sed '
> > +		/^Access:/d;
> > +		/^Modify:/d;
> > +		/^Change:/d;
> > +		s/Device: *[0-9][0-9]*,[0-9][0-9]*/Device: <DEVICE>/;
> > +		s/Inode: *[0-9][0-9]*/Inode: <INODE>/;
> > +		s/Size: *[0-9][0-9]* *Filetype: Dir/Size: <DSIZE> Filetype: Dir/;
> > +	' | tr -s ' '
> > +}
> > +
> > +_require_command $ATTR_PROG "attr"
> > +_require_scratch
> > +
> > +# mkfs cannot create a filesystem with protofiles if realtime is enabled, so
> > +# don't run this test if the rtinherit is anywhere in the mkfs options.
> > +echo "$MKFS_OPTIONS" | grep -q "rtinherit" && \
> > +	_notrun "Cannot mkfs with a protofile and -d rtinherit."
> > +
> > +protofile=$tmp.proto
> > +tempfile=$TEST_DIR/$seq.file
> > +
> > +$XFS_IO_PROG -f -c 'pwrite 64k 28k' -c 'pwrite 1280k 37960' $tempfile >> $seqres.full
> > +$here/src/devzero -b 2048 -n 2 -c -v 44 $tempfile.2 
> > +
> > +$ATTR_PROG -R -s rootdata -V 0test $tempfile &>> $seqres.full
> > +$ATTR_PROG -S -s acldata -V 1test $tempfile &>> $seqres.full
> > +$ATTR_PROG -s userdata -V 2test $tempfile &>> $seqres.full
> > +perl -e 'print "x" x 37960;' | $ATTR_PROG -s bigdata $tempfile &>> $seqres.full
> > +
> > +cat >$protofile <<EOF
> > +DUMMY1
> > +0 0
> > +: root directory
> > +d--777 3 1
> > +: a directory
> > +directory d--755 3 1 
> > +test ---755 3 1 $tempfile
> > +file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_0 ---755 3 1 $tempfile
> > +file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_1 ---755 3 1 $tempfile
> > +file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_2 ---755 3 1 $tempfile
> > +file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_3 ---755 3 1 $tempfile
> > +file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_4 ---755 3 1 $tempfile
> > +$
> > +: back in the root
> > +setuid -u-666 0 0 $tempfile
> > +setgid --g666 0 0 $tempfile
> > +setugid -ug666 0 0 $tempfile
> > +directory_setgid d-g755 3 2
> > +file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_5 ---755 3 1 $tempfile
> > +$
> > +: back in the root
> > +block_device b--012 3 1 161 162 
> > +char_device c--345 3 1 177 178
> > +pipe p--670 0 0
> > +symlink l--123 0 0 bigfile
> > +: a file we actually read
> > +bigfile ---666 3 0 $tempfile.2
> > +: done
> > +$
> > +EOF
> > +
> > +if [ $? -ne 0 ]
> > +then
> > +	_fail "failed to create test protofile"
> > +fi
> > +
> > +_verify_fs()
> > +{
> > +	echo "*** create FS version $1"
> > +	VERSION="-n version=$1"
> > +
> > +	_scratch_unmount >/dev/null 2>&1
> > +
> > +	_full "mkfs"
> > +	_scratch_mkfs_xfs $VERSION -p $protofile >>$seqfull 2>&1
> > +
> > +	echo "*** check FS"
> > +	_check_scratch_fs
> > +
> > +	echo "*** mount FS"
> > +	_full " mount"
> > +	_try_scratch_mount >>$seqfull 2>&1 \
> > +		|| _fail "mount failed"
> > +
> > +	$ATTR_PROG -l $SCRATCH_MNT/directory/test | \
> > +		grep -q 'Attribute.*has a ' || \
> > +		_notrun "mkfs.xfs protofile does not support xattrs"
> > +
> > +	echo "*** verify FS"
> > +	(cd $SCRATCH_MNT ; find . | LC_COLLATE=POSIX sort \
> > +		| grep -v ".use_space" \
> > +		| xargs $here/src/lstat64 | _filter_stat)
> > +	diff -q $SCRATCH_MNT/bigfile $tempfile.2 \
> > +		|| _fail "bigfile corrupted"
> > +	diff -q $SCRATCH_MNT/symlink $tempfile.2 \
> > +		|| _fail "symlink broken"
> > +
> > +	$ATTR_PROG -l $SCRATCH_MNT/directory/test | _filter_scratch

...so they don't spill into the golden output.  As this is already in
patches-in-queue, do you want me to send a fixpatch on top of that?

--D

> > +
> > +	echo "*** unmount FS"
> > +	_full "umount"
> > +	_scratch_unmount >>$seqfull 2>&1 \
> > +		|| _fail "umount failed"
> > +}
> > +
> > +_verify_fs 2
> > +
> > +echo "*** done"
> > +status=0
> > +exit
> > diff --git a/tests/xfs/1937.out b/tests/xfs/1937.out
> > new file mode 100644
> > index 00000000000000..050c8318b1abca
> > --- /dev/null
> > +++ b/tests/xfs/1937.out
> > @@ -0,0 +1,102 @@
> > +QA output created by 1937
> > +Wrote 2048.00Kb (value 0x2c)
> > +*** create FS version 2
> > +*** check FS
> > +*** mount FS
> > +*** verify FS
> > + File: "."
> > + Size: <DSIZE> Filetype: Directory
> > + Mode: (0777/drwxrwxrwx) Uid: (3) Gid: (1)
> > +Device: <DEVICE> Inode: <INODE> Links: 4 
> > +
> > + File: "./bigfile"
> > + Size: 2097152 Filetype: Regular File
> > + Mode: (0666/-rw-rw-rw-) Uid: (3) Gid: (0)
> > +Device: <DEVICE> Inode: <INODE> Links: 1 
> > +
> > + File: "./block_device"
> > + Size: 0 Filetype: Block Device
> > + Mode: (0012/b-----x-w-) Uid: (3) Gid: (1)
> > +Device: <DEVICE> Inode: <INODE> Links: 1 Device type: 161,162
> > +
> > + File: "./char_device"
> > + Size: 0 Filetype: Character Device
> > + Mode: (0345/c-wxr--r-x) Uid: (3) Gid: (1)
> > +Device: <DEVICE> Inode: <INODE> Links: 1 Device type: 177,178
> > +
> > + File: "./directory"
> > + Size: <DSIZE> Filetype: Directory
> > + Mode: (0755/drwxr-xr-x) Uid: (3) Gid: (1)
> > +Device: <DEVICE> Inode: <INODE> Links: 2 
> > +
> > + File: "./directory/file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_0"
> > + Size: 1348680 Filetype: Regular File
> > + Mode: (0755/-rwxr-xr-x) Uid: (3) Gid: (1)
> > +Device: <DEVICE> Inode: <INODE> Links: 1 
> > +
> > + File: "./directory/file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_1"
> > + Size: 1348680 Filetype: Regular File
> > + Mode: (0755/-rwxr-xr-x) Uid: (3) Gid: (1)
> > +Device: <DEVICE> Inode: <INODE> Links: 1 
> > +
> > + File: "./directory/file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_2"
> > + Size: 1348680 Filetype: Regular File
> > + Mode: (0755/-rwxr-xr-x) Uid: (3) Gid: (1)
> > +Device: <DEVICE> Inode: <INODE> Links: 1 
> > +
> > + File: "./directory/file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_3"
> > + Size: 1348680 Filetype: Regular File
> > + Mode: (0755/-rwxr-xr-x) Uid: (3) Gid: (1)
> > +Device: <DEVICE> Inode: <INODE> Links: 1 
> > +
> > + File: "./directory/file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_4"
> > + Size: 1348680 Filetype: Regular File
> > + Mode: (0755/-rwxr-xr-x) Uid: (3) Gid: (1)
> > +Device: <DEVICE> Inode: <INODE> Links: 1 
> > +
> > + File: "./directory/test"
> > + Size: 1348680 Filetype: Regular File
> > + Mode: (0755/-rwxr-xr-x) Uid: (3) Gid: (1)
> > +Device: <DEVICE> Inode: <INODE> Links: 1 
> > +
> > + File: "./directory_setgid"
> > + Size: <DSIZE> Filetype: Directory
> > + Mode: (2755/drwxr-sr-x) Uid: (3) Gid: (2)
> > +Device: <DEVICE> Inode: <INODE> Links: 2 
> > +
> > + File: "./directory_setgid/file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_5"
> > + Size: 1348680 Filetype: Regular File
> > + Mode: (0755/-rwxr-xr-x) Uid: (3) Gid: (1)
> > +Device: <DEVICE> Inode: <INODE> Links: 1 
> > +
> > + File: "./pipe"
> > + Size: 0 Filetype: Fifo File
> > + Mode: (0670/frw-rwx---) Uid: (0) Gid: (0)
> > +Device: <DEVICE> Inode: <INODE> Links: 1 
> > +
> > + File: "./setgid"
> > + Size: 1348680 Filetype: Regular File
> > + Mode: (2666/-rw-rwsrw-) Uid: (0) Gid: (0)
> > +Device: <DEVICE> Inode: <INODE> Links: 1 
> > +
> > + File: "./setugid"
> > + Size: 1348680 Filetype: Regular File
> > + Mode: (6666/-rwsrwsrw-) Uid: (0) Gid: (0)
> > +Device: <DEVICE> Inode: <INODE> Links: 1 
> > +
> > + File: "./setuid"
> > + Size: 1348680 Filetype: Regular File
> > + Mode: (4666/-rwsrw-rw-) Uid: (0) Gid: (0)
> > +Device: <DEVICE> Inode: <INODE> Links: 1 
> > +
> > + File: "./symlink"
> > + Size: 7 Filetype: Symbolic Link
> > + Mode: (0123/l--x-w--wx) Uid: (0) Gid: (0)
> > +Device: <DEVICE> Inode: <INODE> Links: 1 
> > +Attribute "userdata" has a 5 byte value for SCRATCH_MNT/directory/test
> > +Attribute "rootdata" has a 5 byte value for SCRATCH_MNT/directory/test
> > +Attribute "bigdata" has a 37960 byte value for SCRATCH_MNT/directory/test
> > +Attribute "acldata" has a 5 byte value for SCRATCH_MNT/directory/test
> > +*** unmount FS
> > +*** done
> > +*** unmount
> > 
>
Zorro Lang March 4, 2025, 6 p.m. UTC | #3
On Tue, Mar 04, 2025 at 09:42:42AM -0800, Darrick J. Wong wrote:
> On Sun, Mar 02, 2025 at 09:15:44PM +0800, Zorro Lang wrote:
> > On Thu, Jan 16, 2025 at 03:35:04PM -0800, Darrick J. Wong wrote:
> > > From: Darrick J. Wong <djwong@kernel.org>
> > > 
> > > Make sure we can do protofiles with xattr support.
> > > 
> > > Signed-off-by: "Darrick J. Wong" <djwong@kernel.org>
> > > ---
> > 
> > This test always fails on my side, as below (diff output):
> > 
> >    ...
> >    Attribute "rootdata" has a 5 byte value for SCRATCH_MNT/directory/test
> >    Attribute "bigdata" has a 37960 byte value for SCRATCH_MNT/directory/test
> >    Attribute "acldata" has a 5 byte value for SCRATCH_MNT/directory/test
> >   +Attribute "selinux" has a 28 byte value for SCRATCH_MNT/directory/test
> >    *** unmount FS
> >    *** done
> >    *** unmount
> > 
> > Looks like the $SELINUX_MOUNT_OPTIONS doesn't help the mkfs protofile
> > with xattrs.
> 
> Oops.  Ok then, I'll filter them out below...
> 
> > Thanks,
> > Zorro
> > 
> > 
> > >  tests/xfs/1937     |  144 ++++++++++++++++++++++++++++++++++++++++++++++++++++
> > >  tests/xfs/1937.out |  102 +++++++++++++++++++++++++++++++++++++
> > >  2 files changed, 246 insertions(+)
> > >  create mode 100755 tests/xfs/1937
> > >  create mode 100644 tests/xfs/1937.out
> > >
 
[snip]

> > > +	echo "*** verify FS"
> > > +	(cd $SCRATCH_MNT ; find . | LC_COLLATE=POSIX sort \
> > > +		| grep -v ".use_space" \
> > > +		| xargs $here/src/lstat64 | _filter_stat)
> > > +	diff -q $SCRATCH_MNT/bigfile $tempfile.2 \
> > > +		|| _fail "bigfile corrupted"
> > > +	diff -q $SCRATCH_MNT/symlink $tempfile.2 \
> > > +		|| _fail "symlink broken"
> > > +
> > > +	$ATTR_PROG -l $SCRATCH_MNT/directory/test | _filter_scratch
> 
> ...so they don't spill into the golden output.  As this is already in
> patches-in-queue, do you want me to send a fixpatch on top of that?

If you just need a simple filter, I think you can tell me what do you
want to change, I can amend the commit simply. Or if you need to change
more, only re-send this patch is good to me :)

Thanks,
Zorro

> 
> --D
> 
> > > +
> > > +	echo "*** unmount FS"
> > > +	_full "umount"
> > > +	_scratch_unmount >>$seqfull 2>&1 \
> > > +		|| _fail "umount failed"
> > > +}
> > > +
> > > +_verify_fs 2
> > > +
> > > +echo "*** done"
> > > +status=0
> > > +exit
> > > diff --git a/tests/xfs/1937.out b/tests/xfs/1937.out
> > > new file mode 100644
> > > index 00000000000000..050c8318b1abca
> > > --- /dev/null
> > > +++ b/tests/xfs/1937.out
> > > @@ -0,0 +1,102 @@
> > > +QA output created by 1937
> > > +Wrote 2048.00Kb (value 0x2c)
> > > +*** create FS version 2
> > > +*** check FS
> > > +*** mount FS
> > > +*** verify FS
> > > + File: "."
> > > + Size: <DSIZE> Filetype: Directory
> > > + Mode: (0777/drwxrwxrwx) Uid: (3) Gid: (1)
> > > +Device: <DEVICE> Inode: <INODE> Links: 4 
> > > +
> > > + File: "./bigfile"
> > > + Size: 2097152 Filetype: Regular File
> > > + Mode: (0666/-rw-rw-rw-) Uid: (3) Gid: (0)
> > > +Device: <DEVICE> Inode: <INODE> Links: 1 
> > > +
> > > + File: "./block_device"
> > > + Size: 0 Filetype: Block Device
> > > + Mode: (0012/b-----x-w-) Uid: (3) Gid: (1)
> > > +Device: <DEVICE> Inode: <INODE> Links: 1 Device type: 161,162
> > > +
> > > + File: "./char_device"
> > > + Size: 0 Filetype: Character Device
> > > + Mode: (0345/c-wxr--r-x) Uid: (3) Gid: (1)
> > > +Device: <DEVICE> Inode: <INODE> Links: 1 Device type: 177,178
> > > +
> > > + File: "./directory"
> > > + Size: <DSIZE> Filetype: Directory
> > > + Mode: (0755/drwxr-xr-x) Uid: (3) Gid: (1)
> > > +Device: <DEVICE> Inode: <INODE> Links: 2 
> > > +
> > > + File: "./directory/file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_0"
> > > + Size: 1348680 Filetype: Regular File
> > > + Mode: (0755/-rwxr-xr-x) Uid: (3) Gid: (1)
> > > +Device: <DEVICE> Inode: <INODE> Links: 1 
> > > +
> > > + File: "./directory/file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_1"
> > > + Size: 1348680 Filetype: Regular File
> > > + Mode: (0755/-rwxr-xr-x) Uid: (3) Gid: (1)
> > > +Device: <DEVICE> Inode: <INODE> Links: 1 
> > > +
> > > + File: "./directory/file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_2"
> > > + Size: 1348680 Filetype: Regular File
> > > + Mode: (0755/-rwxr-xr-x) Uid: (3) Gid: (1)
> > > +Device: <DEVICE> Inode: <INODE> Links: 1 
> > > +
> > > + File: "./directory/file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_3"
> > > + Size: 1348680 Filetype: Regular File
> > > + Mode: (0755/-rwxr-xr-x) Uid: (3) Gid: (1)
> > > +Device: <DEVICE> Inode: <INODE> Links: 1 
> > > +
> > > + File: "./directory/file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_4"
> > > + Size: 1348680 Filetype: Regular File
> > > + Mode: (0755/-rwxr-xr-x) Uid: (3) Gid: (1)
> > > +Device: <DEVICE> Inode: <INODE> Links: 1 
> > > +
> > > + File: "./directory/test"
> > > + Size: 1348680 Filetype: Regular File
> > > + Mode: (0755/-rwxr-xr-x) Uid: (3) Gid: (1)
> > > +Device: <DEVICE> Inode: <INODE> Links: 1 
> > > +
> > > + File: "./directory_setgid"
> > > + Size: <DSIZE> Filetype: Directory
> > > + Mode: (2755/drwxr-sr-x) Uid: (3) Gid: (2)
> > > +Device: <DEVICE> Inode: <INODE> Links: 2 
> > > +
> > > + File: "./directory_setgid/file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_5"
> > > + Size: 1348680 Filetype: Regular File
> > > + Mode: (0755/-rwxr-xr-x) Uid: (3) Gid: (1)
> > > +Device: <DEVICE> Inode: <INODE> Links: 1 
> > > +
> > > + File: "./pipe"
> > > + Size: 0 Filetype: Fifo File
> > > + Mode: (0670/frw-rwx---) Uid: (0) Gid: (0)
> > > +Device: <DEVICE> Inode: <INODE> Links: 1 
> > > +
> > > + File: "./setgid"
> > > + Size: 1348680 Filetype: Regular File
> > > + Mode: (2666/-rw-rwsrw-) Uid: (0) Gid: (0)
> > > +Device: <DEVICE> Inode: <INODE> Links: 1 
> > > +
> > > + File: "./setugid"
> > > + Size: 1348680 Filetype: Regular File
> > > + Mode: (6666/-rwsrwsrw-) Uid: (0) Gid: (0)
> > > +Device: <DEVICE> Inode: <INODE> Links: 1 
> > > +
> > > + File: "./setuid"
> > > + Size: 1348680 Filetype: Regular File
> > > + Mode: (4666/-rwsrw-rw-) Uid: (0) Gid: (0)
> > > +Device: <DEVICE> Inode: <INODE> Links: 1 
> > > +
> > > + File: "./symlink"
> > > + Size: 7 Filetype: Symbolic Link
> > > + Mode: (0123/l--x-w--wx) Uid: (0) Gid: (0)
> > > +Device: <DEVICE> Inode: <INODE> Links: 1 
> > > +Attribute "userdata" has a 5 byte value for SCRATCH_MNT/directory/test
> > > +Attribute "rootdata" has a 5 byte value for SCRATCH_MNT/directory/test
> > > +Attribute "bigdata" has a 37960 byte value for SCRATCH_MNT/directory/test
> > > +Attribute "acldata" has a 5 byte value for SCRATCH_MNT/directory/test
> > > +*** unmount FS
> > > +*** done
> > > +*** unmount
> > > 
> > 
>
Darrick J. Wong March 4, 2025, 6:21 p.m. UTC | #4
On Wed, Mar 05, 2025 at 02:00:40AM +0800, Zorro Lang wrote:
> On Tue, Mar 04, 2025 at 09:42:42AM -0800, Darrick J. Wong wrote:
> > On Sun, Mar 02, 2025 at 09:15:44PM +0800, Zorro Lang wrote:
> > > On Thu, Jan 16, 2025 at 03:35:04PM -0800, Darrick J. Wong wrote:
> > > > From: Darrick J. Wong <djwong@kernel.org>
> > > > 
> > > > Make sure we can do protofiles with xattr support.
> > > > 
> > > > Signed-off-by: "Darrick J. Wong" <djwong@kernel.org>
> > > > ---
> > > 
> > > This test always fails on my side, as below (diff output):
> > > 
> > >    ...
> > >    Attribute "rootdata" has a 5 byte value for SCRATCH_MNT/directory/test
> > >    Attribute "bigdata" has a 37960 byte value for SCRATCH_MNT/directory/test
> > >    Attribute "acldata" has a 5 byte value for SCRATCH_MNT/directory/test
> > >   +Attribute "selinux" has a 28 byte value for SCRATCH_MNT/directory/test
> > >    *** unmount FS
> > >    *** done
> > >    *** unmount
> > > 
> > > Looks like the $SELINUX_MOUNT_OPTIONS doesn't help the mkfs protofile
> > > with xattrs.
> > 
> > Oops.  Ok then, I'll filter them out below...
> > 
> > > Thanks,
> > > Zorro
> > > 
> > > 
> > > >  tests/xfs/1937     |  144 ++++++++++++++++++++++++++++++++++++++++++++++++++++
> > > >  tests/xfs/1937.out |  102 +++++++++++++++++++++++++++++++++++++
> > > >  2 files changed, 246 insertions(+)
> > > >  create mode 100755 tests/xfs/1937
> > > >  create mode 100644 tests/xfs/1937.out
> > > >
>  
> [snip]
> 
> > > > +	echo "*** verify FS"
> > > > +	(cd $SCRATCH_MNT ; find . | LC_COLLATE=POSIX sort \
> > > > +		| grep -v ".use_space" \
> > > > +		| xargs $here/src/lstat64 | _filter_stat)
> > > > +	diff -q $SCRATCH_MNT/bigfile $tempfile.2 \
> > > > +		|| _fail "bigfile corrupted"
> > > > +	diff -q $SCRATCH_MNT/symlink $tempfile.2 \
> > > > +		|| _fail "symlink broken"
> > > > +
> > > > +	$ATTR_PROG -l $SCRATCH_MNT/directory/test | _filter_scratch
> > 
> > ...so they don't spill into the golden output.  As this is already in
> > patches-in-queue, do you want me to send a fixpatch on top of that?
> 
> If you just need a simple filter, I think you can tell me what do you
> want to change, I can amend the commit simply. Or if you need to change
> more, only re-send this patch is good to me :)

I /think/ changing the above line to this will fix it:

	$ATTR_PROG -l $SCRATCH_MNT/directory/test | \
		sed -e '/Attribute..selinux..has/d' | \
		_filter_scratch

--D

> Thanks,
> Zorro
> 
> > 
> > --D
> > 
> > > > +
> > > > +	echo "*** unmount FS"
> > > > +	_full "umount"
> > > > +	_scratch_unmount >>$seqfull 2>&1 \
> > > > +		|| _fail "umount failed"
> > > > +}
> > > > +
> > > > +_verify_fs 2
> > > > +
> > > > +echo "*** done"
> > > > +status=0
> > > > +exit
> > > > diff --git a/tests/xfs/1937.out b/tests/xfs/1937.out
> > > > new file mode 100644
> > > > index 00000000000000..050c8318b1abca
> > > > --- /dev/null
> > > > +++ b/tests/xfs/1937.out
> > > > @@ -0,0 +1,102 @@
> > > > +QA output created by 1937
> > > > +Wrote 2048.00Kb (value 0x2c)
> > > > +*** create FS version 2
> > > > +*** check FS
> > > > +*** mount FS
> > > > +*** verify FS
> > > > + File: "."
> > > > + Size: <DSIZE> Filetype: Directory
> > > > + Mode: (0777/drwxrwxrwx) Uid: (3) Gid: (1)
> > > > +Device: <DEVICE> Inode: <INODE> Links: 4 
> > > > +
> > > > + File: "./bigfile"
> > > > + Size: 2097152 Filetype: Regular File
> > > > + Mode: (0666/-rw-rw-rw-) Uid: (3) Gid: (0)
> > > > +Device: <DEVICE> Inode: <INODE> Links: 1 
> > > > +
> > > > + File: "./block_device"
> > > > + Size: 0 Filetype: Block Device
> > > > + Mode: (0012/b-----x-w-) Uid: (3) Gid: (1)
> > > > +Device: <DEVICE> Inode: <INODE> Links: 1 Device type: 161,162
> > > > +
> > > > + File: "./char_device"
> > > > + Size: 0 Filetype: Character Device
> > > > + Mode: (0345/c-wxr--r-x) Uid: (3) Gid: (1)
> > > > +Device: <DEVICE> Inode: <INODE> Links: 1 Device type: 177,178
> > > > +
> > > > + File: "./directory"
> > > > + Size: <DSIZE> Filetype: Directory
> > > > + Mode: (0755/drwxr-xr-x) Uid: (3) Gid: (1)
> > > > +Device: <DEVICE> Inode: <INODE> Links: 2 
> > > > +
> > > > + File: "./directory/file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_0"
> > > > + Size: 1348680 Filetype: Regular File
> > > > + Mode: (0755/-rwxr-xr-x) Uid: (3) Gid: (1)
> > > > +Device: <DEVICE> Inode: <INODE> Links: 1 
> > > > +
> > > > + File: "./directory/file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_1"
> > > > + Size: 1348680 Filetype: Regular File
> > > > + Mode: (0755/-rwxr-xr-x) Uid: (3) Gid: (1)
> > > > +Device: <DEVICE> Inode: <INODE> Links: 1 
> > > > +
> > > > + File: "./directory/file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_2"
> > > > + Size: 1348680 Filetype: Regular File
> > > > + Mode: (0755/-rwxr-xr-x) Uid: (3) Gid: (1)
> > > > +Device: <DEVICE> Inode: <INODE> Links: 1 
> > > > +
> > > > + File: "./directory/file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_3"
> > > > + Size: 1348680 Filetype: Regular File
> > > > + Mode: (0755/-rwxr-xr-x) Uid: (3) Gid: (1)
> > > > +Device: <DEVICE> Inode: <INODE> Links: 1 
> > > > +
> > > > + File: "./directory/file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_4"
> > > > + Size: 1348680 Filetype: Regular File
> > > > + Mode: (0755/-rwxr-xr-x) Uid: (3) Gid: (1)
> > > > +Device: <DEVICE> Inode: <INODE> Links: 1 
> > > > +
> > > > + File: "./directory/test"
> > > > + Size: 1348680 Filetype: Regular File
> > > > + Mode: (0755/-rwxr-xr-x) Uid: (3) Gid: (1)
> > > > +Device: <DEVICE> Inode: <INODE> Links: 1 
> > > > +
> > > > + File: "./directory_setgid"
> > > > + Size: <DSIZE> Filetype: Directory
> > > > + Mode: (2755/drwxr-sr-x) Uid: (3) Gid: (2)
> > > > +Device: <DEVICE> Inode: <INODE> Links: 2 
> > > > +
> > > > + File: "./directory_setgid/file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_5"
> > > > + Size: 1348680 Filetype: Regular File
> > > > + Mode: (0755/-rwxr-xr-x) Uid: (3) Gid: (1)
> > > > +Device: <DEVICE> Inode: <INODE> Links: 1 
> > > > +
> > > > + File: "./pipe"
> > > > + Size: 0 Filetype: Fifo File
> > > > + Mode: (0670/frw-rwx---) Uid: (0) Gid: (0)
> > > > +Device: <DEVICE> Inode: <INODE> Links: 1 
> > > > +
> > > > + File: "./setgid"
> > > > + Size: 1348680 Filetype: Regular File
> > > > + Mode: (2666/-rw-rwsrw-) Uid: (0) Gid: (0)
> > > > +Device: <DEVICE> Inode: <INODE> Links: 1 
> > > > +
> > > > + File: "./setugid"
> > > > + Size: 1348680 Filetype: Regular File
> > > > + Mode: (6666/-rwsrwsrw-) Uid: (0) Gid: (0)
> > > > +Device: <DEVICE> Inode: <INODE> Links: 1 
> > > > +
> > > > + File: "./setuid"
> > > > + Size: 1348680 Filetype: Regular File
> > > > + Mode: (4666/-rwsrw-rw-) Uid: (0) Gid: (0)
> > > > +Device: <DEVICE> Inode: <INODE> Links: 1 
> > > > +
> > > > + File: "./symlink"
> > > > + Size: 7 Filetype: Symbolic Link
> > > > + Mode: (0123/l--x-w--wx) Uid: (0) Gid: (0)
> > > > +Device: <DEVICE> Inode: <INODE> Links: 1 
> > > > +Attribute "userdata" has a 5 byte value for SCRATCH_MNT/directory/test
> > > > +Attribute "rootdata" has a 5 byte value for SCRATCH_MNT/directory/test
> > > > +Attribute "bigdata" has a 37960 byte value for SCRATCH_MNT/directory/test
> > > > +Attribute "acldata" has a 5 byte value for SCRATCH_MNT/directory/test
> > > > +*** unmount FS
> > > > +*** done
> > > > +*** unmount
> > > > 
> > > 
> > 
> 
>
diff mbox series

Patch

diff --git a/tests/xfs/1937 b/tests/xfs/1937
new file mode 100755
index 00000000000000..aa4143a75ef643
--- /dev/null
+++ b/tests/xfs/1937
@@ -0,0 +1,144 @@ 
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2024-2025 Oracle.  All Rights Reserved.
+# Copyright (c) 2000-2004 Silicon Graphics, Inc.  All Rights Reserved.
+#
+# FS QA Test No. 1937
+#
+# mkfs protofile with xattrs test
+#
+. ./common/preamble
+_begin_fstest mkfs auto quick
+
+seqfull="$seqres.full"
+rm -f $seqfull
+
+. ./common/filter
+
+_cleanup()
+{
+	echo "*** unmount"
+	_scratch_unmount 2>/dev/null
+	rm -f $tmp.*
+	rm -f $TEST_DIR/$seq.file
+}
+
+_full()
+{
+	echo ""            >>$seqfull
+	echo "*** $* ***"  >>$seqfull
+	echo ""            >>$seqfull
+}
+
+_filter_stat()
+{
+	sed '
+		/^Access:/d;
+		/^Modify:/d;
+		/^Change:/d;
+		s/Device: *[0-9][0-9]*,[0-9][0-9]*/Device: <DEVICE>/;
+		s/Inode: *[0-9][0-9]*/Inode: <INODE>/;
+		s/Size: *[0-9][0-9]* *Filetype: Dir/Size: <DSIZE> Filetype: Dir/;
+	' | tr -s ' '
+}
+
+_require_command $ATTR_PROG "attr"
+_require_scratch
+
+# mkfs cannot create a filesystem with protofiles if realtime is enabled, so
+# don't run this test if the rtinherit is anywhere in the mkfs options.
+echo "$MKFS_OPTIONS" | grep -q "rtinherit" && \
+	_notrun "Cannot mkfs with a protofile and -d rtinherit."
+
+protofile=$tmp.proto
+tempfile=$TEST_DIR/$seq.file
+
+$XFS_IO_PROG -f -c 'pwrite 64k 28k' -c 'pwrite 1280k 37960' $tempfile >> $seqres.full
+$here/src/devzero -b 2048 -n 2 -c -v 44 $tempfile.2 
+
+$ATTR_PROG -R -s rootdata -V 0test $tempfile &>> $seqres.full
+$ATTR_PROG -S -s acldata -V 1test $tempfile &>> $seqres.full
+$ATTR_PROG -s userdata -V 2test $tempfile &>> $seqres.full
+perl -e 'print "x" x 37960;' | $ATTR_PROG -s bigdata $tempfile &>> $seqres.full
+
+cat >$protofile <<EOF
+DUMMY1
+0 0
+: root directory
+d--777 3 1
+: a directory
+directory d--755 3 1 
+test ---755 3 1 $tempfile
+file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_0 ---755 3 1 $tempfile
+file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_1 ---755 3 1 $tempfile
+file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_2 ---755 3 1 $tempfile
+file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_3 ---755 3 1 $tempfile
+file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_4 ---755 3 1 $tempfile
+$
+: back in the root
+setuid -u-666 0 0 $tempfile
+setgid --g666 0 0 $tempfile
+setugid -ug666 0 0 $tempfile
+directory_setgid d-g755 3 2
+file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_5 ---755 3 1 $tempfile
+$
+: back in the root
+block_device b--012 3 1 161 162 
+char_device c--345 3 1 177 178
+pipe p--670 0 0
+symlink l--123 0 0 bigfile
+: a file we actually read
+bigfile ---666 3 0 $tempfile.2
+: done
+$
+EOF
+
+if [ $? -ne 0 ]
+then
+	_fail "failed to create test protofile"
+fi
+
+_verify_fs()
+{
+	echo "*** create FS version $1"
+	VERSION="-n version=$1"
+
+	_scratch_unmount >/dev/null 2>&1
+
+	_full "mkfs"
+	_scratch_mkfs_xfs $VERSION -p $protofile >>$seqfull 2>&1
+
+	echo "*** check FS"
+	_check_scratch_fs
+
+	echo "*** mount FS"
+	_full " mount"
+	_try_scratch_mount >>$seqfull 2>&1 \
+		|| _fail "mount failed"
+
+	$ATTR_PROG -l $SCRATCH_MNT/directory/test | \
+		grep -q 'Attribute.*has a ' || \
+		_notrun "mkfs.xfs protofile does not support xattrs"
+
+	echo "*** verify FS"
+	(cd $SCRATCH_MNT ; find . | LC_COLLATE=POSIX sort \
+		| grep -v ".use_space" \
+		| xargs $here/src/lstat64 | _filter_stat)
+	diff -q $SCRATCH_MNT/bigfile $tempfile.2 \
+		|| _fail "bigfile corrupted"
+	diff -q $SCRATCH_MNT/symlink $tempfile.2 \
+		|| _fail "symlink broken"
+
+	$ATTR_PROG -l $SCRATCH_MNT/directory/test | _filter_scratch
+
+	echo "*** unmount FS"
+	_full "umount"
+	_scratch_unmount >>$seqfull 2>&1 \
+		|| _fail "umount failed"
+}
+
+_verify_fs 2
+
+echo "*** done"
+status=0
+exit
diff --git a/tests/xfs/1937.out b/tests/xfs/1937.out
new file mode 100644
index 00000000000000..050c8318b1abca
--- /dev/null
+++ b/tests/xfs/1937.out
@@ -0,0 +1,102 @@ 
+QA output created by 1937
+Wrote 2048.00Kb (value 0x2c)
+*** create FS version 2
+*** check FS
+*** mount FS
+*** verify FS
+ File: "."
+ Size: <DSIZE> Filetype: Directory
+ Mode: (0777/drwxrwxrwx) Uid: (3) Gid: (1)
+Device: <DEVICE> Inode: <INODE> Links: 4 
+
+ File: "./bigfile"
+ Size: 2097152 Filetype: Regular File
+ Mode: (0666/-rw-rw-rw-) Uid: (3) Gid: (0)
+Device: <DEVICE> Inode: <INODE> Links: 1 
+
+ File: "./block_device"
+ Size: 0 Filetype: Block Device
+ Mode: (0012/b-----x-w-) Uid: (3) Gid: (1)
+Device: <DEVICE> Inode: <INODE> Links: 1 Device type: 161,162
+
+ File: "./char_device"
+ Size: 0 Filetype: Character Device
+ Mode: (0345/c-wxr--r-x) Uid: (3) Gid: (1)
+Device: <DEVICE> Inode: <INODE> Links: 1 Device type: 177,178
+
+ File: "./directory"
+ Size: <DSIZE> Filetype: Directory
+ Mode: (0755/drwxr-xr-x) Uid: (3) Gid: (1)
+Device: <DEVICE> Inode: <INODE> Links: 2 
+
+ File: "./directory/file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_0"
+ Size: 1348680 Filetype: Regular File
+ Mode: (0755/-rwxr-xr-x) Uid: (3) Gid: (1)
+Device: <DEVICE> Inode: <INODE> Links: 1 
+
+ File: "./directory/file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_1"
+ Size: 1348680 Filetype: Regular File
+ Mode: (0755/-rwxr-xr-x) Uid: (3) Gid: (1)
+Device: <DEVICE> Inode: <INODE> Links: 1 
+
+ File: "./directory/file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_2"
+ Size: 1348680 Filetype: Regular File
+ Mode: (0755/-rwxr-xr-x) Uid: (3) Gid: (1)
+Device: <DEVICE> Inode: <INODE> Links: 1 
+
+ File: "./directory/file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_3"
+ Size: 1348680 Filetype: Regular File
+ Mode: (0755/-rwxr-xr-x) Uid: (3) Gid: (1)
+Device: <DEVICE> Inode: <INODE> Links: 1 
+
+ File: "./directory/file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_4"
+ Size: 1348680 Filetype: Regular File
+ Mode: (0755/-rwxr-xr-x) Uid: (3) Gid: (1)
+Device: <DEVICE> Inode: <INODE> Links: 1 
+
+ File: "./directory/test"
+ Size: 1348680 Filetype: Regular File
+ Mode: (0755/-rwxr-xr-x) Uid: (3) Gid: (1)
+Device: <DEVICE> Inode: <INODE> Links: 1 
+
+ File: "./directory_setgid"
+ Size: <DSIZE> Filetype: Directory
+ Mode: (2755/drwxr-sr-x) Uid: (3) Gid: (2)
+Device: <DEVICE> Inode: <INODE> Links: 2 
+
+ File: "./directory_setgid/file_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_5"
+ Size: 1348680 Filetype: Regular File
+ Mode: (0755/-rwxr-xr-x) Uid: (3) Gid: (1)
+Device: <DEVICE> Inode: <INODE> Links: 1 
+
+ File: "./pipe"
+ Size: 0 Filetype: Fifo File
+ Mode: (0670/frw-rwx---) Uid: (0) Gid: (0)
+Device: <DEVICE> Inode: <INODE> Links: 1 
+
+ File: "./setgid"
+ Size: 1348680 Filetype: Regular File
+ Mode: (2666/-rw-rwsrw-) Uid: (0) Gid: (0)
+Device: <DEVICE> Inode: <INODE> Links: 1 
+
+ File: "./setugid"
+ Size: 1348680 Filetype: Regular File
+ Mode: (6666/-rwsrwsrw-) Uid: (0) Gid: (0)
+Device: <DEVICE> Inode: <INODE> Links: 1 
+
+ File: "./setuid"
+ Size: 1348680 Filetype: Regular File
+ Mode: (4666/-rwsrw-rw-) Uid: (0) Gid: (0)
+Device: <DEVICE> Inode: <INODE> Links: 1 
+
+ File: "./symlink"
+ Size: 7 Filetype: Symbolic Link
+ Mode: (0123/l--x-w--wx) Uid: (0) Gid: (0)
+Device: <DEVICE> Inode: <INODE> Links: 1 
+Attribute "userdata" has a 5 byte value for SCRATCH_MNT/directory/test
+Attribute "rootdata" has a 5 byte value for SCRATCH_MNT/directory/test
+Attribute "bigdata" has a 37960 byte value for SCRATCH_MNT/directory/test
+Attribute "acldata" has a 5 byte value for SCRATCH_MNT/directory/test
+*** unmount FS
+*** done
+*** unmount