All of lore.kernel.org
 help / color / mirror / Atom feed
From: Eryu Guan <guaneryu@gmail.com>
To: Zorro Lang <zlang@redhat.com>
Cc: fstests@vger.kernel.org, linux-xfs@vger.kernel.org
Subject: Re: [PATCH v2] generic: per-type quota timers set/get test
Date: Sun, 22 Mar 2020 23:18:27 +0800	[thread overview]
Message-ID: <20200322151817.GF3128153@desktop> (raw)
In-Reply-To: <20200315133310.6455-1-zlang@redhat.com>

On Sun, Mar 15, 2020 at 09:33:10PM +0800, Zorro Lang wrote:
> Set different grace time, make sure each of quota (user, group and
> project) timers can be set (by setquota) and get (by repquota)
> correctly.
> 
> Signed-off-by: Zorro Lang <zlang@redhat.com>
> ---
> 
> V2 did below changes:
> 1) Filter default quota timer.
> 2) Try to merge the case from Darrick:
> https://marc.info/?l=fstests&m=158207247224104&w=2
> 
> Please review, feel free to tell me if anything wrong.
> 
> Thanks,
> Zorro
> 
>  tests/generic/594     | 104 ++++++++++++++++++++++++++++++++++++++++++
>  tests/generic/594.out |  50 ++++++++++++++++++++
>  tests/generic/group   |   1 +
>  3 files changed, 155 insertions(+)
>  create mode 100755 tests/generic/594
>  create mode 100644 tests/generic/594.out
> 
> diff --git a/tests/generic/594 b/tests/generic/594
> new file mode 100755
> index 00000000..fb71a57b
> --- /dev/null
> +++ b/tests/generic/594
> @@ -0,0 +1,104 @@
> +#! /bin/bash
> +# SPDX-License-Identifier: GPL-2.0
> +# Copyright (c) 2020 Red Hat, Inc.  All Rights Reserved.
> +#
> +# FS QA Test No. 594
> +#
> +# Test per-type(user, group and project) filesystem quota timers, make sure
> +# each of grace time can be set/get properly.
> +#
> +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 generic
> +_supported_os Linux
> +_require_scratch
> +_require_quota
> +
> +_scratch_mkfs >$seqres.full 2>&1
> +_scratch_enable_pquota
> +_qmount_option "usrquota,grpquota,prjquota"
> +_qmount

_qmount fails with 512 block size xfs, dmesg says:

[ 5946.077204] XFS (dm-5): Super block does not support project and group quota together

Seems we need to filter this case out?

Thanks,
Eryu

> +_require_prjquota $SCRATCH_DEV
> +
> +MIN=60
> +
> +# get default time at first
> +def_time=`repquota -u $SCRATCH_MNT | \
> +		sed -n -e "/^Block/s/.* time: \(.*\); .* time: \(.*\)/\1 \2/p"`
> +echo "Default block and inode grace timers are: $def_time" >> $seqres.full
> +
> +filter_repquota()
> +{
> +	local blocktime=$1
> +	local inodetime=$2
> +
> +	_filter_scratch | sed -e "s,$blocktime,DEF_TIME,g" \
> +			      -e "s,$inodetime,DEF_TIME,g"
> +}
> +
> +echo "1. set project quota timer"
> +setquota -t -P $((10 * MIN)) $((20 * MIN)) $SCRATCH_MNT
> +repquota -ugP $SCRATCH_MNT | grep "Report\|^Block" | filter_repquota $def_time
> +echo
> +
> +echo "2. set group quota timer"
> +setquota -t -g $((30 * MIN)) $((40 * MIN)) $SCRATCH_MNT
> +repquota -ugP $SCRATCH_MNT | grep "Report\|^Block" | filter_repquota $def_time
> +echo
> +
> +echo "3. set user quota timer"
> +setquota -t -u $((50 * MIN)) $((60 * MIN)) $SCRATCH_MNT
> +repquota -ugP $SCRATCH_MNT | grep "Report\|^Block" | filter_repquota $def_time
> +echo
> +
> +# cycle mount, make sure the quota timers are still right
> +echo "4. cycle mount test-1"
> +_qmount
> +repquota -ugP $SCRATCH_MNT | grep "Report\|^Block" | filter_repquota $def_time
> +echo
> +
> +# Run repair to force quota check
> +echo "5. fsck to force quota check"
> +_scratch_unmount
> +_repair_scratch_fs >> $seqres.full 2>&1
> +echo
> +
> +# Remount (this time to run quotacheck) and check the limits.  There's a bug
> +# in quotacheck where we would reset the ondisk default grace period to zero
> +# while the incore copy stays at whatever was read in prior to quotacheck.
> +# This will show up after the /next/ remount.
> +echo "6. cycle mount test-2"
> +_qmount
> +repquota -ugP $SCRATCH_MNT | grep "Report\|^Block" | filter_repquota $def_time
> +echo
> +
> +# Remount and check the limits
> +echo "7. cycle mount test-3"
> +_qmount
> +repquota -ugP $SCRATCH_MNT | grep "Report\|^Block" | filter_repquota $def_time
> +
> +# success, all done
> +status=0
> +exit
> diff --git a/tests/generic/594.out b/tests/generic/594.out
> new file mode 100644
> index 00000000..f25e0fac
> --- /dev/null
> +++ b/tests/generic/594.out
> @@ -0,0 +1,50 @@
> +QA output created by 594
> +1. set project quota timer
> +*** Report for user quotas on device SCRATCH_DEV
> +Block grace time: DEF_TIME; Inode grace time: DEF_TIME
> +*** Report for group quotas on device SCRATCH_DEV
> +Block grace time: DEF_TIME; Inode grace time: DEF_TIME
> +*** Report for project quotas on device SCRATCH_DEV
> +Block grace time: 00:10; Inode grace time: 00:20
> +
> +2. set group quota timer
> +*** Report for user quotas on device SCRATCH_DEV
> +Block grace time: DEF_TIME; Inode grace time: DEF_TIME
> +*** Report for group quotas on device SCRATCH_DEV
> +Block grace time: 00:30; Inode grace time: 00:40
> +*** Report for project quotas on device SCRATCH_DEV
> +Block grace time: 00:10; Inode grace time: 00:20
> +
> +3. set user quota timer
> +*** Report for user quotas on device SCRATCH_DEV
> +Block grace time: 00:50; Inode grace time: 01:00
> +*** Report for group quotas on device SCRATCH_DEV
> +Block grace time: 00:30; Inode grace time: 00:40
> +*** Report for project quotas on device SCRATCH_DEV
> +Block grace time: 00:10; Inode grace time: 00:20
> +
> +4. cycle mount test-1
> +*** Report for user quotas on device SCRATCH_DEV
> +Block grace time: 00:50; Inode grace time: 01:00
> +*** Report for group quotas on device SCRATCH_DEV
> +Block grace time: 00:30; Inode grace time: 00:40
> +*** Report for project quotas on device SCRATCH_DEV
> +Block grace time: 00:10; Inode grace time: 00:20
> +
> +5. fsck to force quota check
> +
> +6. cycle mount test-2
> +*** Report for user quotas on device SCRATCH_DEV
> +Block grace time: 00:50; Inode grace time: 01:00
> +*** Report for group quotas on device SCRATCH_DEV
> +Block grace time: 00:30; Inode grace time: 00:40
> +*** Report for project quotas on device SCRATCH_DEV
> +Block grace time: 00:10; Inode grace time: 00:20
> +
> +7. cycle mount test-3
> +*** Report for user quotas on device SCRATCH_DEV
> +Block grace time: 00:50; Inode grace time: 01:00
> +*** Report for group quotas on device SCRATCH_DEV
> +Block grace time: 00:30; Inode grace time: 00:40
> +*** Report for project quotas on device SCRATCH_DEV
> +Block grace time: 00:10; Inode grace time: 00:20
> diff --git a/tests/generic/group b/tests/generic/group
> index dc95b77b..a83f95cb 100644
> --- a/tests/generic/group
> +++ b/tests/generic/group
> @@ -595,3 +595,4 @@
>  591 auto quick rw pipe splice
>  592 auto quick encrypt
>  593 auto quick encrypt
> +594 auto quick quota
> -- 
> 2.20.1
> 

      reply	other threads:[~2020-03-22 15:18 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-03-15 13:33 [PATCH v2] generic: per-type quota timers set/get test Zorro Lang
2020-03-22 15:18 ` Eryu Guan [this message]

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=20200322151817.GF3128153@desktop \
    --to=guaneryu@gmail.com \
    --cc=fstests@vger.kernel.org \
    --cc=linux-xfs@vger.kernel.org \
    --cc=zlang@redhat.com \
    /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.