mirror of
https://github.com/linux-apfs/apfstests.git
synced 2026-05-01 15:01:44 -07:00
xfstests: test 205, test writing to ENOSPC
Use larger files and different writing styles to fill a 100MB filesystem to being full. In each case we should get very close to the filesystem being full before getting ENOSPC. This tests different types of ENOSPC failures to test 203 and requires more changes to pass. Signed-off-by: Dave Chinner <david@fromorbit.com> Signed-off-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
committed by
Christoph Hellwig
parent
143368a047
commit
bbcb978f8b
@@ -33,17 +33,6 @@ _free()
|
||||
_df_dir $SCRATCH_MNT | $AWK_PROG '{ print $5 }'
|
||||
}
|
||||
|
||||
_filter_dd()
|
||||
{
|
||||
$AWK_PROG '
|
||||
/records in/ { next }
|
||||
/records out/ { next }
|
||||
/No space left on device/ { print " !!! disk full (expected)"
|
||||
next }
|
||||
{ print " *** " $0 }
|
||||
'
|
||||
}
|
||||
|
||||
# real QA test starts here
|
||||
_supported_fs xfs
|
||||
_supported_os IRIX Linux
|
||||
|
||||
@@ -0,0 +1,66 @@
|
||||
#! /bin/sh
|
||||
# FS QA Test No. 203
|
||||
#
|
||||
# Test out ENOSPC flushiung on small filesystems.
|
||||
#
|
||||
#-----------------------------------------------------------------------
|
||||
# Copyright (c) 2009 Dave Chinner
|
||||
#-----------------------------------------------------------------------
|
||||
#
|
||||
# creator
|
||||
owner=david@fromorbit.com
|
||||
|
||||
seq=`basename $0`
|
||||
echo "QA output created by $seq"
|
||||
|
||||
here=`pwd`
|
||||
tmp=/tmp/$$
|
||||
status=1 # failure is the default!
|
||||
|
||||
# get standard environment, filters and checks
|
||||
. ./common.rc
|
||||
. ./common.filter
|
||||
|
||||
# real QA test starts here
|
||||
_supported_fs xfs
|
||||
_supported_os Linux
|
||||
|
||||
_require_scratch
|
||||
|
||||
_scratch_mkfs_xfs -d size=16m -b size=512 >/dev/null
|
||||
_scratch_mount
|
||||
|
||||
# on a 16MB filesystem, there's 32768x512byte blocks. used is:
|
||||
# - 4944 in the log,
|
||||
# - 32+1 for the root inode cluster
|
||||
# - 4 for the AG header
|
||||
# - 2 for free space btrees
|
||||
# - 4 for the AGFL
|
||||
# - min(%5, 1024) = 1024 blocks for the reserve pool
|
||||
# - about 15 blocks I can't account for right now.
|
||||
# That leaves ~26,745 blocks free to use.
|
||||
#
|
||||
# Writing the following three files fill the fs almost exactly.
|
||||
#
|
||||
# $ df -k /mnt/scratch
|
||||
# Filesystem 1K-blocks Used Available Use% Mounted on
|
||||
# /dev/ubdc 13912 13908 4 100% /mnt/scratch
|
||||
#
|
||||
dd if=/dev/zero of=$SCRATCH_MNT/fred bs=512 count=25000 2>&1 | _filter_dd
|
||||
dd if=/dev/zero of=$SCRATCH_MNT/fred2 bs=512 count=500 2>&1 | _filter_dd
|
||||
dd if=/dev/zero of=$SCRATCH_MNT/fred3 bs=512 count=245 2>&1 | _filter_dd
|
||||
rm -f $SCRATCH_MNT/fred*
|
||||
|
||||
echo "*** one file"
|
||||
# now try a single file of that size
|
||||
dd if=/dev/zero of=$SCRATCH_MNT/fred bs=512 count=26745 2>&1 | _filter_dd
|
||||
#rm -f $SCRATCH_MNT/fred*
|
||||
|
||||
echo "*** one file, a few bytes at a time"
|
||||
# now try a single file of that size
|
||||
dd if=/dev/zero of=$SCRATCH_MNT/fred bs=15 count=$[26745/15*512] 2>&1 | _filter_dd
|
||||
|
||||
# success, all done
|
||||
echo "*** done"
|
||||
rm -f $seq.full
|
||||
status=0
|
||||
@@ -0,0 +1,4 @@
|
||||
QA output created by 205
|
||||
*** one file
|
||||
*** one file, a few bytes at a time
|
||||
*** done
|
||||
@@ -167,5 +167,16 @@ _filter_growfs()
|
||||
}'
|
||||
}
|
||||
|
||||
_filter_dd()
|
||||
{
|
||||
$AWK_PROG '
|
||||
/records in/ { next }
|
||||
/records out/ { next }
|
||||
/No space left on device/ { print " !!! disk full (expected)"
|
||||
next }
|
||||
{ print " *** " $0 }
|
||||
'
|
||||
}
|
||||
|
||||
# make sure this script returns success
|
||||
/bin/true
|
||||
|
||||
Reference in New Issue
Block a user