#! /bin/bash # FS QA Test 260 # # When default quota is set, all different quota types inherits the # same default value, include group quota. So if a user quota limit # larger than the default user quota value, it will still be limited # by the group default quota value. # # There's a patch from Upstream can fix this bug: # # [PATCH] xfs: Split default quota limits by quota type V4 # #----------------------------------------------------------------------- # Copyright (c) 2016 Red Hat, 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 #----------------------------------------------------------------------- # 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 xfs _supported_os Linux _require_scratch _require_quota _require_user _require_group do_test() { local qname=$1 local type if [ "$qname" = "user" ];then type="-u" echo "=== user quota test ===" elif [ "$qname" = "group" ];then type="-g" echo "=== group quota test ===" else echo "wrong quota type name - $qname" return 1 fi $XFS_QUOTA_PROG -x -c "limit bsoft=20M bhard=20M isoft=20 ihard=20 $type -d" $SCRATCH_MNT $XFS_QUOTA_PROG -x -c "limit bsoft=40M bhard=40M isoft=40 ihard=40 $type fsgqa" $SCRATCH_MNT echo "$qname blocks and inode limit" $XFS_QUOTA_PROG -x -c "report $type -N -bi" $SCRATCH_MNT | _filter_spaces ## blocks default quota test ## _user_do "$XFS_IO_PROG -f -c \"pwrite 0 30M\" -c \"fsync\" $SCRATCH_MNT/data" | _filter_xfs_io echo "$qname blocks quota after write 30M data" $XFS_QUOTA_PROG -x -c "report $type -N -b" $SCRATCH_MNT | _filter_spaces rm -f ${SCRATCH_MNT}/* >/dev/null 2>&1 ## inode default quota test ## for ((i=0; i<30; i++));do _user_do "echo -n > ${SCRATCH_MNT}/file${i}" done sync echo "$qname inode quota after creating 30 inodes" $XFS_QUOTA_PROG -x -c "report $type -N -i" $SCRATCH_MNT | _filter_spaces rm -f ${SCRATCH_MNT}/* >/dev/null 2>&1 } ### user default quota test ### _scratch_mkfs_xfs >/dev/null 2>&1 _qmount_option "uquota,gquota" _qmount do_test user ### group default quota test ### _scratch_unmount _scratch_mkfs_xfs >/dev/null 2>&1 _qmount_option "gquota,uquota" _qmount do_test group # success, all done status=0 exit