Message ID | 1510654613-47868-2-git-send-email-anton.nefedov@virtuozzo.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 11/14/2017 04:16 AM, Anton Nefedov wrote: > Misaligned compressed write is not supported. > > Signed-off-by: Anton Nefedov <anton.nefedov@virtuozzo.com> > --- > block/qcow2.c | 4 ++++ > 1 file changed, 4 insertions(+) Should this one be applied in 2.11? Reviewed-by: Eric Blake <eblake@redhat.com> > > diff --git a/block/qcow2.c b/block/qcow2.c > index 92cb9f9..45c5651 100644 > --- a/block/qcow2.c > +++ b/block/qcow2.c > @@ -3349,6 +3349,10 @@ qcow2_co_pwritev_compressed(BlockDriverState *bs, uint64_t offset, > return bdrv_truncate(bs->file, cluster_offset, PREALLOC_MODE_OFF, NULL); > } > > + if (offset_into_cluster(s, offset)) { > + return -EINVAL; > + } > + > buf = qemu_blockalign(bs, s->cluster_size); > if (bytes != s->cluster_size) { > if (bytes > s->cluster_size || >
On 14/11/2017 7:50 PM, Eric Blake wrote: > On 11/14/2017 04:16 AM, Anton Nefedov wrote: >> Misaligned compressed write is not supported. >> >> Signed-off-by: Anton Nefedov <anton.nefedov@virtuozzo.com> >> --- >> block/qcow2.c | 4 ++++ >> 1 file changed, 4 insertions(+) > > Should this one be applied in 2.11? > For the record, this one is pretty hard to trigger; backup and qemu-img convert currently use compressed write, both make sure they operate in clusters. qemu-io is almighty though qemu-io> write -c -P 7 512 64k wrote 65536/65536 bytes at offset 512 64 KiB, 1 ops; 0.0187 sec (3.329 MiB/sec and 53.2566 ops/sec) qemu-io> read -P 7 512 64k Pattern verification failed at offset 512, 65536 bytes read 65536/65536 bytes at offset 512 64 KiB, 1 ops; 0.0002 sec (248.016 MiB/sec and 3968.2540 ops/sec) qemu-io> read -P 7 0 64k read 65536/65536 bytes at offset 0 64 KiB, 1 ops; 0.0000 sec (1.606 GiB/sec and 26315.7895 ops/sec) /Anton
On 11/14/2017 12:30 PM, Anton Nefedov wrote: > On 14/11/2017 7:50 PM, Eric Blake wrote: >> On 11/14/2017 04:16 AM, Anton Nefedov wrote: >>> Misaligned compressed write is not supported. >>> >>> Signed-off-by: Anton Nefedov <anton.nefedov@virtuozzo.com> >>> --- >>> block/qcow2.c | 4 ++++ >>> 1 file changed, 4 insertions(+) >> >> Should this one be applied in 2.11? >> > > For the record, this one is pretty hard to trigger; backup and qemu-img > convert currently use compressed write, both make sure they operate in > clusters. > > qemu-io is almighty though Okay, then we definitely have a bug, and this patch is definitely 2.11 material, especially if you update the commit message to show the trigger case: > > qemu-io> write -c -P 7 512 64k > wrote 65536/65536 bytes at offset 512 > 64 KiB, 1 ops; 0.0187 sec (3.329 MiB/sec and 53.2566 ops/sec) > qemu-io> read -P 7 512 64k > Pattern verification failed at offset 512, 65536 bytes > read 65536/65536 bytes at offset 512 > 64 KiB, 1 ops; 0.0002 sec (248.016 MiB/sec and 3968.2540 ops/sec) > qemu-io> read -P 7 0 64k > read 65536/65536 bytes at offset 0 > 64 KiB, 1 ops; 0.0000 sec (1.606 GiB/sec and 26315.7895 ops/sec) > > /Anton >
On 2017-11-14 11:16, Anton Nefedov wrote: > Misaligned compressed write is not supported. > > Signed-off-by: Anton Nefedov <anton.nefedov@virtuozzo.com> > --- > block/qcow2.c | 4 ++++ > 1 file changed, 4 insertions(+) Thanks, applied to my block branch for 2.11: https://github.com/XanClic/qemu/commits/block Max
diff --git a/block/qcow2.c b/block/qcow2.c index 92cb9f9..45c5651 100644 --- a/block/qcow2.c +++ b/block/qcow2.c @@ -3349,6 +3349,10 @@ qcow2_co_pwritev_compressed(BlockDriverState *bs, uint64_t offset, return bdrv_truncate(bs->file, cluster_offset, PREALLOC_MODE_OFF, NULL); } + if (offset_into_cluster(s, offset)) { + return -EINVAL; + } + buf = qemu_blockalign(bs, s->cluster_size); if (bytes != s->cluster_size) { if (bytes > s->cluster_size ||
Misaligned compressed write is not supported. Signed-off-by: Anton Nefedov <anton.nefedov@virtuozzo.com> --- block/qcow2.c | 4 ++++ 1 file changed, 4 insertions(+)