On 2025-08-12 01:46:13, Zorro Lang wrote: > On Fri, Aug 08, 2025 at 09:31:58PM +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> > > --- > > tests/xfs/2000 | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ > > tests/xfs/2000.out | 17 ++++++++++++ > > 2 files changed, 94 insertions(+) > > > > diff --git a/tests/xfs/2000 b/tests/xfs/2000 > > new file mode 100755 > > index 000000000000..26a0093c1da1 > > --- /dev/null > > +++ b/tests/xfs/2000 > > @@ -0,0 +1,77 @@ > > +#! /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 > > + > > +_wants_kernel_commit xxxxxxxxxxx \ > > + "xfs: allow setting file attributes on special files" > > +_wants_git_commit xfsprogs xxxxxxxxxxx \ > > + "xfs_quota: utilize file_setattr to set prjid on special files" > > + > > +# Modify as appropriate. > > +_require_scratch > > +_require_xfs_quota > > +_require_test_program "af_unix" > > +_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 > > +$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 > > +$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..dd3918f1376d > > --- /dev/null > > +++ b/tests/xfs/2000.out > > @@ -0,0 +1,17 @@ > > +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). > > +#0 3 0 0 00 [--------] > > Better to filter out the root quota report, it might fail on some test environments. > sure -- - Andrey