On 2017-09-20 15:58, Pavel Butsykin wrote: > Now after shrinking the image, at the end of the image file, there might be a > tail that probably will never be used. So we can find the last used cluster > and > cut the tail. > > Signed-off-by: Pavel Butsykin <pbutsy...@virtuozzo.com> > --- > block/qcow2-refcount.c | 21 +++++++++++++++++++++ > block/qcow2.c | 19 +++++++++++++++++++ > block/qcow2.h | 1 + > 3 files changed, 41 insertions(+) > > diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c > index 88d5a3f1ad..5e221a166c 100644 > --- a/block/qcow2-refcount.c > +++ b/block/qcow2-refcount.c > @@ -3181,3 +3181,24 @@ out: > g_free(reftable_tmp); > return ret; > } > + > +int64_t qcow2_get_last_cluster(BlockDriverState *bs, int64_t size) > +{ > + BDRVQcow2State *s = bs->opaque; > + int64_t i, last_cluster, nb_clusters = size_to_clusters(s, size); > + uint64_t refcount; > + > + for (i = 0, last_cluster = 0; i < nb_clusters; i++) { > + int ret = qcow2_get_refcount(bs, i, &refcount); > + if (ret < 0) { > + fprintf(stderr, "Can't get refcount for cluster %" PRId64 ": > %s\n", > + i, strerror(-ret)); > + continue; > + } > + > + if (refcount > 0) { > + last_cluster = i; > + } > + } > + return last_cluster; > +}
Wouldn't it make more sense to start from the end of the image? Max
signature.asc
Description: OpenPGP digital signature