#
62a2b55e |
| 26-Mar-2018 |
Peter Maydell <peter.maydell@linaro.org> |
Merge remote-tracking branch 'remotes/kevin/tags/for-upstream' into staging
Block layer patches
# gpg: Signature made Mon 26 Mar 2018 15:33:01 BST # gpg: using RSA key 7F09B272C88F2F
Merge remote-tracking branch 'remotes/kevin/tags/for-upstream' into staging
Block layer patches
# gpg: Signature made Mon 26 Mar 2018 15:33:01 BST # 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: qemu-iotests: Test vhdx image creation with QMP vhdx: Check for 4 GB maximum log size on creation vhdx: Don't use error_setg_errno() with constant errno vhdx: Require power-of-two block size on create qemu-iotests: Test parallels image creation with QMP parallels: Check maximum cluster size on create qemu-iotests: Test invalid resize on luks luks: Turn another invalid assertion into check qemu-iotests: Enable 025 for luks qemu-iotests: Test vdi image creation with QMP vdi: Fix build with CONFIG_VDI_DEBUG vdi: Change 'static' create option to 'preallocation' in QMP qcow2: Reset free_cluster_index when allocating a new refcount block include/block/block_int: Document protocol related functions block/blkreplay: Remove protocol-related fields block/throttle: Remove protocol-related fields block/quorum: Remove protocol-related fields block/replication: Remove protocol_name field iotests: 163 is not quick
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
show more ...
|
#
abf754fe |
| 21-Mar-2018 |
Alberto Garcia <berto@igalia.com> |
qcow2: Reset free_cluster_index when allocating a new refcount block
When we try to allocate new clusters we first look for available ones starting from s->free_cluster_index and once we find them w
qcow2: Reset free_cluster_index when allocating a new refcount block
When we try to allocate new clusters we first look for available ones starting from s->free_cluster_index and once we find them we increase their reference counts. Before we get to call update_refcount() to do this last step s->free_cluster_index is already pointing to the next cluster after the ones we are trying to allocate.
During update_refcount() it may happen however that we also need to allocate a new refcount block in order to store the refcounts of these new clusters (and to complicate things further that may also require us to grow the refcount table). After all this we don't know if the clusters that we originally tried to allocate are still available, so we return -EAGAIN to ask the caller to restart the search for free clusters.
This is what can happen in a common scenario:
1) We want to allocate a new cluster and we see that cluster N is free.
2) We try to increase N's refcount but all refcount blocks are full, so we allocate a new one at N+1 (where s->free_cluster_index was pointing at).
3) Once we're done we return -EAGAIN to look again for a free cluster, but now s->free_cluster_index points at N+2, so that's the one we allocate. Cluster N remains unallocated and we have a hole in the qcow2 file.
This can be reproduced easily:
qemu-img create -f qcow2 -o cluster_size=512 hd.qcow2 1M qemu-io -c 'write 0 124k' hd.qcow2
After this the image has 132608 bytes (256 clusters), and the refcount block is full. If we write 512 more bytes it should allocate two new clusters: the data cluster itself and a new refcount block.
qemu-io -c 'write 124k 512' hd.qcow2
However the image has now three new clusters (259 in total), and the first one of them is empty (and unallocated):
dd if=hd.qcow2 bs=512c skip=256 count=1 | hexdump -C
If we write larger amounts of data in the last step instead of the 512 bytes used in this example we can create larger holes in the qcow2 file.
What this patch does is reset s->free_cluster_index to its previous value when alloc_refcount_block() returns -EAGAIN. This way the caller will try to allocate again the original clusters if they are still free.
The output of iotest 026 also needs to be updated because now that images have no holes some tests fail at a different point and the number of leaked clusters is different.
Signed-off-by: Alberto Garcia <berto@igalia.com> Reviewed-by: Eric Blake <eblake@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
show more ...
|
#
ba9cef7b |
| 11-Sep-2015 |
Peter Maydell <peter.maydell@linaro.org> |
Merge remote-tracking branch 'remotes/mjt/tags/pull-trivial-patches-2015-09-11' into staging
trivial patches for 2015-09-11
# gpg: Signature made Fri 11 Sep 2015 12:02:43 BST using RSA key ID A4C3D
Merge remote-tracking branch 'remotes/mjt/tags/pull-trivial-patches-2015-09-11' into staging
trivial patches for 2015-09-11
# gpg: Signature made Fri 11 Sep 2015 12:02:43 BST using RSA key ID A4C3D7DB # gpg: Good signature from "Michael Tokarev <mjt@tls.msk.ru>" # gpg: aka "Michael Tokarev <mjt@corpit.ru>" # gpg: aka "Michael Tokarev <mjt@debian.org>"
* remotes/mjt/tags/pull-trivial-patches-2015-09-11: (26 commits) virtio-vga: enable for i386 hw/arm/spitz: Remove meaningless blank Property hw/gpio/zaurus: Remove meaningless blank Property hw/virtio/virtio-pci: Remove meaningless blank Property hw/s390x/s390-virtio-bus: Remove meaningless blank Property typofixes - v4 qapi-schema: remove legacy<> from doc disas/microblaze: Remove unused code help: dd missing newline Target-ppc: Remove unnecessary variable baum: Fix build with debugging enabled linux-user: Fix warnings caused by missing 'static' attribute opts: produce valid command line in qemu_opts_print docs: fix a qga/qapi-schema.json comment trivial: remove trailing newline from error_report maint: avoid useless "if (foo) free(foo)" pattern maint: avoid useless "if (foo) free(foo)" pattern maint: remove unused include for strings.h maint: remove unused include for signal.h maint: remove unused include for dirent.h ...
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
show more ...
|
#
fe646693 |
| 07-Jul-2015 |
Kővágó, Zoltán <dirty.ice.hu@gmail.com> |
opts: produce valid command line in qemu_opts_print
This will let us print options in a format that the user would actually write it on the command line (foo=bar,baz=asd,etc=def), without prepending
opts: produce valid command line in qemu_opts_print
This will let us print options in a format that the user would actually write it on the command line (foo=bar,baz=asd,etc=def), without prepending a spurious comma at the beginning of the list, or quoting values unnecessarily. This patch provides the following changes: * write and id=, if the option has an id * do not print separator before the first element * do not quote string arguments * properly escape commas (,) for QEMU
Signed-off-by: Kővágó, Zoltán <DirtY.iCE.hu@gmail.com> Reviewed-by: Markus Armbruster <armbru@redhat.com> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com> Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
show more ...
|
#
3521f767 |
| 16-Mar-2015 |
Peter Maydell <peter.maydell@linaro.org> |
Merge remote-tracking branch 'remotes/kevin/tags/for-upstream' into staging
Block patches for 2.3-rc0
# gpg: Signature made Mon Mar 16 16:11:55 2015 GMT using RSA key ID C88F2FD6 # gpg: Good signat
Merge remote-tracking branch 'remotes/kevin/tags/for-upstream' into staging
Block patches for 2.3-rc0
# gpg: Signature made Mon Mar 16 16:11:55 2015 GMT using RSA key ID C88F2FD6 # gpg: Good signature from "Kevin Wolf <kwolf@redhat.com>"
* remotes/kevin/tags/for-upstream: block/vpc: remove disabled code from get_sector_offset block/vpc: rename footer->size -> footer->current_size block/vpc: make calculate_geometry spec conform vpc: Ignore geometry for large images block/vpc: optimize vpc_co_get_block_status block: Drop bdrv_find blockdev: Convert bdrv_find to blk_by_name migration: Convert bdrv_find to blk_by_name monitor: Convert bdrv_find to blk_by_name iotests: Test non-self-referential qcow2 refblocks iotests: Add tests for refcount table growth qcow2: Respect new_block in alloc_refcount_block() qemu-img: Avoid qerror_report_err() outside QMP handlers, again block: Fix block-set-write-threshold not to use funky error class block: Deprecate QCOW/QCOW2 encryption qemu-img: Fix convert, amend error messages for unknown options iotests: Update 051's reference output
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
show more ...
|
#
47aced50 |
| 16-Mar-2015 |
Kevin Wolf <kwolf@redhat.com> |
Merge remote-tracking branch 'mreitz/block' into queue-block
* mreitz/block: block/vpc: remove disabled code from get_sector_offset block/vpc: rename footer->size -> footer->current_size block
Merge remote-tracking branch 'mreitz/block' into queue-block
* mreitz/block: block/vpc: remove disabled code from get_sector_offset block/vpc: rename footer->size -> footer->current_size block/vpc: make calculate_geometry spec conform vpc: Ignore geometry for large images block/vpc: optimize vpc_co_get_block_status block: Drop bdrv_find blockdev: Convert bdrv_find to blk_by_name migration: Convert bdrv_find to blk_by_name monitor: Convert bdrv_find to blk_by_name iotests: Test non-self-referential qcow2 refblocks iotests: Add tests for refcount table growth qcow2: Respect new_block in alloc_refcount_block()
show more ...
|
#
0e8a3714 |
| 10-Feb-2015 |
Max Reitz <mreitz@redhat.com> |
iotests: Add tests for refcount table growth
Signed-off-by: Max Reitz <mreitz@redhat.com> Message-id: 1423598552-24301-3-git-send-email-mreitz@redhat.com Reviewed-by: Eric Blake <eblake@redhat.com>
iotests: Add tests for refcount table growth
Signed-off-by: Max Reitz <mreitz@redhat.com> Message-id: 1423598552-24301-3-git-send-email-mreitz@redhat.com Reviewed-by: Eric Blake <eblake@redhat.com> Reviewed-by: Kevin Wolf <kwolf@redhat.com> Signed-off-by: Max Reitz <mreitz@redhat.com>
show more ...
|