ext4/001: Add ext4 specific test for fallocate zero range

This is based on xfs/242. However it's better to make it file system
specific because the range can be zeroes either directly by writing
zeroes, or converting to unwritten extent, so the actual result might
differ from file system to file system. Also xfs results differ
depending on the page size which is not the case for ext4.

Signed-off-by: Lukas Czerner <lczerner@redhat.com>
Reviewed-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
This commit is contained in:
Lukas Czerner
2014-03-13 15:20:00 +11:00
committed by Dave Chinner
parent f074613829
commit 4d46e476d4
3 changed files with 402 additions and 0 deletions
Executable
+64
View File
@@ -0,0 +1,64 @@
#! /bin/bash
# FS QA Test No. 001
#
# Test fallocate FALLOC_FL_ZERO_RANGE
#
#-----------------------------------------------------------------------
# Copyright 2014 (C) Red Hat, Inc., Lukas Czerner <lczerner@redhat.com>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it would be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
#-----------------------------------------------------------------------
#
seq=`basename $0`
seqres=$RESULT_DIR/$seq
echo "QA output created by $seq"
here=`pwd`
tmp=/tmp/$$
status=1 # failure is the default!
_cleanup()
{
rm -f $tmp.*
}
trap "_cleanup ; exit \$status" 0 1 2 3 15
# get standard environment, filters and checks
. ./common/rc
. ./common/filter
. ./common/punch
# real QA test starts here
_supported_fs ext4
_supported_os Linux
_require_xfs_io_falloc "fzero"
testfile=$TEST_DIR/001.$$
# Standard zero range tests
_test_generic_punch falloc fzero fzero fiemap _filter_fiemap $testfile
# Delayed allocation zero range tests
_test_generic_punch -d falloc fzero fzero fiemap _filter_fiemap $testfile
# Multi zero range tests
_test_generic_punch -k falloc fzero fzero fiemap _filter_fiemap $testfile
# Delayed allocation multi zero range tests
_test_generic_punch -d -k falloc fzero fzero fiemap _filter_fiemap $testfile
status=0 ; exit
+337
View File
@@ -0,0 +1,337 @@
QA output created by 001
1. into a hole
0: [0..7]: hole
1: [8..23]: unwritten
2: [24..39]: hole
daa100df6e6711906b61c9ab5aa16032
2. into allocated space
0: [0..7]: data
1: [8..23]: unwritten
2: [24..39]: data
cc58a7417c2d7763adc45b6fcd3fa024
3. into unwritten space
0: [0..39]: unwritten
daa100df6e6711906b61c9ab5aa16032
4. hole -> data
0: [0..7]: hole
1: [8..23]: unwritten
2: [24..31]: data
3: [32..39]: hole
cc63069677939f69a6e8f68cae6a6dac
5. hole -> unwritten
0: [0..7]: hole
1: [8..31]: unwritten
2: [32..39]: hole
daa100df6e6711906b61c9ab5aa16032
6. data -> hole
0: [0..7]: data
1: [8..23]: unwritten
2: [24..39]: hole
1b3779878366498b28c702ef88c4a773
7. data -> unwritten
0: [0..7]: data
1: [8..31]: unwritten
2: [32..39]: hole
1b3779878366498b28c702ef88c4a773
8. unwritten -> hole
0: [0..23]: unwritten
1: [24..39]: hole
daa100df6e6711906b61c9ab5aa16032
9. unwritten -> data
0: [0..23]: unwritten
1: [24..31]: data
2: [32..39]: hole
cc63069677939f69a6e8f68cae6a6dac
10. hole -> data -> hole
0: [0..7]: hole
1: [8..31]: unwritten
2: [32..39]: hole
daa100df6e6711906b61c9ab5aa16032
11. data -> hole -> data
0: [0..7]: data
1: [8..31]: unwritten
2: [32..39]: data
f6aeca13ec49e5b266cd1c913cd726e3
12. unwritten -> data -> unwritten
0: [0..7]: data
1: [8..31]: unwritten
2: [32..39]: data
daa100df6e6711906b61c9ab5aa16032
13. data -> unwritten -> data
0: [0..7]: data
1: [8..31]: unwritten
2: [32..39]: data
f6aeca13ec49e5b266cd1c913cd726e3
14. data -> hole @ EOF
0: [0..23]: data
1: [24..39]: unwritten
e1f024eedd27ea6b1c3e9b841c850404
15. data -> hole @ 0
0: [0..15]: unwritten
1: [16..39]: data
eecb7aa303d121835de05028751d301c
16. data -> cache cold ->hole
0: [0..15]: unwritten
1: [16..39]: data
eecb7aa303d121835de05028751d301c
17. data -> hole in single block file
0: [0..7]: data
0000000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
*
0000200 0000 0000 0000 0000 0000 0000 0000 0000
*
0000400 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
*
1. into a hole
0: [0..7]: hole
1: [8..23]: unwritten
2: [24..39]: hole
daa100df6e6711906b61c9ab5aa16032
2. into allocated space
0: [0..7]: data
1: [8..23]: unwritten
2: [24..39]: data
cc58a7417c2d7763adc45b6fcd3fa024
3. into unwritten space
0: [0..39]: unwritten
daa100df6e6711906b61c9ab5aa16032
4. hole -> data
0: [0..7]: hole
1: [8..23]: unwritten
2: [24..31]: data
3: [32..39]: hole
cc63069677939f69a6e8f68cae6a6dac
5. hole -> unwritten
0: [0..7]: hole
1: [8..31]: unwritten
2: [32..39]: hole
daa100df6e6711906b61c9ab5aa16032
6. data -> hole
0: [0..7]: data
1: [8..23]: unwritten
2: [24..39]: hole
1b3779878366498b28c702ef88c4a773
7. data -> unwritten
0: [0..7]: data
1: [8..31]: unwritten
2: [32..39]: hole
1b3779878366498b28c702ef88c4a773
8. unwritten -> hole
0: [0..23]: unwritten
1: [24..39]: hole
daa100df6e6711906b61c9ab5aa16032
9. unwritten -> data
0: [0..23]: unwritten
1: [24..31]: data
2: [32..39]: hole
cc63069677939f69a6e8f68cae6a6dac
10. hole -> data -> hole
0: [0..7]: hole
1: [8..31]: unwritten
2: [32..39]: hole
daa100df6e6711906b61c9ab5aa16032
11. data -> hole -> data
0: [0..7]: data
1: [8..31]: unwritten
2: [32..39]: data
f6aeca13ec49e5b266cd1c913cd726e3
12. unwritten -> data -> unwritten
0: [0..7]: data
1: [8..31]: unwritten
2: [32..39]: data
daa100df6e6711906b61c9ab5aa16032
13. data -> unwritten -> data
0: [0..7]: data
1: [8..31]: unwritten
2: [32..39]: data
f6aeca13ec49e5b266cd1c913cd726e3
14. data -> hole @ EOF
0: [0..23]: data
1: [24..39]: unwritten
e1f024eedd27ea6b1c3e9b841c850404
15. data -> hole @ 0
0: [0..15]: unwritten
1: [16..39]: data
eecb7aa303d121835de05028751d301c
16. data -> cache cold ->hole
0: [0..15]: unwritten
1: [16..39]: data
eecb7aa303d121835de05028751d301c
17. data -> hole in single block file
0: [0..7]: data
0000000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
*
0000200 0000 0000 0000 0000 0000 0000 0000 0000
*
0000400 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
*
1. into a hole
0: [0..7]: hole
1: [8..23]: unwritten
2: [24..39]: hole
daa100df6e6711906b61c9ab5aa16032
2. into allocated space
0: [0..7]: data
1: [8..23]: unwritten
2: [24..39]: data
cc58a7417c2d7763adc45b6fcd3fa024
3. into unwritten space
0: [0..7]: data
1: [8..23]: unwritten
2: [24..39]: data
cc58a7417c2d7763adc45b6fcd3fa024
4. hole -> data
0: [0..7]: data
1: [8..23]: unwritten
2: [24..39]: data
cc58a7417c2d7763adc45b6fcd3fa024
5. hole -> unwritten
0: [0..7]: data
1: [8..23]: unwritten
2: [24..39]: data
cc58a7417c2d7763adc45b6fcd3fa024
6. data -> hole
0: [0..7]: data
1: [8..23]: unwritten
2: [24..39]: data
cc58a7417c2d7763adc45b6fcd3fa024
7. data -> unwritten
0: [0..7]: data
1: [8..23]: unwritten
2: [24..39]: data
cc58a7417c2d7763adc45b6fcd3fa024
8. unwritten -> hole
0: [0..7]: data
1: [8..23]: unwritten
2: [24..39]: data
cc58a7417c2d7763adc45b6fcd3fa024
9. unwritten -> data
0: [0..7]: data
1: [8..23]: unwritten
2: [24..39]: data
cc58a7417c2d7763adc45b6fcd3fa024
10. hole -> data -> hole
0: [0..7]: data
1: [8..31]: unwritten
2: [32..39]: data
f6aeca13ec49e5b266cd1c913cd726e3
11. data -> hole -> data
0: [0..7]: data
1: [8..31]: unwritten
2: [32..39]: data
f6aeca13ec49e5b266cd1c913cd726e3
12. unwritten -> data -> unwritten
0: [0..7]: data
1: [8..31]: unwritten
2: [32..39]: data
f6aeca13ec49e5b266cd1c913cd726e3
13. data -> unwritten -> data
0: [0..7]: data
1: [8..31]: unwritten
2: [32..39]: data
f6aeca13ec49e5b266cd1c913cd726e3
14. data -> hole @ EOF
0: [0..23]: data
1: [24..39]: unwritten
e1f024eedd27ea6b1c3e9b841c850404
15. data -> hole @ 0
0: [0..15]: unwritten
1: [16..39]: data
eecb7aa303d121835de05028751d301c
16. data -> cache cold ->hole
0: [0..15]: unwritten
1: [16..39]: data
eecb7aa303d121835de05028751d301c
17. data -> hole in single block file
0: [0..7]: data
0000000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
*
0000200 0000 0000 0000 0000 0000 0000 0000 0000
*
0000400 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
*
1. into a hole
0: [0..7]: hole
1: [8..23]: unwritten
2: [24..39]: hole
daa100df6e6711906b61c9ab5aa16032
2. into allocated space
0: [0..7]: data
1: [8..23]: unwritten
2: [24..39]: data
cc58a7417c2d7763adc45b6fcd3fa024
3. into unwritten space
0: [0..7]: data
1: [8..23]: unwritten
2: [24..39]: data
cc58a7417c2d7763adc45b6fcd3fa024
4. hole -> data
0: [0..7]: data
1: [8..23]: unwritten
2: [24..39]: data
cc58a7417c2d7763adc45b6fcd3fa024
5. hole -> unwritten
0: [0..7]: data
1: [8..23]: unwritten
2: [24..39]: data
cc58a7417c2d7763adc45b6fcd3fa024
6. data -> hole
0: [0..7]: data
1: [8..23]: unwritten
2: [24..39]: data
cc58a7417c2d7763adc45b6fcd3fa024
7. data -> unwritten
0: [0..7]: data
1: [8..23]: unwritten
2: [24..39]: data
cc58a7417c2d7763adc45b6fcd3fa024
8. unwritten -> hole
0: [0..7]: data
1: [8..23]: unwritten
2: [24..39]: data
cc58a7417c2d7763adc45b6fcd3fa024
9. unwritten -> data
0: [0..7]: data
1: [8..23]: unwritten
2: [24..39]: data
cc58a7417c2d7763adc45b6fcd3fa024
10. hole -> data -> hole
0: [0..7]: data
1: [8..31]: unwritten
2: [32..39]: data
f6aeca13ec49e5b266cd1c913cd726e3
11. data -> hole -> data
0: [0..7]: data
1: [8..31]: unwritten
2: [32..39]: data
f6aeca13ec49e5b266cd1c913cd726e3
12. unwritten -> data -> unwritten
0: [0..7]: data
1: [8..31]: unwritten
2: [32..39]: data
f6aeca13ec49e5b266cd1c913cd726e3
13. data -> unwritten -> data
0: [0..7]: data
1: [8..31]: unwritten
2: [32..39]: data
f6aeca13ec49e5b266cd1c913cd726e3
14. data -> hole @ EOF
0: [0..23]: data
1: [24..39]: unwritten
e1f024eedd27ea6b1c3e9b841c850404
15. data -> hole @ 0
0: [0..15]: unwritten
1: [16..39]: data
eecb7aa303d121835de05028751d301c
16. data -> cache cold ->hole
0: [0..15]: unwritten
1: [16..39]: data
eecb7aa303d121835de05028751d301c
17. data -> hole in single block file
0: [0..7]: data
0000000 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
*
0000200 0000 0000 0000 0000 0000 0000 0000 0000
*
0000400 cdcd cdcd cdcd cdcd cdcd cdcd cdcd cdcd
*
+1
View File
@@ -3,6 +3,7 @@
# - do not start group names with a digit
# - comment line before each group is "new" description
#
001 auto prealloc quick
271 auto rw quick
301 aio dangerous ioctl rw stress
302 aio dangerous ioctl rw stress