| #! /bin/bash |
| # SPDX-License-Identifier: GPL-2.0 |
| # Copyright (c) 2006 Silicon Graphics, Inc. All Rights Reserved. |
| # |
| # FS QA Test No. 384 |
| # |
| # test to reproduce PV951636: |
| # project quotas not updated if a file is mv'd into that directory |
| # |
| . ./common/preamble |
| _begin_fstest quota auto quick |
| |
| # Import common functions. |
| . ./common/filter |
| . ./common/quota |
| |
| # Override the default cleanup function. |
| _cleanup() |
| { |
| cd / |
| _scratch_unmount 2>/dev/null |
| rm -f $tmp.* |
| } |
| |
| |
| _require_test |
| _require_quota |
| _require_xfs_quota_foreign |
| _require_xfs_io_command "chproj" |
| |
| # we can't run with group quotas (on v4 xfs); the mount options for group |
| # quotas will be filtered out by _qmount_option below. |
| |
| dir=$SCRATCH_MNT/project |
| |
| #project quota files |
| cat >$tmp.projects <<EOF |
| 1:$dir |
| EOF |
| |
| cat >$tmp.projid <<EOF |
| test:1 |
| EOF |
| |
| cp /dev/null $seqres.full |
| chmod a+rwx $seqres.full # arbitrary users will write here |
| |
| _require_scratch |
| _scratch_mkfs >/dev/null 2>&1 |
| _scratch_enable_pquota |
| |
| _qmount_option "prjquota" |
| _qmount |
| _require_prjquota $SCRATCH_DEV |
| |
| report_quota() |
| { |
| $XFS_QUOTA_PROG -D $tmp.projects -P $tmp.projid -x \ |
| -c "repquota -inN -p" $SCRATCH_DEV | \ |
| tr -s '[:space:]' | _filter_project_quota |
| } |
| |
| mkdir $dir |
| $XFS_IO_PROG -r -c "chproj -R 1" -c "chattr -R +P" $dir |
| |
| $XFS_QUOTA_PROG -D $tmp.projects -P $tmp.projid -x \ |
| -c "limit -p bsoft=100m bhard=100m 1" $SCRATCH_DEV |
| report_quota |
| |
| touch $dir/1 |
| touch $dir/2 |
| cp $dir/2 $dir/3 |
| report_quota |
| |
| xfs_mkfile 1M $TEST_DIR/6 |
| |
| #try cp to dir |
| cp $TEST_DIR/6 $dir/6 |
| report_quota |
| |
| #try mv to dir |
| mv $TEST_DIR/6 $dir/7 |
| report_quota |
| |
| # success, all done |
| status=0 |
| exit |