mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-08 02:03:56 -06:00
Block layer patches
-----BEGIN PGP SIGNATURE----- iQIcBAABAgAGBQJagxpPAAoJEH8JsnLIjy/WvR4P/2yD/Jt2WrT+z4hpVl9F9hHi D3bfIjh7Zue6HN1pMkRZ6kgi0CYS1wbFQDCLDXcN55DVZo1J6jqDZgWHvAeyigJw oAb/mvGCkgsavHuv1O4pRiF/e5Tkxh1Abu+r+3d1sNEaw+qfXcGNg1Rphtbn4fDE kVSUlWtyVG47oLV/ltI//dW+0ueu2CoCiWsVE/0B0DAX5TWEZ6IfeTR/cFeYnAf5 3LgOjMLnAN7XJWZ9znHGNLP0nuHLL3IWVJ8dEz+B7qIFVaftrIRdxqHynhsTWxsB u4+RgSaf2ebviI7m4obgaCtyQDSdmvJmrM7UGMRQWt0TXX4df/0ccBLFqgxwygAc QQ43wYInbj9HlZ8B/NzzuCGM9XzD2nGu9T5PxNbj9XjPQ7As2Itwrwwcw4rjIfrX zzRfTa8Z06Ro+QTNHg4FM7FPFqnKD9vDQkYkDy2L+fqBJKWYIL+wWT1znJsPlQLe maP4FeptPpgsP21HZoaJ1TtHvAuLckUa0nwZiYIFsZ+oNayzXvKHGcElC5HxFVNR KK2ERnFebXtXNSJxXN4M5WjGCykII71fCFYI8jJLy1MVcvZnOhB/xkfGpi9i6VNM lGDucPXCr0HwID2Sge9+2gwIa1K8okgn47S1KMhLK6zutmovFX/gd+zxk9WbDv/O s+hRru7oxLayS41h54PP =gwPJ -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/kevin/tags/for-upstream' into staging Block layer patches # gpg: Signature made Tue 13 Feb 2018 17:03:11 GMT # gpg: using RSA key 7F09B272C88F2FD6 # gpg: Good signature from "Kevin Wolf <kwolf@redhat.com>" # Primary key fingerprint: DC3D EB15 9A9A F95D 3D74 56FE 7F09 B272 C88F 2FD6 * remotes/kevin/tags/for-upstream: (55 commits) iotests: Add l2-cache-entry-size to iotest 137 iotests: Test downgrading an image using a small L2 slice size iotests: Test valid values of l2-cache-entry-size qcow2: Allow configuring the L2 slice size qcow2: Rename l2_table in count_cow_clusters() qcow2: Rename l2_table in count_contiguous_clusters_unallocated() qcow2: Rename l2_table in count_contiguous_clusters() qcow2: Rename l2_table in qcow2_alloc_compressed_cluster_offset() qcow2: Update qcow2_truncate() to support L2 slices qcow2: Update expand_zero_clusters_in_l1() to support L2 slices qcow2: Prepare expand_zero_clusters_in_l1() for adding L2 slice support qcow2: Read refcount before L2 table in expand_zero_clusters_in_l1() qcow2: Update qcow2_update_snapshot_refcount() to support L2 slices qcow2: Prepare qcow2_update_snapshot_refcount() for adding L2 slice support qcow2: Update zero_single_l2() to support L2 slices qcow2: Update discard_single_l2() to support L2 slices qcow2: Update handle_alloc() to support L2 slices qcow2: Update handle_copied() to support L2 slices qcow2: Update qcow2_alloc_cluster_link_l2() to support L2 slices qcow2: Update qcow2_get_cluster_offset() to support L2 slices ... Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
685a4eaf6d
27 changed files with 824 additions and 565 deletions
|
@ -2358,5 +2358,5 @@ Offset Length Mapped to File
|
|||
0x140000000 0x10000 0x50000 TEST_DIR/t-s003.vmdk
|
||||
|
||||
=== Testing afl image with a very large capacity ===
|
||||
qemu-img: Could not open 'TEST_DIR/afl9.IMGFMT': Could not open 'TEST_DIR/afl9.IMGFMT': Invalid argument
|
||||
qemu-img: Can't get image size 'TEST_DIR/afl9.IMGFMT': File too large
|
||||
*** done
|
||||
|
|
|
@ -53,6 +53,22 @@ $PYTHON qcow2.py "$TEST_IMG" dump-header
|
|||
$QEMU_IO -c "read -P 0 0 128k" "$TEST_IMG" | _filter_qemu_io
|
||||
_check_test_img
|
||||
|
||||
echo
|
||||
echo "=== Testing version downgrade with zero expansion and 4K cache entries ==="
|
||||
echo
|
||||
IMGOPTS="compat=1.1,lazy_refcounts=on" _make_test_img 64M
|
||||
$QEMU_IO -c "write -z 0 128k" "$TEST_IMG" | _filter_qemu_io
|
||||
$QEMU_IO -c "write -z 32M 128k" "$TEST_IMG" | _filter_qemu_io
|
||||
$QEMU_IO -c map "$TEST_IMG" | _filter_qemu_io
|
||||
$PYTHON qcow2.py "$TEST_IMG" dump-header
|
||||
$QEMU_IMG amend -o "compat=0.10" --image-opts \
|
||||
driver=qcow2,file.filename=$TEST_IMG,l2-cache-entry-size=4096
|
||||
$PYTHON qcow2.py "$TEST_IMG" dump-header
|
||||
$QEMU_IO -c "read -P 0 0 128k" "$TEST_IMG" | _filter_qemu_io
|
||||
$QEMU_IO -c "read -P 0 32M 128k" "$TEST_IMG" | _filter_qemu_io
|
||||
$QEMU_IO -c map "$TEST_IMG" | _filter_qemu_io
|
||||
_check_test_img
|
||||
|
||||
echo
|
||||
echo "=== Testing dirty version downgrade ==="
|
||||
echo
|
||||
|
|
|
@ -52,6 +52,67 @@ read 131072/131072 bytes at offset 0
|
|||
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
No errors were found on the image.
|
||||
|
||||
=== Testing version downgrade with zero expansion and 4K cache entries ===
|
||||
|
||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864
|
||||
wrote 131072/131072 bytes at offset 0
|
||||
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
wrote 131072/131072 bytes at offset 33554432
|
||||
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
128 KiB (0x20000) bytes allocated at offset 0 bytes (0x0)
|
||||
31.875 MiB (0x1fe0000) bytes not allocated at offset 128 KiB (0x20000)
|
||||
128 KiB (0x20000) bytes allocated at offset 32 MiB (0x2000000)
|
||||
31.875 MiB (0x1fe0000) bytes not allocated at offset 32.125 MiB (0x2020000)
|
||||
magic 0x514649fb
|
||||
version 3
|
||||
backing_file_offset 0x0
|
||||
backing_file_size 0x0
|
||||
cluster_bits 16
|
||||
size 67108864
|
||||
crypt_method 0
|
||||
l1_size 1
|
||||
l1_table_offset 0x30000
|
||||
refcount_table_offset 0x10000
|
||||
refcount_table_clusters 1
|
||||
nb_snapshots 0
|
||||
snapshot_offset 0x0
|
||||
incompatible_features 0x0
|
||||
compatible_features 0x1
|
||||
autoclear_features 0x0
|
||||
refcount_order 4
|
||||
header_length 104
|
||||
|
||||
Header extension:
|
||||
magic 0x6803f857
|
||||
length 144
|
||||
data <binary>
|
||||
|
||||
magic 0x514649fb
|
||||
version 2
|
||||
backing_file_offset 0x0
|
||||
backing_file_size 0x0
|
||||
cluster_bits 16
|
||||
size 67108864
|
||||
crypt_method 0
|
||||
l1_size 1
|
||||
l1_table_offset 0x30000
|
||||
refcount_table_offset 0x10000
|
||||
refcount_table_clusters 1
|
||||
nb_snapshots 0
|
||||
snapshot_offset 0x0
|
||||
incompatible_features 0x0
|
||||
compatible_features 0x0
|
||||
autoclear_features 0x0
|
||||
refcount_order 4
|
||||
header_length 72
|
||||
|
||||
read 131072/131072 bytes at offset 0
|
||||
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
read 131072/131072 bytes at offset 33554432
|
||||
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
64 MiB (0x4000000) bytes not allocated at offset 0 bytes (0x0)
|
||||
No errors were found on the image.
|
||||
|
||||
=== Testing dirty version downgrade ===
|
||||
|
||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=67108864
|
||||
|
|
|
@ -66,6 +66,14 @@ $QEMU_IO -c "open -o cache-size=1M,refcount-cache-size=2M $TEST_IMG" 2>&1 \
|
|||
$QEMU_IO -c "open -o cache-size=0,l2-cache-size=0,refcount-cache-size=0 $TEST_IMG" \
|
||||
2>&1 | _filter_testdir | _filter_imgfmt
|
||||
|
||||
# Invalid cache entry sizes
|
||||
$QEMU_IO -c "open -o l2-cache-entry-size=256 $TEST_IMG" \
|
||||
2>&1 | _filter_testdir | _filter_imgfmt
|
||||
$QEMU_IO -c "open -o l2-cache-entry-size=4242 $TEST_IMG" \
|
||||
2>&1 | _filter_testdir | _filter_imgfmt
|
||||
$QEMU_IO -c "open -o l2-cache-entry-size=128k $TEST_IMG" \
|
||||
2>&1 | _filter_testdir | _filter_imgfmt
|
||||
|
||||
echo
|
||||
echo '=== Testing valid option combinations ==='
|
||||
echo
|
||||
|
@ -94,6 +102,15 @@ $QEMU_IO -c "open -o l2-cache-size=1M,refcount-cache-size=0.25M $TEST_IMG" \
|
|||
-c 'read -P 42 0 64k' \
|
||||
| _filter_qemu_io
|
||||
|
||||
# Valid cache entry sizes
|
||||
$QEMU_IO -c "open -o l2-cache-entry-size=512 $TEST_IMG" \
|
||||
2>&1 | _filter_testdir | _filter_imgfmt
|
||||
$QEMU_IO -c "open -o l2-cache-entry-size=16k $TEST_IMG" \
|
||||
2>&1 | _filter_testdir | _filter_imgfmt
|
||||
$QEMU_IO -c "open -o l2-cache-entry-size=64k $TEST_IMG" \
|
||||
2>&1 | _filter_testdir | _filter_imgfmt
|
||||
|
||||
|
||||
echo
|
||||
echo '=== Testing minimal L2 cache and COW ==='
|
||||
echo
|
||||
|
|
|
@ -9,6 +9,9 @@ can't open device TEST_DIR/t.IMGFMT: cache-size, l2-cache-size and refcount-cach
|
|||
can't open device TEST_DIR/t.IMGFMT: l2-cache-size may not exceed cache-size
|
||||
can't open device TEST_DIR/t.IMGFMT: refcount-cache-size may not exceed cache-size
|
||||
can't open device TEST_DIR/t.IMGFMT: cache-size, l2-cache-size and refcount-cache-size may not be set the same time
|
||||
can't open device TEST_DIR/t.IMGFMT: L2 cache entry size must be a power of two between 512 and the cluster size (65536)
|
||||
can't open device TEST_DIR/t.IMGFMT: L2 cache entry size must be a power of two between 512 and the cluster size (65536)
|
||||
can't open device TEST_DIR/t.IMGFMT: L2 cache entry size must be a power of two between 512 and the cluster size (65536)
|
||||
|
||||
=== Testing valid option combinations ===
|
||||
|
||||
|
|
|
@ -83,6 +83,9 @@ $QEMU_IO \
|
|||
-c "reopen -o overlap-check.inactive-l2=off" \
|
||||
-c "reopen -o cache-size=1M" \
|
||||
-c "reopen -o l2-cache-size=512k" \
|
||||
-c "reopen -o l2-cache-entry-size=512" \
|
||||
-c "reopen -o l2-cache-entry-size=4k" \
|
||||
-c "reopen -o l2-cache-entry-size=64k" \
|
||||
-c "reopen -o refcount-cache-size=128k" \
|
||||
-c "reopen -o cache-clean-interval=5" \
|
||||
-c "reopen -o cache-clean-interval=0" \
|
||||
|
@ -107,6 +110,8 @@ $QEMU_IO \
|
|||
-c "reopen -o cache-size=1M,l2-cache-size=2M" \
|
||||
-c "reopen -o cache-size=1M,refcount-cache-size=2M" \
|
||||
-c "reopen -o l2-cache-size=256T" \
|
||||
-c "reopen -o l2-cache-entry-size=33k" \
|
||||
-c "reopen -o l2-cache-entry-size=128k" \
|
||||
-c "reopen -o refcount-cache-size=256T" \
|
||||
-c "reopen -o overlap-check=constant,overlap-check.template=all" \
|
||||
-c "reopen -o overlap-check=blubb" \
|
||||
|
|
|
@ -20,6 +20,8 @@ cache-size, l2-cache-size and refcount-cache-size may not be set the same time
|
|||
l2-cache-size may not exceed cache-size
|
||||
refcount-cache-size may not exceed cache-size
|
||||
L2 cache size too big
|
||||
L2 cache entry size must be a power of two between 512 and the cluster size (65536)
|
||||
L2 cache entry size must be a power of two between 512 and the cluster size (65536)
|
||||
L2 cache size too big
|
||||
Conflicting values for qcow2 options 'overlap-check' ('constant') and 'overlap-check.template' ('all')
|
||||
Unsupported value 'blubb' for qcow2 option 'overlap-check'. Allowed are any of the following: none, constant, cached, all
|
||||
|
|
|
@ -64,7 +64,7 @@ class BaseClass(iotests.QMPTestCase):
|
|||
'file': {'driver': 'file',
|
||||
'filename': source_img}}
|
||||
self.vm.add_blockdev(self.qmp_to_opts(blockdev))
|
||||
self.vm.add_device('floppy,id=qdev0,drive=source')
|
||||
self.vm.add_device('virtio-blk,id=qdev0,drive=source')
|
||||
self.vm.launch()
|
||||
|
||||
self.assertIntactSourceBackingChain()
|
||||
|
@ -173,21 +173,24 @@ class MirrorBaseClass(BaseClass):
|
|||
def testFull(self):
|
||||
self.runMirror('full')
|
||||
|
||||
node = self.findBlockNode('target', 'qdev0')
|
||||
node = self.findBlockNode('target',
|
||||
'/machine/peripheral/qdev0/virtio-backend')
|
||||
self.assertCorrectBackingImage(node, None)
|
||||
self.assertIntactSourceBackingChain()
|
||||
|
||||
def testTop(self):
|
||||
self.runMirror('top')
|
||||
|
||||
node = self.findBlockNode('target', 'qdev0')
|
||||
node = self.findBlockNode('target',
|
||||
'/machine/peripheral/qdev0/virtio-backend')
|
||||
self.assertCorrectBackingImage(node, back2_img)
|
||||
self.assertIntactSourceBackingChain()
|
||||
|
||||
def testNone(self):
|
||||
self.runMirror('none')
|
||||
|
||||
node = self.findBlockNode('target', 'qdev0')
|
||||
node = self.findBlockNode('target',
|
||||
'/machine/peripheral/qdev0/virtio-backend')
|
||||
self.assertCorrectBackingImage(node, source_img)
|
||||
self.assertIntactSourceBackingChain()
|
||||
|
||||
|
@ -239,7 +242,8 @@ class TestCommit(BaseClass):
|
|||
|
||||
self.vm.event_wait('BLOCK_JOB_COMPLETED')
|
||||
|
||||
node = self.findBlockNode(None, 'qdev0')
|
||||
node = self.findBlockNode(None,
|
||||
'/machine/peripheral/qdev0/virtio-backend')
|
||||
self.assert_qmp(node, 'image' + '/backing-image' * 0 + '/filename',
|
||||
back1_img)
|
||||
self.assert_qmp(node, 'image' + '/backing-image' * 1 + '/filename',
|
||||
|
|
|
@ -64,7 +64,7 @@ class TestPersistentDirtyBitmap(iotests.QMPTestCase):
|
|||
|
||||
def qmpAddBitmap(self):
|
||||
self.vm.qmp('block-dirty-bitmap-add', node='drive0',
|
||||
name='bitmap0', persistent=True, autoload=True)
|
||||
name='bitmap0', persistent=True)
|
||||
|
||||
def test_persistent(self):
|
||||
self.vm = self.mkVm()
|
||||
|
|
|
@ -95,7 +95,7 @@ case $reason in
|
|||
"file": { "driver": "file", "filename": "$TEST_IMG" } } }
|
||||
{ "execute": "block-dirty-bitmap-add",
|
||||
"arguments": { "node": "drive0", "name": "bitmap0",
|
||||
"persistent": true, "autoload": true } }
|
||||
"persistent": true } }
|
||||
{ "execute": "quit" }
|
||||
EOF
|
||||
;;
|
||||
|
|
Binary file not shown.
Loading…
Add table
Add a link
Reference in a new issue