On Mon, May 20, 2024 at 07:00:05PM +0200, Andrey Albershteyn wrote: > With addition of FS_IOC_FSSETXATTRAT xfs_quota now can set project > ID on filesystem inodes behind special files. Previously, quota > reporting didn't count inodes of special files created before > project initialization. Only new inodes had project ID set. > > Signed-off-by: Andrey Albershteyn <aalbersh@xxxxxxxxxx> > --- > > Notes: > This is part of the patchset which introduces > FS_IOC_FS[GET|SET]XATTRAT: > https://lore.kernel.org/linux-xfs/20240520164624.665269-2-aalbersh@xxxxxxxxxx/T/#t > https://lore.kernel.org/linux-xfs/20240520165200.667150-2-aalbersh@xxxxxxxxxx/T/#u > > tests/xfs/608 | 73 +++++++++++++++++++++++++++++++++++++++++++++++ > tests/xfs/608.out | 10 +++++++ > 2 files changed, 83 insertions(+) > create mode 100755 tests/xfs/608 > create mode 100644 tests/xfs/608.out > > diff --git a/tests/xfs/608 b/tests/xfs/608 > new file mode 100755 > index 000000000000..3573c764c5f4 > --- /dev/null > +++ b/tests/xfs/608 > @@ -0,0 +1,73 @@ > +#! /bin/bash > +# SPDX-License-Identifier: GPL-2.0 > +# Copyright (c) 2024 Red Hat. All Rights Reserved. > +# > +# FS QA Test 608 > +# > +# Test that XFS can set quota project ID on special files > +# > +. ./common/preamble > +_begin_fstest auto quota > + > +# Override the default cleanup function. > +_cleanup() > +{ > + cd / > + rm -r -f $tmp.* > + rm -f $tmp.proects $tmp.projid Not sure why this is "proects" (is that a misspelling of 'projects'?) but the rm above should take care of these, and then you don't need to redefine _cleanup. > +} > + > + > +# Import common functions. > +. ./common/quota > +. ./common/filter > + > +# Modify as appropriate. > +_supported_fs xfs > +_require_scratch > +_require_xfs_quota > +_require_user > + > +_scratch_mkfs >/dev/null 2>&1 Perhaps dump the output to $seqres.full? The rest looks ok to me; thank you for including a test with the new functionality! --D > +_qmount_option "pquota" > +_scratch_mount > +_require_test_program "af_unix" > +_require_symlinks > +_require_mknod > + > +function create_af_unix () { > + $here/src/af_unix $* || echo af_unix failed > +} > + > +function filter_quota() { > + _filter_quota | sed "s~$tmp.proects~PROJECTS_FILE~" > +} > + > +projectdir=$SCRATCH_MNT/prj > +id=42 > + > +mkdir $projectdir > +mkfifo $projectdir/fifo > +mknod $projectdir/chardev c 1 1 > +mknod $projectdir/blockdev b 1 1 > +create_af_unix $projectdir/socket > +touch $projectdir/foo > +ln -s $projectdir/foo $projectdir/symlink > +touch $projectdir/bar > +ln -s $projectdir/bar $projectdir/broken-symlink > +rm -f $projectdir/bar > + > +$XFS_QUOTA_PROG -D $tmp.proects -P $tmp.projid -x \ > + -c "project -sp $projectdir $id" $SCRATCH_DEV | filter_quota > +$XFS_QUOTA_PROG -D $tmp.proects -P $tmp.projid -x \ > + -c "limit -p isoft=20 ihard=20 $id " $SCRATCH_DEV | filter_quota > +$XFS_QUOTA_PROG -D $tmp.proects -P $tmp.projid -x \ > + -c "project -cp $projectdir $id" $SCRATCH_DEV | filter_quota > +$XFS_QUOTA_PROG -D $tmp.proects -P $tmp.projid -x \ > + -c "report -inN -p" $SCRATCH_DEV > +$XFS_QUOTA_PROG -D $tmp.proects -P $tmp.projid -x \ > + -c "project -Cp $projectdir $id" $SCRATCH_DEV | filter_quota > + > +# success, all done > +status=0 > +exit > diff --git a/tests/xfs/608.out b/tests/xfs/608.out > new file mode 100644 > index 000000000000..c3d56c3c7682 > --- /dev/null > +++ b/tests/xfs/608.out > @@ -0,0 +1,10 @@ > +QA output created by 608 > +Setting up project 42 (path SCRATCH_MNT/prj)... > +Processed 1 (PROJECTS_FILE and cmdline) paths for project 42 with recursion depth infinite (-1). > +Checking project 42 (path SCRATCH_MNT/prj)... > +Processed 1 (PROJECTS_FILE and cmdline) paths for project 42 with recursion depth infinite (-1). > +#0 3 0 0 00 [--------] > +#42 8 20 20 00 [--------] > + > +Clearing project 42 (path SCRATCH_MNT/prj)... > +Processed 1 (PROJECTS_FILE and cmdline) paths for project 42 with recursion depth infinite (-1). > -- > 2.42.0 > >