mirror of https://github.com/xemu-project/xemu.git
iotests: Disable 125 on broken XFS versions
And by that I mean all XFS versions, as far as I can tell. All details are in the comment below. We never noticed this problem because we only read the first number from qemu-img info's "disk size" output -- and that is effectively useless, because qemu-img prints a human-readable value (which generally includes a decimal point). That will be fixed in the next patch. Signed-off-by: Max Reitz <mreitz@redhat.com> Message-id: 20190925183231.11196-3-mreitz@redhat.com Reviewed-by: Eric Blake <eblake@redhat.com> Signed-off-by: Max Reitz <mreitz@redhat.com>
This commit is contained in:
parent
e6e8db0337
commit
285f595d74
|
@ -49,6 +49,46 @@ if [ -z "$TEST_IMG_FILE" ]; then
|
||||||
TEST_IMG_FILE=$TEST_IMG
|
TEST_IMG_FILE=$TEST_IMG
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Test whether we are running on a broken XFS version. There is this
|
||||||
|
# bug:
|
||||||
|
|
||||||
|
# $ rm -f foo
|
||||||
|
# $ touch foo
|
||||||
|
# $ block_size=4096 # Your FS's block size
|
||||||
|
# $ fallocate -o $((block_size / 2)) -l $block_size foo
|
||||||
|
# $ LANG=C xfs_bmap foo | grep hole
|
||||||
|
# 1: [8..15]: hole
|
||||||
|
#
|
||||||
|
# The problem is that the XFS driver rounds down the offset and
|
||||||
|
# rounds up the length to the block size, but independently. As
|
||||||
|
# such, it only allocates the first block in the example above,
|
||||||
|
# even though it should allocate the first two blocks (because our
|
||||||
|
# request is to fallocate something that touches both the first
|
||||||
|
# two blocks).
|
||||||
|
#
|
||||||
|
# This means that when you then write to the beginning of the
|
||||||
|
# second block, the disk usage of the first two blocks grows.
|
||||||
|
#
|
||||||
|
# That is precisely what fallocate() promises, though: That when you
|
||||||
|
# write to an area that you have fallocated, no new blocks will have
|
||||||
|
# to be allocated.
|
||||||
|
|
||||||
|
touch "$TEST_IMG_FILE"
|
||||||
|
# Assuming there is no FS with a block size greater than 64k
|
||||||
|
fallocate -o 65535 -l 2 "$TEST_IMG_FILE"
|
||||||
|
len0=$(get_image_size_on_host)
|
||||||
|
|
||||||
|
# Write to something that in theory we have just fallocated
|
||||||
|
# (Thus, the on-disk size should not increase)
|
||||||
|
poke_file "$TEST_IMG_FILE" 65536 42
|
||||||
|
len1=$(get_image_size_on_host)
|
||||||
|
|
||||||
|
if [ $len1 -gt $len0 ]; then
|
||||||
|
_notrun "the test filesystem's fallocate() is broken"
|
||||||
|
fi
|
||||||
|
|
||||||
|
rm -f "$TEST_IMG_FILE"
|
||||||
|
|
||||||
# Generally, we create some image with or without existing preallocation and
|
# Generally, we create some image with or without existing preallocation and
|
||||||
# then resize it. Then we write some data into the image and verify that its
|
# then resize it. Then we write some data into the image and verify that its
|
||||||
# size does not change if we have used preallocation.
|
# size does not change if we have used preallocation.
|
||||||
|
|
Loading…
Reference in New Issue