[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 18/27] block/parallels: implement parallels_chec
From: |
Roman Kagan |
Subject: |
Re: [Qemu-devel] [PATCH 18/27] block/parallels: implement parallels_check method of block driver |
Date: |
Tue, 10 Mar 2015 17:24:25 +0300 |
User-agent: |
Mutt/1.5.23 (2014-03-12) |
On Tue, Mar 10, 2015 at 11:51:12AM +0300, Denis V. Lunev wrote:
> The check is very simple at the moment. It calculates necessary stats
> and fix only the following errors:
> - space leak at the end of the image. This would happens due to
> preallocation
> - clusters outside the image are zeroed. Nothing else could be done here
>
> Signed-off-by: Denis V. Lunev <address@hidden>
> CC: Roman Kagan <address@hidden>
> CC: Kevin Wolf <address@hidden>
> CC: Stefan Hajnoczi <address@hidden>
> ---
> block/parallels.c | 82
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 82 insertions(+)
>
> diff --git a/block/parallels.c b/block/parallels.c
> index 65f6418..e5b475e 100644
> --- a/block/parallels.c
> +++ b/block/parallels.c
> @@ -228,6 +228,87 @@ fail:
> return ret;
> }
>
> +
> +static int parallels_check(BlockDriverState *bs, BdrvCheckResult *res,
> + BdrvCheckMode fix)
> +{
> + BDRVParallelsState *s = bs->opaque;
> + int64_t size, prev_off, high_off;
> + int ret;
> + uint32_t i;
> + bool flush_bat = false;
> + int cluster_size = s->tracks << BDRV_SECTOR_BITS;
> +
> + size = bdrv_getlength(bs->file);
> + if (size < 0) {
> + res->check_errors++;
> + return size;
> + }
> +
> + res->bfi.total_clusters = s->bat_size;
> + res->bfi.compressed_clusters = 0; /* compression is not supported */
> +
> + high_off = 0;
> + prev_off = 0;
> + for (i = 0; i < s->bat_size; i++) {
> + int64_t off = bat2sect(s, i) << BDRV_SECTOR_BITS;
> + if (off == 0)
> + continue;
If you don't update prev_off here you can get fragmentation stats wrong
(dunno how important it is)
> +
> + /* cluster outside the image */
> + if (off > size) {
> + fprintf(stderr, "%s cluster %u is outside image\n",
> + fix & BDRV_FIX_ERRORS ? "Repairing" : "ERROR", i);
> + res->corruptions++;
> + if (fix & BDRV_FIX_ERRORS) {
> + s->bat_bitmap[i] = 0;
> + res->corruptions_fixed++;
> + flush_bat = true;
> + continue;
> + }
Ditto
Roman.
- [Qemu-devel] [PATCH 14/27] block/parallels: create bat2sect helper, (continued)
- [Qemu-devel] [PATCH 14/27] block/parallels: create bat2sect helper, Denis V. Lunev, 2015/03/10
- [Qemu-devel] [PATCH 05/27] block/parallels: add get_block_status, Denis V. Lunev, 2015/03/10
- [Qemu-devel] [PATCH 15/27] block/parallels: keep BAT bitmap data in little endian in memory, Denis V. Lunev, 2015/03/10
- [Qemu-devel] [PATCH 11/27] iotests, parallels: test for newly created parallels image via qemu-img, Denis V. Lunev, 2015/03/10
- [Qemu-devel] [PATCH 26/27] block/parallels: optimize linear image expansion, Denis V. Lunev, 2015/03/10
- [Qemu-devel] [PATCH 08/27] block/parallels: _co_writev callback for Parallels format, Denis V. Lunev, 2015/03/10
- [Qemu-devel] [PATCH 18/27] block/parallels: implement parallels_check method of block driver, Denis V. Lunev, 2015/03/10
- Re: [Qemu-devel] [PATCH 18/27] block/parallels: implement parallels_check method of block driver,
Roman Kagan <=
- [Qemu-devel] [PATCH 07/27] block/parallels: replace magic constants 4, 64 with proper sizeofs, Denis V. Lunev, 2015/03/10
- [Qemu-devel] [PATCH 24/27] block/parallels: delay writing to BAT till bdrv_co_flush_to_os, Denis V. Lunev, 2015/03/10
- [Qemu-devel] [PATCH 21/27] block/parallels: no need to flush on each block allocation table update, Denis V. Lunev, 2015/03/10
- [Qemu-devel] [PATCH 02/27] block/parallels: rename parallels_header to ParallelsHeader, Denis V. Lunev, 2015/03/10
- [Qemu-devel] [PATCH v3 0/27] write/create for Parallels images with reasonable performance, Denis V. Lunev, 2015/03/11