qemu-iotests: 024: add rebasing test case for overlay_size > backing_size
Before previous commit, rebase was getting infitely stuck in case of
rebasing within the same backing chain and when overlay_size > backing_size.
Let's add this case to the rebasing test 024 to make sure it doesn't
break again.
Signed-off-by: Andrey Drobyshev <andrey.drobyshev@virtuozzo.com>
Reviewed-by: Denis V. Lunev <den@openvz.org>
Reviewed-by: Hanna Czenczek <hreitz@redhat.com>
Message-ID: <20230919165804.439110-3-andrey.drobyshev@virtuozzo.com>
Reviewed-by: Kevin Wolf <kwolf@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
(cherry picked from commit 827171c318
)
Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
This commit is contained in:
parent
bd8d9c618a
commit
b7867c8262
@ -199,6 +199,63 @@ echo
|
||||
# $BASE_OLD and $BASE_NEW)
|
||||
$QEMU_IMG map "$OVERLAY" | _filter_qemu_img_map
|
||||
|
||||
# Check that rebase within the chain is working when
|
||||
# overlay_size > old_backing_size
|
||||
#
|
||||
# base_new <-- base_old <-- overlay
|
||||
#
|
||||
# Backing (new): 11 11 11 11 11
|
||||
# Backing (old): 22 22 22 22
|
||||
# Overlay: -- -- -- -- --
|
||||
#
|
||||
# As a result, overlay should contain data identical to base_old, with the
|
||||
# last cluster remaining unallocated.
|
||||
|
||||
echo
|
||||
echo "=== Test rebase within one backing chain ==="
|
||||
echo
|
||||
|
||||
echo "Creating backing chain"
|
||||
echo
|
||||
|
||||
TEST_IMG=$BASE_NEW _make_test_img $(( CLUSTER_SIZE * 5 ))
|
||||
TEST_IMG=$BASE_OLD _make_test_img -b "$BASE_NEW" -F $IMGFMT \
|
||||
$(( CLUSTER_SIZE * 4 ))
|
||||
TEST_IMG=$OVERLAY _make_test_img -b "$BASE_OLD" -F $IMGFMT \
|
||||
$(( CLUSTER_SIZE * 5 ))
|
||||
|
||||
echo
|
||||
echo "Fill backing files with data"
|
||||
echo
|
||||
|
||||
$QEMU_IO "$BASE_NEW" -c "write -P 0x11 0 $(( CLUSTER_SIZE * 5 ))" \
|
||||
| _filter_qemu_io
|
||||
$QEMU_IO "$BASE_OLD" -c "write -P 0x22 0 $(( CLUSTER_SIZE * 4 ))" \
|
||||
| _filter_qemu_io
|
||||
|
||||
echo
|
||||
echo "Check the last cluster is zeroed in overlay before the rebase"
|
||||
echo
|
||||
$QEMU_IO "$OVERLAY" -c "read -P 0x00 $(( CLUSTER_SIZE * 4 )) $CLUSTER_SIZE" \
|
||||
| _filter_qemu_io
|
||||
|
||||
echo
|
||||
echo "Rebase onto another image in the same chain"
|
||||
echo
|
||||
|
||||
$QEMU_IMG rebase -b "$BASE_NEW" -F $IMGFMT "$OVERLAY"
|
||||
|
||||
echo "Verify that data is read the same before and after rebase"
|
||||
echo
|
||||
|
||||
# Verify the first 4 clusters are still read the same as in the old base
|
||||
$QEMU_IO "$OVERLAY" -c "read -P 0x22 0 $(( CLUSTER_SIZE * 4 ))" \
|
||||
| _filter_qemu_io
|
||||
# Verify the last cluster still reads as zeroes
|
||||
$QEMU_IO "$OVERLAY" -c "read -P 0x00 $(( CLUSTER_SIZE * 4 )) $CLUSTER_SIZE" \
|
||||
| _filter_qemu_io
|
||||
|
||||
echo
|
||||
|
||||
# success, all done
|
||||
echo "*** done"
|
||||
|
@ -171,4 +171,34 @@ read 65536/65536 bytes at offset 196608
|
||||
Offset Length File
|
||||
0 0x30000 TEST_DIR/subdir/t.IMGFMT
|
||||
0x30000 0x10000 TEST_DIR/subdir/t.IMGFMT.base_new
|
||||
|
||||
=== Test rebase within one backing chain ===
|
||||
|
||||
Creating backing chain
|
||||
|
||||
Formatting 'TEST_DIR/subdir/t.IMGFMT.base_new', fmt=IMGFMT size=327680
|
||||
Formatting 'TEST_DIR/subdir/t.IMGFMT.base_old', fmt=IMGFMT size=262144 backing_file=TEST_DIR/subdir/t.IMGFMT.base_new backing_fmt=IMGFMT
|
||||
Formatting 'TEST_DIR/subdir/t.IMGFMT', fmt=IMGFMT size=327680 backing_file=TEST_DIR/subdir/t.IMGFMT.base_old backing_fmt=IMGFMT
|
||||
|
||||
Fill backing files with data
|
||||
|
||||
wrote 327680/327680 bytes at offset 0
|
||||
320 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
wrote 262144/262144 bytes at offset 0
|
||||
256 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
|
||||
Check the last cluster is zeroed in overlay before the rebase
|
||||
|
||||
read 65536/65536 bytes at offset 262144
|
||||
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
|
||||
Rebase onto another image in the same chain
|
||||
|
||||
Verify that data is read the same before and after rebase
|
||||
|
||||
read 262144/262144 bytes at offset 0
|
||||
256 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
read 65536/65536 bytes at offset 262144
|
||||
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
|
||||
*** done
|
||||
|
Loading…
Reference in New Issue
Block a user