| #! /bin/bash |
| # FS QA Test No. 015 |
| # |
| # check out-of-space behaviour |
| # |
| #----------------------------------------------------------------------- |
| # Copyright (c) 2000-2002 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 |
| # |
| #----------------------------------------------------------------------- |
| # |
| |
| seq=`basename $0` |
| seqres=$RESULT_DIR/$seq |
| echo "QA output created by $seq" |
| |
| here=`pwd` |
| tmp=/tmp/$$ |
| status=1 # success is the default! |
| |
| # get standard environment, filters and checks |
| . ./common/rc |
| . ./common/filter |
| |
| _cleanup() |
| { |
| _scratch_unmount |
| } |
| |
| trap "_cleanup; exit \$status" 0 1 2 3 15 |
| |
| _free() |
| { |
| _df_dir $SCRATCH_MNT | $AWK_PROG '{ print $5 }' |
| } |
| |
| # real QA test starts here |
| _supported_fs generic |
| _supported_os Linux |
| |
| _require_scratch |
| _require_no_large_scratch_dev |
| |
| # With filesystems less than 100mb btrfs is created in mixed mode |
| # which can lead to slight accounting errors of 1mb. Having the |
| # fs be at least 101 mb ensures those errors are within the error |
| # tolerance of 1% |
| _scratch_mkfs_sized `expr 101 \* 1024 \* 1024` >/dev/null 2>&1 \ |
| || _fail "mkfs failed" |
| _scratch_mount |
| out=$SCRATCH_MNT/fillup.$$ |
| rm -f $seqres.full |
| |
| free0=`_free` |
| if [ -z "$free0" ] |
| then |
| echo " *** failed to get free space (0)" |
| exit 1 |
| fi |
| echo "free space at start $free0" >> $seqres.full |
| |
| echo "fill disk:" # well, filesystem really - not disk |
| |
| POSIXLY_CORRECT=yes dd if=/dev/zero of=$out bs=1024k 2>&1 | _filter_dd |
| |
| echo "check free space:" |
| |
| free1=`_free` |
| if [ -z "$free1" ] |
| then |
| echo " *** failed to get free space (1)" |
| exit 1 |
| fi |
| echo "free space after fill $free1" >> $seqres.full |
| |
| if [ ! -e $out ] |
| then |
| echo " *** file not created" |
| exit 1 |
| fi |
| |
| if [ ! -s $out ] |
| then |
| echo " *** file created with zero length" |
| ls -l $out |
| exit 1 |
| fi |
| |
| echo "delete fill:" |
| |
| if ! rm $out |
| then |
| echo " *** file not deleted" |
| exit 1 |
| fi |
| |
| if [ -e $out ] |
| then |
| echo " *** file still exists" |
| ls -l $out |
| exit 1 |
| fi |
| |
| echo "check free space:" |
| |
| sync |
| |
| free2=`_free` |
| if [ -z "$free2" ] |
| then |
| echo " *** failed to get free space (2)" |
| exit 1 |
| fi |
| echo "free space after delete $free2" >> $seqres.full |
| |
| echo -n " !!! " |
| _within_tolerance "free space" $free2 $free0 1% -v |
| |
| status=0 |
| exit |