#! /bin/sh # FS QA Test No. 108 # # Simple quota accounting test for direct/buffered/mmap IO. # #----------------------------------------------------------------------- # Copyright (c) 2005 Silicon Graphics, Inc. All Rights Reserved. #----------------------------------------------------------------------- # # creator owner=nathans@sgi.com 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 filter_scratch() { perl -ne " s,$SCRATCH_MNT,[SCR_MNT],; s,$SCRATCH_DEV,[SCR_DEV],; print;" } # real QA test starts here _supported_fs xfs _supported_os Linux #IRIX _require_scratch _require_quota _require_prjquota test_files() { echo; echo "### create files, setting up ownership (type=$type)" rm -f $SCRATCH_MNT/{buffer,direct,mmap} $XFS_IO_PROG -fc "chproj $prid" $SCRATCH_MNT/{buffer,direct,mmap} chown $uid $SCRATCH_MNT/{buffer,direct,mmap} chgrp $gid $SCRATCH_MNT/{buffer,direct,mmap} for file in $SCRATCH_MNT/{buffer,direct,mmap}; do $here/src/lstat64 $file | head -3 | filter_scratch $XFS_IO_PROG -c lsproj $file done } test_accounting() { echo "### some controlled buffered, direct and mmapd IO (type=$type)" echo "--- initiating parallel IO..." >>$seq.full $XFS_IO_PROG -c 'pwrite -b 1m 0 16m' -c 'fsync' \ $SCRATCH_MNT/buffer >>$seq.full 2>&1 & $XFS_IO_PROG -c 'pwrite -b 1m 0 16m' -d \ $SCRATCH_MNT/direct >>$seq.full 2>&1 & $XFS_IO_PROG -c 't 16m' -c 'mm -rw 0 16m' -c 'mw 0 16m' -c 'ms -s' \ $SCRATCH_MNT/mmap >>$seq.full 2>&1 & wait echo "--- completed parallel IO ($type)" >>$seq.full for file in $SCRATCH_MNT/{buffer,direct,mmap}; do $here/src/lstat64 $file | head -3 | filter_scratch done xfs_quota -c "quota -hnb -$type $id" $QARGS | filter_scratch xfs_quota -c "quota -hni -$type $id" $QARGS | filter_scratch xfs_quota -c "quota -hnr -$type $id" $QARGS | filter_scratch } # real QA test starts here rm -f $tmp.projects $seq.full umount $SCRATCH_DEV 2>/dev/null _scratch_mkfs_xfs | _filter_mkfs 2>$tmp.mkfs cat $tmp.mkfs >>$seq.full _scratch_mount uid=1 gid=2 prid=3 export QARGS="-x -D /dev/null -P /dev/null $SCRATCH_MNT" umount $SCRATCH_DEV echo; echo "### test user accounting" export MOUNT_OPTIONS="-ouquota" _qmount type=u id=$uid test_files test_accounting umount $SCRATCH_DEV 2>/dev/null echo; echo "### test group accounting" export MOUNT_OPTIONS="-ogquota" _qmount type=g id=$gid test_files test_accounting umount $SCRATCH_DEV 2>/dev/null #echo; echo "### test project accounting" export MOUNT_OPTIONS="-opquota" _qmount type=p id=$prid test_files test_accounting umount $SCRATCH_DEV 2>/dev/null status=0 exit