Message ID | 20220811150044.1704013-8-alexander.ivanov@virtuozzo.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | parallels: Refactor the code of images checks and fix a bug | expand |
On 11.08.2022 17:00, Alexander Ivanov wrote: > v2: Move fragmentation counting code to this function too. same note here about ChnageLog and motivation > Signed-off-by: Alexander Ivanov <alexander.ivanov@virtuozzo.com> > --- > block/parallels.c | 54 +++++++++++++++++++++++++++-------------------- > 1 file changed, 31 insertions(+), 23 deletions(-) > > diff --git a/block/parallels.c b/block/parallels.c > index 8737eadfb4..d0364182bb 100644 > --- a/block/parallels.c > +++ b/block/parallels.c > @@ -518,48 +518,56 @@ static int parallels_check_leak(BlockDriverState *bs, > return 0; > } > > -static int coroutine_fn parallels_co_check(BlockDriverState *bs, > - BdrvCheckResult *res, > - BdrvCheckMode fix) > +static void parallels_collect_statistics(BlockDriverState *bs, > + BdrvCheckResult *res, > + BdrvCheckMode fix) > { > BDRVParallelsState *s = bs->opaque; > - int64_t prev_off; > - int ret; > + int64_t off, prev_off; > uint32_t i; > > - > - qemu_co_mutex_lock(&s->lock); > - > - parallels_check_unclean(bs, res, fix); > - > - ret = parallels_check_outside_image(bs, res, fix); > - if (ret < 0) { > - goto out; > - } > - > - ret = parallels_check_leak(bs, res, fix); > - if (ret < 0) { > - goto out; > - } > - > res->bfi.total_clusters = s->bat_size; > res->bfi.compressed_clusters = 0; /* compression is not supported */ > > prev_off = 0; > for (i = 0; i < s->bat_size; i++) { > - int64_t off = bat2sect(s, i) << BDRV_SECTOR_BITS; > + off = bat2sect(s, i) << BDRV_SECTOR_BITS; > if (off == 0) { > prev_off = 0; > continue; > } > > - res->bfi.allocated_clusters++; > - > if (prev_off != 0 && (prev_off + s->cluster_size) != off) { > res->bfi.fragmented_clusters++; > } > + > prev_off = off; > + res->bfi.allocated_clusters++; > } > +} > + > +static int coroutine_fn parallels_co_check(BlockDriverState *bs, > + BdrvCheckResult *res, > + BdrvCheckMode fix) > +{ > + BDRVParallelsState *s = bs->opaque; > + int ret; > + > + qemu_co_mutex_lock(&s->lock); > + > + parallels_check_unclean(bs, res, fix); > + > + ret = parallels_check_outside_image(bs, res, fix); > + if (ret < 0) { > + goto out; > + } > + > + ret = parallels_check_leak(bs, res, fix); > + if (ret < 0) { > + goto out; > + } > + > + parallels_collect_statistics(bs, res, fix); > > out: > qemu_co_mutex_unlock(&s->lock);
diff --git a/block/parallels.c b/block/parallels.c index 8737eadfb4..d0364182bb 100644 --- a/block/parallels.c +++ b/block/parallels.c @@ -518,48 +518,56 @@ static int parallels_check_leak(BlockDriverState *bs, return 0; } -static int coroutine_fn parallels_co_check(BlockDriverState *bs, - BdrvCheckResult *res, - BdrvCheckMode fix) +static void parallels_collect_statistics(BlockDriverState *bs, + BdrvCheckResult *res, + BdrvCheckMode fix) { BDRVParallelsState *s = bs->opaque; - int64_t prev_off; - int ret; + int64_t off, prev_off; uint32_t i; - - qemu_co_mutex_lock(&s->lock); - - parallels_check_unclean(bs, res, fix); - - ret = parallels_check_outside_image(bs, res, fix); - if (ret < 0) { - goto out; - } - - ret = parallels_check_leak(bs, res, fix); - if (ret < 0) { - goto out; - } - res->bfi.total_clusters = s->bat_size; res->bfi.compressed_clusters = 0; /* compression is not supported */ prev_off = 0; for (i = 0; i < s->bat_size; i++) { - int64_t off = bat2sect(s, i) << BDRV_SECTOR_BITS; + off = bat2sect(s, i) << BDRV_SECTOR_BITS; if (off == 0) { prev_off = 0; continue; } - res->bfi.allocated_clusters++; - if (prev_off != 0 && (prev_off + s->cluster_size) != off) { res->bfi.fragmented_clusters++; } + prev_off = off; + res->bfi.allocated_clusters++; } +} + +static int coroutine_fn parallels_co_check(BlockDriverState *bs, + BdrvCheckResult *res, + BdrvCheckMode fix) +{ + BDRVParallelsState *s = bs->opaque; + int ret; + + qemu_co_mutex_lock(&s->lock); + + parallels_check_unclean(bs, res, fix); + + ret = parallels_check_outside_image(bs, res, fix); + if (ret < 0) { + goto out; + } + + ret = parallels_check_leak(bs, res, fix); + if (ret < 0) { + goto out; + } + + parallels_collect_statistics(bs, res, fix); out: qemu_co_mutex_unlock(&s->lock);
v2: Move fragmentation counting code to this function too. Signed-off-by: Alexander Ivanov <alexander.ivanov@virtuozzo.com> --- block/parallels.c | 54 +++++++++++++++++++++++++++-------------------- 1 file changed, 31 insertions(+), 23 deletions(-)