Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
parallels: Move statistic collection to a separate function
We will add more and more checks so we need a better code structure
in parallels_co_check. Let each check performs in a separate loop
in a separate helper.

Signed-off-by: Alexander Ivanov <alexander.ivanov@virtuozzo.com>
Reviewed-by: Denis V. Lunev <den@openvz.org>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
Message-Id: <20230424093147.197643-11-alexander.ivanov@virtuozzo.com>
Reviewed-by: Hanna Czenczek <hreitz@redhat.com>
Signed-off-by: Hanna Czenczek <hreitz@redhat.com>
  • Loading branch information
AlexanderIvanov-Virtuozzo authored and XanClic committed Jun 5, 2023
1 parent 09a21ed commit 7e259e2
Showing 1 changed file with 30 additions and 22 deletions.
52 changes: 30 additions & 22 deletions block/parallels.c
Expand Up @@ -524,35 +524,20 @@ parallels_check_leak(BlockDriverState *bs, BdrvCheckResult *res,
return 0;
}

static int coroutine_fn GRAPH_RDLOCK
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 BDRV_FIX_ERRORS is not set, out-of-image BAT entries were not
* fixed. Skip not allocated and out-of-image BAT entries.
Expand All @@ -562,13 +547,36 @@ parallels_co_check(BlockDriverState *bs, BdrvCheckResult *res,
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 GRAPH_RDLOCK
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);
Expand Down

0 comments on commit 7e259e2

Please sign in to comment.