]> git.apps.os.sepia.ceph.com Git - xfstests-dev.git/commitdiff
xfstests: test 205, test writing to ENOSPC
authorDave Chinner <david@fromorbit.com>
Mon, 13 Apr 2009 13:55:41 +0000 (15:55 +0200)
committerChristoph Hellwig <hch@brick.lst.de>
Mon, 13 Apr 2009 13:55:41 +0000 (15:55 +0200)
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>
015
205 [new file with mode: 0644]
205.out [new file with mode: 0644]
common.filter
group

diff --git a/015 b/015
index 9b788370ae436b6dc5bedd38ca6b1f1fba52620a..f9997324fb25200fe0dfe3144b0eaec57de6270a 100755 (executable)
--- 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 (file)
index 0000000..2a0b94e
--- /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 (file)
index 0000000..cb6433c
--- /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
index d1d4cb5112a25215d3f566b4f946e31a74907352..0e2d7ff20d6c607fd3406eb0776f5ea4afc5f766 100644 (file)
@@ -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 72808480b1097dc5f9fe7af49d520fc621c9e881..0ac33c2b6b4fb2ff60bf5da6e3902d29ca746cad 100644 (file)
--- a/group
+++ b/group
@@ -309,3 +309,4 @@ atime
 202 repair auto quick
 203 ioctl auto
 204 metadata rw auto
+205 metadata rw auto