On 28.06.20 13:02, Alberto Garcia wrote: > qcow2_get_cluster_offset() takes an (unaligned) guest offset and > returns the (aligned) offset of the corresponding cluster in the qcow2 > image. > > In practice none of the callers need to know where the cluster starts > so this patch makes the function calculate and return the final host > offset directly. The function is also renamed accordingly. > > There is a pre-existing exception with compressed clusters: in this > case the function returns the complete cluster descriptor (containing > the offset and size of the compressed data). This does not change with > this patch but it is now documented. > > Signed-off-by: Alberto Garcia > Reviewed-by: Vladimir Sementsov-Ogievskiy > --- > block/qcow2.h | 4 ++-- > block/qcow2-cluster.c | 42 +++++++++++++++++++++++------------------- > block/qcow2.c | 24 +++++++----------------- > 3 files changed, 32 insertions(+), 38 deletions(-) [...] > diff --git a/block/qcow2-cluster.c b/block/qcow2-cluster.c > index 4b5fc8c4a7..9ab41cb728 100644 > --- a/block/qcow2-cluster.c > +++ b/block/qcow2-cluster.c [...] > @@ -537,8 +542,6 @@ int qcow2_get_cluster_offset(BlockDriverState *bs, uint64_t offset, > bytes_needed = bytes_available; > } > > - *cluster_offset = 0; > - You drop this line without replacement now. That means that *host_offset is no longer set to 0 if the L1 entry is out of bounds or empty (which causes this function to return QCOW2_CLUSTER_UNALLOCATED and no error). Was that intentional? Max