From: Zorro Lang <zlang@redhat.com>
To: fstests@vger.kernel.org
Cc: linux-xfs@vger.kernel.org
Subject: [PATCH] xfs: project quota ineritance flag test
Date: Wed, 19 Jun 2019 18:10:47 +0800 [thread overview]
Message-ID: <20190619101047.3149-1-zlang@redhat.com> (raw)
This case is used to cover xfsprogs bug "b136f48b xfs_quota: fix
false error reporting of project inheritance flag is not set" at
first. Then test more behavior when project ineritance flag is
set or removed.
Signed-off-by: Zorro Lang <zlang@redhat.com>
---
tests/xfs/507 | 117 ++++++++++++++++++++++++++++++++++++++++++++++
tests/xfs/507.out | 23 +++++++++
tests/xfs/group | 1 +
3 files changed, 141 insertions(+)
create mode 100755 tests/xfs/507
create mode 100644 tests/xfs/507.out
diff --git a/tests/xfs/507 b/tests/xfs/507
new file mode 100755
index 00000000..509da03e
--- /dev/null
+++ b/tests/xfs/507
@@ -0,0 +1,117 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2019 Red Hat, Inc. All Rights Reserved.
+#
+# FS QA Test 507
+#
+# Test project quota inheritance flag, uncover xfsprogs:
+# b136f48b xfs_quota: fix false error reporting of project inheritance flag is not set
+#
+seq=`basename $0`
+seqres=$RESULT_DIR/$seq
+echo "QA output created by $seq"
+
+here=`pwd`
+tmp=/tmp/$$
+status=1 # failure is the default!
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+_cleanup()
+{
+ cd /
+ rm -f $tmp.*
+}
+
+# get standard environment, filters and checks
+. ./common/rc
+. ./common/filter
+. ./common/quota
+
+# remove previous $seqres.full before test
+rm -f $seqres.full
+
+# real QA test starts here
+_supported_fs xfs
+_supported_os Linux
+_require_scratch
+_require_xfs_quota
+
+cat >$tmp.projects <<EOF
+10:$SCRATCH_MNT/dir
+EOF
+
+cat >$tmp.projid <<EOF
+root:0
+test:10
+EOF
+
+QUOTA_CMD="$XFS_QUOTA_PROG -D $tmp.projects -P $tmp.projid"
+
+filter_xfs_pquota()
+{
+ perl -ne "
+s,$tmp.projects,[PROJECTS_FILE],;
+s,$SCRATCH_MNT,[SCR_MNT],;
+s,$SCRATCH_DEV,[SCR_DEV],;
+ print;"
+}
+
+do_quota_nospc()
+{
+ local file=$1
+ local exp=$2
+
+ echo "Write $file, expect $exp:" | _filter_scratch
+
+ # replace the "pwrite64" which old xfs_io prints
+ $XFS_IO_PROG -t -f -c "pwrite 0 5m" $file 2>&1 >/dev/null | \
+ sed -e 's/pwrite64/pwrite/g'
+ rm -f $file
+}
+
+_scratch_mkfs_xfs >>$seqres.full 2>&1
+_qmount_option "prjquota"
+_qmount
+_require_prjquota $SCRATCH_DEV
+
+mkdir $SCRATCH_MNT/dir
+$QUOTA_CMD -x -c 'project -s test' $SCRATCH_MNT >>$seqres.full 2>&1
+$QUOTA_CMD -x -c 'limit -p bsoft=1m bhard=2m test' $SCRATCH_MNT
+
+# test the Project inheritance bit is a directory only flag, and it's set on
+# directory by default
+echo "== The parent directory has Project inheritance bit by default =="
+touch $SCRATCH_MNT/dir/foo
+mkdir $SCRATCH_MNT/dir/dir_inherit
+touch $SCRATCH_MNT/dir/dir_inherit/foo
+$QUOTA_CMD -x -c 'project -c test' $SCRATCH_MNT | filter_xfs_pquota
+echo ""
+
+# test the quota and the project inheritance quota work well
+do_quota_nospc $SCRATCH_MNT/dir/foo ENOSPC
+do_quota_nospc $SCRATCH_MNT/dir/dir_inherit/foo ENOSPC
+echo ""
+
+# test the project quota won't be inherited, if removing the Project
+# inheritance bit
+echo "== After removing parent directory has Project inheritance bit =="
+$XFS_IO_PROG -x -c "chattr -P" $SCRATCH_MNT/dir
+touch $SCRATCH_MNT/dir/foo
+mkdir $SCRATCH_MNT/dir/dir_uninherit
+touch $SCRATCH_MNT/dir/dir_uninherit/foo
+$QUOTA_CMD -x -c 'project -c test' $SCRATCH_MNT | filter_xfs_pquota
+echo ""
+
+# after remove the Project inheritance bit of the original parent directory,
+# then verify:
+# 1) there's not any limit on the original parent directory and files under it
+# 2) the quota limit of sub-directory which has inherited still works
+# 3) there's not limit on the new sub-dirctory (not inherit from parent)
+do_quota_nospc $SCRATCH_MNT/dir/foo Success
+do_quota_nospc $SCRATCH_MNT/dir/dir_inherit/foo ENOSPC
+do_quota_nospc $SCRATCH_MNT/dir/dir_uninherit/foo Success
+
+_scratch_unmount
+# success, all done
+status=0
+exit
diff --git a/tests/xfs/507.out b/tests/xfs/507.out
new file mode 100644
index 00000000..c8c09d3f
--- /dev/null
+++ b/tests/xfs/507.out
@@ -0,0 +1,23 @@
+QA output created by 507
+== The parent directory has Project inheritance bit by default ==
+Checking project test (path [SCR_MNT]/dir)...
+Processed 1 ([PROJECTS_FILE] and cmdline) paths for project test with recursion depth infinite (-1).
+
+Write SCRATCH_MNT/dir/foo, expect ENOSPC:
+pwrite: No space left on device
+Write SCRATCH_MNT/dir/dir_inherit/foo, expect ENOSPC:
+pwrite: No space left on device
+
+== After removing parent directory has Project inheritance bit ==
+Checking project test (path [SCR_MNT]/dir)...
+[SCR_MNT]/dir - project inheritance flag is not set
+[SCR_MNT]/dir/foo - project identifier is not set (inode=0, tree=10)
+[SCR_MNT]/dir/dir_uninherit - project identifier is not set (inode=0, tree=10)
+[SCR_MNT]/dir/dir_uninherit - project inheritance flag is not set
+[SCR_MNT]/dir/dir_uninherit/foo - project identifier is not set (inode=0, tree=10)
+Processed 1 ([PROJECTS_FILE] and cmdline) paths for project test with recursion depth infinite (-1).
+
+Write SCRATCH_MNT/dir/foo, expect Success:
+Write SCRATCH_MNT/dir/dir_inherit/foo, expect ENOSPC:
+pwrite: No space left on device
+Write SCRATCH_MNT/dir/dir_uninherit/foo, expect Success:
diff --git a/tests/xfs/group b/tests/xfs/group
index ffe4ae12..46200752 100644
--- a/tests/xfs/group
+++ b/tests/xfs/group
@@ -504,3 +504,4 @@
504 auto quick mkfs label
505 auto quick spaceman
506 auto quick health
+507 auto quick quota
--
2.17.2
next reply other threads:[~2019-06-19 10:10 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-06-19 10:10 Zorro Lang [this message]
2019-06-28 7:04 ` [PATCH] xfs: project quota ineritance flag test Eryu Guan
2019-07-11 14:35 ` Darrick J. Wong
2019-07-11 15:38 ` Zorro Lang
2019-07-12 1:51 ` Darrick J. Wong
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190619101047.3149-1-zlang@redhat.com \
--to=zlang@redhat.com \
--cc=fstests@vger.kernel.org \
--cc=linux-xfs@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.