Message ID | fe47feb4fc96cf1242ba9e9431f910aef575cf16.1578596897.git.berto@igalia.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | qcow2: Misc BDRV_SECTOR_SIZE updates | expand |
On Thu 09 Jan 2020 08:13:01 PM CET, Alberto Garcia wrote: > - assert((cluster_offset & 511) == 0); > + assert(QEMU_IS_ALIGNED(cluster_offset, s->cluster_size)); On second thoughts this patch could also use the (probably more efficient) offset_into_cluster() call instead. I can resend it if you think it's a good idea. Berto
On 09.01.20 20:13, Alberto Garcia wrote: > qcow2_alloc_cluster_offset() and qcow2_get_cluster_offset() always > return offsets that are cluster-aligned so don't just check that they > are sector-aligned. > > The check in qcow2_co_preadv_task() is also replaced by an assertion > for the same reason. > > Signed-off-by: Alberto Garcia <berto@igalia.com> > --- > block/qcow2.c | 9 +++------ > 1 file changed, 3 insertions(+), 6 deletions(-) Reviewed-by: Max Reitz <mreitz@redhat.com>
On 10.01.20 13:14, Alberto Garcia wrote: > On Thu 09 Jan 2020 08:13:01 PM CET, Alberto Garcia wrote: >> - assert((cluster_offset & 511) == 0); >> + assert(QEMU_IS_ALIGNED(cluster_offset, s->cluster_size)); > > On second thoughts this patch could also use the (probably more > efficient) offset_into_cluster() call instead. > > I can resend it if you think it's a good idea. Either way works for me. (I don’t think it’s going to make any difference in practice, but of course, why not.) Max
diff --git a/block/qcow2.c b/block/qcow2.c index 848a6c5182..783d2b9578 100644 --- a/block/qcow2.c +++ b/block/qcow2.c @@ -2175,10 +2175,7 @@ static coroutine_fn int qcow2_co_preadv_task(BlockDriverState *bs, offset, bytes, qiov, qiov_offset); case QCOW2_CLUSTER_NORMAL: - if ((file_cluster_offset & 511) != 0) { - return -EIO; - } - + assert(QEMU_IS_ALIGNED(file_cluster_offset, s->cluster_size)); if (bs->encrypted) { return qcow2_co_preadv_encrypted(bs, file_cluster_offset, offset, bytes, qiov, qiov_offset); @@ -2514,7 +2511,7 @@ static coroutine_fn int qcow2_co_pwritev_part( goto out_locked; } - assert((cluster_offset & 511) == 0); + assert(QEMU_IS_ALIGNED(cluster_offset, s->cluster_size)); ret = qcow2_pre_write_overlap_check(bs, 0, cluster_offset + offset_in_cluster, @@ -3904,7 +3901,7 @@ qcow2_co_copy_range_to(BlockDriverState *bs, goto fail; } - assert((cluster_offset & 511) == 0); + assert(QEMU_IS_ALIGNED(cluster_offset, s->cluster_size)); ret = qcow2_pre_write_overlap_check(bs, 0, cluster_offset + offset_in_cluster, cur_bytes, true);
qcow2_alloc_cluster_offset() and qcow2_get_cluster_offset() always return offsets that are cluster-aligned so don't just check that they are sector-aligned. The check in qcow2_co_preadv_task() is also replaced by an assertion for the same reason. Signed-off-by: Alberto Garcia <berto@igalia.com> --- block/qcow2.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-)