On Wed, Aug 27, 2025 at 05:16:17PM +0200, Andrey Albershteyn wrote: > From: Andrey Albershteyn <aalbersh@xxxxxxxxxx> > > With addition of file_getattr() and file_setattr(), 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> I'm glad we can finally set the project ids on irregular files! Thanks for the functional test of the new syscalls. :) Reviewed-by: "Darrick J. Wong" <djwong@xxxxxxxxxx> --D > --- > tests/xfs/2000 | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ > tests/xfs/2000.out | 15 +++++++++++ > 2 files changed, 88 insertions(+) > > diff --git a/tests/xfs/2000 b/tests/xfs/2000 > new file mode 100755 > index 000000000000..7d45732bdbb7 > --- /dev/null > +++ b/tests/xfs/2000 > @@ -0,0 +1,73 @@ > +#! /bin/bash > +# SPDX-License-Identifier: GPL-2.0 > +# Copyright (c) 2024 Red Hat. All Rights Reserved. > +# > +# FS QA Test No. 2000 > +# > +# Test that XFS can set quota project ID on special files > +# > +. ./common/preamble > +_begin_fstest auto quota > + > +# Import common functions. > +. ./common/quota > +. ./common/filter > + > +# Modify as appropriate. > +_require_scratch > +_require_xfs_quota > +_require_test_program "af_unix" > +_require_test_program "file_attr" > +_require_symlinks > +_require_mknod > + > +_scratch_mkfs >>$seqres.full 2>&1 > +_qmount_option "pquota" > +_scratch_mount > + > +create_af_unix () { > + $here/src/af_unix $* || echo af_unix failed > +} > + > +filter_quota() { > + _filter_quota | sed "s~$tmp.projects~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.projects -P $tmp.projid -x \ > + -c "project -sp $projectdir $id" $SCRATCH_DEV | filter_quota > +$XFS_QUOTA_PROG -D $tmp.projects -P $tmp.projid -x \ > + -c "limit -p isoft=20 ihard=20 $id " $SCRATCH_DEV | filter_quota > +$XFS_QUOTA_PROG -D $tmp.projects -P $tmp.projid -x \ > + -c "project -cp $projectdir $id" $SCRATCH_DEV | filter_quota > +$XFS_QUOTA_PROG -D $tmp.projects -P $tmp.projid -x \ > + -c "report -inN -p" $SCRATCH_DEV | _filter_project_quota > +$XFS_QUOTA_PROG -D $tmp.projects -P $tmp.projid -x \ > + -c "project -Cp $projectdir $id" $SCRATCH_DEV | filter_quota > + > +# Let's check that we can recreate the project (flags were cleared out) > +$XFS_QUOTA_PROG -D $tmp.projects -P $tmp.projid -x \ > + -c "project -sp $projectdir $id" $SCRATCH_DEV | filter_quota > +$XFS_QUOTA_PROG -D $tmp.projects -P $tmp.projid -x \ > + -c "limit -p isoft=20 ihard=20 $id " $SCRATCH_DEV | filter_quota > +$XFS_QUOTA_PROG -D $tmp.projects -P $tmp.projid -x \ > + -c "report -inN -p" $SCRATCH_DEV | _filter_project_quota > +$XFS_QUOTA_PROG -D $tmp.projects -P $tmp.projid -x \ > + -c "project -Cp $projectdir $id" $SCRATCH_DEV | filter_quota > + > +# success, all done > +status=0 > +exit > diff --git a/tests/xfs/2000.out b/tests/xfs/2000.out > new file mode 100644 > index 000000000000..e53ceb959775 > --- /dev/null > +++ b/tests/xfs/2000.out > @@ -0,0 +1,15 @@ > +QA output created by 2000 > +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). > +#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). > +Setting up project 42 (path SCRATCH_MNT/prj)... > +Processed 1 (PROJECTS_FILE and cmdline) paths for project 42 with recursion depth infinite (-1). > +#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.49.0 > >