From: Jan Kara Date: Tue, 18 May 2010 23:00:21 +0000 (+0200) Subject: Add test of quota accounting using fsx X-Git-Tag: v1.1.0~162^2~5 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=d3714f7f760148a646684c9bc07f0eb5cd38880d;p=xfstests-dev.git Add test of quota accounting using fsx Run fsx (and also several fsx threads in parallel) and verify that quota accounting is correct after they finish. Signed-off-by: Jan Kara --- diff --git a/231 b/231 new file mode 100755 index 00000000..ebbe11e5 --- /dev/null +++ b/231 @@ -0,0 +1,141 @@ +#! /bin/bash +# FSQA Test No. 231 +# +# Run fsx with quotas enabled and verify accounted quotas in the end +# +# Derived from test 127 +#----------------------------------------------------------------------- +# Copyright (c) 2006 Silicon Graphics, Inc. All Rights Reserved. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it would be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# +#----------------------------------------------------------------------- +# +# creator +owner=jack@suse.cz + +seq=`basename $0` +echo "QA output created by $seq" + +here=`pwd` +tmp=/tmp/$$ +status=1 # failure is the default! +trap "rm -f $tmp.*; exit \$status" 0 1 2 3 15 + +# get standard environment, filters and checks +. ./common.rc +. ./common.filter +. ./common.quota + +FSX_FILE_SIZE=64000000 +FSX_ARGS="-q -l $FSX_FILE_SIZE -o 65536 -N 20000" + +filter_scratch() +{ + perl -ne " +s,$SCRATCH_MNT,[SCR_MNT],; +s,$SCRATCH_DEV,[SCR_DEV],; + print;" +} + +check_usage() +{ + quotaon -f -u -g $SCRATCH_MNT 2>/dev/null + repquota -u -g $SCRATCH_MNT | grep -v "^root" | filter_scratch \ + >$tmp.orig + quotacheck -u -g $SCRATCH_MNT 2>/dev/null + repquota -u -g $SCRATCH_MNT | grep -v "^root" | filter_scratch \ + >$tmp.checked + quotaon -u -g $SCRATCH_MNT 2>/dev/null + diff $tmp.orig $tmp.checked +} + +_fsx() +{ + tasks=$1 + echo "=== FSX Standard Mode, Memory Mapping, $tasks Tasks ===" + for (( i = 1; i <= $tasks; i++ )); do + SEED=$RANDOM + echo "ltp/fsx $FSX_ARGS -S $SEED $SCRATCH_MNT/fsx_file$i" >>$seq.full + su $qa_user -c "ltp/fsx $FSX_ARGS -S $SEED \ + $SCRATCH_MNT/fsx_file$i" >$tmp.output$i 2>&1 & + done + + for (( i = 1; i <= $tasks; i++ )); do + if ! wait %$i; then + cat $tmp.output$i | tee -a $seq.full + wait + return 1 + fi + $XFS_IO_PROG -F -c 'fsync' $SCRATCH_MNT/fsx_file$i + cat $tmp.output$i | tee -a $seq.full + done + return 0 +} + +# real QA test starts here +_supported_fs generic +_supported_os Linux +_require_scratch +_require_quota +_require_user +_need_to_be_root + +_scratch_mkfs >> $seq.full 2>&1 +_scratch_mount "-o usrquota,grpquota" +chmod 777 $SCRATCH_MNT +quotacheck -u -g $SCRATCH_MNT 2>/dev/null +quotaon -u -g $SCRATCH_MNT 2>/dev/null + +if ! _fsx 1; then + umount $SCRATCH_DEV 2>/dev/null + status=1 + exit +fi + +if ! check_usage; then + umount $SCRATCH_DEV 2>/dev/null + status=1 + exit +fi + +if ! _fsx 4; then + umount $SCRATCH_DEV 2>/dev/null + status=1 + exit +fi + +if ! check_usage; then + umount $SCRATCH_DEV 2>/dev/null + status=1 + exit +fi + +#flush cache after write +FSX_ARGS="-f $FSX_ARGS" +if ! _fsx 1; then + umount $SCRATCH_DEV 2>/dev/null + status=1 + exit +fi + +if ! check_usage; then + umount $SCRATCH_DEV 2>/dev/null + status=1 + exit +fi + +umount $SCRATCH_DEV 2>/dev/null +status=0 +exit diff --git a/231.out b/231.out new file mode 100644 index 00000000..2f2d0723 --- /dev/null +++ b/231.out @@ -0,0 +1,10 @@ +QA output created by 231 +=== FSX Standard Mode, Memory Mapping, 1 Tasks === +All operations completed A-OK! +=== FSX Standard Mode, Memory Mapping, 4 Tasks === +All operations completed A-OK! +All operations completed A-OK! +All operations completed A-OK! +All operations completed A-OK! +=== FSX Standard Mode, Memory Mapping, 1 Tasks === +All operations completed A-OK! diff --git a/group b/group index 441e0e96..6b59c696 100644 --- a/group +++ b/group @@ -344,3 +344,4 @@ deprecated 228 rw auto prealloc quick 229 auto rw 230 auto quota quick +231 auto quota