| #! /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. |
| # |
| . ./common/preamble |
| _begin_fstest auto quick quota |
| |
| # Import common functions. |
| . ./common/filter |
| . ./common/quota |
| |
| _require_scratch |
| _require_setquota_project |
| # V4 XFS doesn't support to mount project and group quota together |
| if [ "$FSTYP" = "xfs" ];then |
| _require_scratch_xfs_crc |
| fi |
| _require_quota |
| |
| _scratch_mkfs >$seqres.full 2>&1 |
| _scratch_enable_pquota |
| _qmount_option "usrquota,grpquota,prjquota" |
| _qmount |
| _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 |