From bbcb978f8bb973b737aa573809c4da8fe8e4453b Mon Sep 17 00:00:00 2001 From: Dave Chinner Date: Mon, 13 Apr 2009 15:55:41 +0200 Subject: [PATCH] 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 Signed-off-by: Christoph Hellwig --- 015 | 11 --------- 205 | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++ 205.out | 4 ++++ common.filter | 11 +++++++++ group | 1 + 5 files changed, 82 insertions(+), 11 deletions(-) create mode 100644 205 create mode 100644 205.out diff --git a/015 b/015 index 9b788370..f9997324 100755 --- a/015 +++ b/015 @@ -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 diff --git a/205 b/205 new file mode 100644 index 00000000..2a0b94ee --- /dev/null +++ b/205 @@ -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 diff --git a/205.out b/205.out new file mode 100644 index 00000000..cb6433c8 --- /dev/null +++ b/205.out @@ -0,0 +1,4 @@ +QA output created by 205 +*** one file +*** one file, a few bytes at a time +*** done diff --git a/common.filter b/common.filter index d1d4cb51..0e2d7ff2 100644 --- a/common.filter +++ b/common.filter @@ -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 diff --git a/group b/group index 72808480..0ac33c2b 100644 --- a/group +++ b/group @@ -309,3 +309,4 @@ atime 202 repair auto quick 203 ioctl auto 204 metadata rw auto +205 metadata rw auto -- 2.39.5