Test that fsync/sync force file size changes to disk.
[xfstests-dev.git] / 015
1 #! /bin/sh
2 # FS QA Test No. 015
3 #
4 # check out-of-space behaviour
5 #
6 #-----------------------------------------------------------------------
7 # Copyright (c) 2000-2002 Silicon Graphics, Inc.  All Rights Reserved.
8 #-----------------------------------------------------------------------
9 #
10 # creator
11 owner=dxm@sgi.com
12
13 seq=`basename $0`
14 echo "QA output created by $seq"
15
16 here=`pwd`
17 tmp=/tmp/$$
18 status=1        # success is the default!
19
20 # get standard environment, filters and checks
21 . ./common.rc
22 . ./common.filter
23
24 _cleanup()
25 {
26         umount $SCRATCH_MNT
27 }
28
29 trap "_cleanup; exit \$status" 0 1 2 3 15
30
31 _free()
32 {
33     _df_dir $SCRATCH_MNT | $AWK_PROG '{ print $5 }'
34 }
35
36 _filter_dd()
37 {
38     $AWK_PROG '
39         /records in/                { next }
40         /records out/               { next }
41         /No space left on device/   { print "   !!! disk full (expected)" 
42                                       next }
43                                     { print "   *** " $0 }
44     '
45 }
46
47 # real QA test starts here
48 _supported_fs xfs
49 _supported_os IRIX Linux
50
51 _require_scratch
52 _require_nobigloopfs
53
54 _scratch_mkfs_xfs -d size=50m >/dev/null || _fail "mkfs failed"
55 _scratch_mount || _fail "mount failed"
56 out=$SCRATCH_MNT/fillup.$$
57 rm -f $seq.full
58
59 free0=`_free`
60 if [ -z "$free0" ]
61 then
62     echo "   *** failed to get free space (0)"
63     exit 1
64 fi
65 echo "free space at start $free0" >> $seq.full
66
67 echo "fill disk:"       # well, filesystem really - not disk
68
69 POSIXLY_CORRECT=yes dd if=/dev/zero of=$out bs=1024k 2>&1 | _filter_dd
70
71 echo "check free space:"
72
73 free1=`_free`
74 if [ -z "$free1" ]
75 then
76     echo "   *** failed to get free space (1)"
77     exit 1
78 fi
79 echo "free space after fill $free1" >> $seq.full
80
81 if [ ! -e $out ]
82 then
83     echo "   *** file not created"
84     exit 1
85 fi
86
87 if [ ! -s $out ]
88 then
89     echo "   *** file created with zero length"
90     ls -l $out
91     exit 1
92 fi
93
94 echo "delete fill:"
95
96 if ! rm $out
97 then
98     echo "   *** file not deleted"
99     exit 1
100 fi
101
102 if [ -e $out ]
103 then
104     echo "   *** file still exists"
105     ls -l $out
106     exit 1
107 fi
108
109 echo "check free space:"
110
111 free2=`_free`
112 if [ -z "$free2" ]
113 then
114     echo "   *** failed to get free space (2)"
115     exit 1
116 fi
117 echo "free space after delete $free2" >> $seq.full
118
119 echo -n "   !!! "
120 _within_tolerance "free space" $free2 $free0 1% -v
121
122 status=0
123 exit