tests: fix false dd conv=sparse failure on newer XFS

* tests/dd/sparse.sh: When testing that a hole is created,
use an existing sparse destination file, so that we're
not write extending the file size, and thus avoiding
speculative preallocation which can result in smaller
holes than requested.
Workaround suggested by Brian Foster
This commit is contained in:
Pádraig Brady
2014-04-11 23:44:13 +01:00
parent e9cb3eb6ce
commit 7c03fe2c9f
2 changed files with 9 additions and 1 deletions

View File

@@ -95,6 +95,7 @@ Bjorn Helgaas helgaas@rsn.hp.com
Bob McCracken kerouac@ravenet.com
Branden Robinson branden@necrotic.deadbeast.net
Brendan O'Dea bod@compusol.com.au
Brian Foster bfoster@redhat.com
Brian Kimball bfk@footbag.org
Brian M. Carlson sandals@crustytoothpaste.ath.cx
Brian Silverman bsilverman@conceptxdesign.com

View File

@@ -61,8 +61,15 @@ if test $(kb_alloc file.in) -gt 3000; then
dd if=file.in of=file.out bs=2M conv=sparse
test 2500 -lt $(kb_alloc file.out) || fail=1
# Note we recreate a sparse file first to avoid
# speculative preallocation seen in XFS, where a write() that
# extends a file can preallocate some extra space that
# a subsequent seek will not convert to a hole.
rm -f file.out
truncate --size=3M file.out
# Ensure that this 1MiB string of NULs *is* converted to a hole.
dd if=file.in of=file.out bs=1M conv=sparse
dd if=file.in of=file.out bs=1M conv=sparse,notrunc
test $(kb_alloc file.out) -lt 2500 || fail=1
fi