From 815637a2da137a36c710f9b7e446c13f12bfd2b6 Mon Sep 17 00:00:00 2001 From: Dave Chinner Date: Fri, 7 Jan 2011 23:59:15 +1100 Subject: [PATCH] xfsqa: make hole tests independent of speculative allocation patterns Many of the "count-the-holes" tests (008, 012, etc) do writes that extend the file and hence allocation patterns are dependent on speculative allocation beyond EOF behaviour. Hence if we change that behaviour, these tests all fail because there is a different pattern of holes. Make the tests independent of EOF preallocation behaviour by first truncating the file to the size the test is defined to use. This prevents speculative prealocation from occurring, and hence changes in such behaviour will not cause the tests to fail. Signed-off-by: Dave Chinner Reviewed-by: Christoph Hellwig --- 203 | 4 ++++ src/holes.c | 11 +++++++++++ src/randholes.c | 10 ++++++++++ 3 files changed, 25 insertions(+) diff --git a/203 b/203 index 6fae3614..be69dfab 100755 --- a/203 +++ b/203 @@ -36,6 +36,10 @@ _write_holes() file=$1 holes=$2 let writes=$holes+1 + let fsize=$(($writes * 0x100000)) + + # prevent EOF preallocation from affecting results + xfs_io -f $file -c "truncate $fsize" offset=0 for i in `seq 0 $writes`; do diff --git a/src/holes.c b/src/holes.c index 1ad5093e..3be8a664 100644 --- a/src/holes.c +++ b/src/holes.c @@ -79,6 +79,17 @@ main(int argc, char *argv[]) perror("open"); return 1; } + + /* + * Avoid allocation patterns being perturbed by different speculative + * preallocation beyond EOF configurations by first truncating the file + * to the expected maximum file size. + */ + if (ftruncate(fd, filesize) < 0) { + perror("ftruncate"); + exit(EXIT_FAILURE); + } + for (i = 0; i < count; i++) { writeblks(fd, filesize, blocksize, interleave, i, rev); } diff --git a/src/randholes.c b/src/randholes.c index b7c89b33..b43da81c 100644 --- a/src/randholes.c +++ b/src/randholes.c @@ -208,6 +208,16 @@ writeblks(char *fname, int fd, size_t alignment) memset(buffer, 0, blocksize); } + /* + * Avoid allocation patterns being perturbed by different speculative + * preallocation beyond EOF configurations by first truncating the file + * to the expected maximum file size. + */ + if (ftruncate(fd, filesize) < 0) { + perror("ftruncate"); + exit(EXIT_FAILURE); + } + do { if (verbose && ((count % 100) == 0)) { printf("."); -- 2.30.2