4 # Test XFS_IOC_ZERO_RANGE
6 #-----------------------------------------------------------------------
7 # Copyright (c) 2010 Red Hat. All Rights Reserved.
9 # This program is free software; you can redistribute it and/or
10 # modify it under the terms of the GNU General Public License as
11 # published by the Free Software Foundation.
13 # This program is distributed in the hope that it would be useful,
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 # GNU General Public License for more details.
18 # You should have received a copy of the GNU General Public License
19 # along with this program; if not, write the Free Software Foundation,
20 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
22 #-----------------------------------------------------------------------
25 owner=dchinner@redhat.com
28 echo "QA output created by $seq"
32 status=1 # failure is the default!
39 trap "_cleanup ; exit \$status" 0 1 2 3 15
41 # get standard environment, filters and checks
45 # real QA test starts here
51 $XFS_IO_PROG -c "zero help" 2>&1 | \
52 grep 'command "zero" not found' > /dev/null
56 [ $(_test_io_zero) -eq 0 ] && _notrun "zero command not supported"
66 awk '$3 ~ /hole/ { print $1, $2, $3; next }
67 $7 ~ /10000/ { print $1, $2, "unwritten"; next }
68 $7 ~ /00000/ {print $1, $2, "data" }'
71 # test the different corner cases for zeroing a range:
74 # 2. into allocated space
75 # 3. into unwritten space
77 # 5. hole -> unwritten
79 # 7. data -> unwritten
80 # 8. unwritten -> hole
81 # 9. unwritten -> data
82 # 10. hole -> data -> hole
83 # 11. data -> hole -> data
84 # 12. unwritten -> data -> unwritten
85 # 13. data -> unwritten -> data
87 testfile=$TEST_DIR/242.$$
89 echo " 1. into a hole"
91 $XFS_IO_PROG -f -c "truncate 20k" \
93 -c "bmap -vp" $testfile | _filter_bmap
94 [ $? -ne 0 ] && die_now
96 echo " 2. into allocated space"
98 $XFS_IO_PROG -f -c "truncate 20k" \
99 -c "pwrite 0 20k" -c "fsync" \
101 -c "bmap -vp" $testfile | _filter_bmap
102 [ $? -ne 0 ] && die_now
104 echo " 3. into unwritten space"
106 $XFS_IO_PROG -f -c "truncate 20k" \
109 -c "bmap -vp" $testfile | _filter_bmap
110 [ $? -ne 0 ] && die_now
112 echo " 4. hole -> data"
114 $XFS_IO_PROG -f -c "truncate 20k" \
115 -c "pwrite 8k 8k" -c "fsync" \
117 -c "bmap -vp" $testfile | _filter_bmap
118 [ $? -ne 0 ] && die_now
120 echo " 5. hole -> unwritten"
122 $XFS_IO_PROG -f -c "truncate 20k" \
125 -c "bmap -vp" $testfile | _filter_bmap
126 [ $? -ne 0 ] && die_now
128 echo " 6. data -> hole"
130 $XFS_IO_PROG -f -c "truncate 20k" \
131 -c "pwrite 0 8k" -c "fsync" \
133 -c "bmap -vp" $testfile | _filter_bmap
134 [ $? -ne 0 ] && die_now
136 echo " 7. data -> unwritten"
138 $XFS_IO_PROG -f -c "truncate 20k" \
139 -c "pwrite 0 8k" -c "fsync" \
142 -c "bmap -vp" $testfile | _filter_bmap
143 [ $? -ne 0 ] && die_now
145 echo " 8. unwritten -> hole"
147 $XFS_IO_PROG -f -c "truncate 20k" \
150 -c "bmap -vp" $testfile | _filter_bmap
151 [ $? -ne 0 ] && die_now
153 echo " 9. unwritten -> data"
155 $XFS_IO_PROG -f -c "truncate 20k" \
157 -c "pwrite 8k 8k" -c "fsync" \
159 -c "bmap -vp" $testfile | _filter_bmap
160 [ $? -ne 0 ] && die_now
162 echo " 10. hole -> data -> hole"
164 $XFS_IO_PROG -f -c "truncate 20k" \
165 -c "pwrite 8k 4k" -c "fsync" \
167 -c "bmap -vp" $testfile | _filter_bmap
168 [ $? -ne 0 ] && die_now
170 echo " 11. data -> hole -> data"
172 $XFS_IO_PROG -f -c "truncate 20k" \
175 -c "pwrite 12k 8k" -c "fsync" \
176 -c "unresvsp 8k 4k" \
178 -c "bmap -vp" $testfile | _filter_bmap
179 [ $? -ne 0 ] && die_now
181 echo " 12. unwritten -> data -> unwritten"
183 $XFS_IO_PROG -f -c "truncate 20k" \
185 -c "pwrite 8k 4k" -c "fsync" \
187 -c "bmap -vp" $testfile | _filter_bmap
188 [ $? -ne 0 ] && die_now
191 echo " 13. data -> unwritten -> data"
193 $XFS_IO_PROG -f -c "truncate 20k" \
195 -c "pwrite 0k 8k" -c "fsync" \
196 -c "pwrite 12k 8k" -c "fsync" \
198 -c "bmap -vp" $testfile | _filter_bmap
199 [ $? -ne 0 ] && die_now