From: Kevin Wolf <kwolf@redhat.com>
To: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Cc: qemu-block@nongnu.org, qemu-devel@nongnu.org, mreitz@redhat.com,
armbru@redhat.com, eblake@redhat.com, jsnow@redhat.com,
famz@redhat.com, den@openvz.org, stefanha@redhat.com,
pbonzini@redhat.com
Subject: Re: [Qemu-devel] [PATCH 05/29] qcow2-bitmap: structs and consts
Date: Thu, 11 Aug 2016 11:09:59 +0200 [thread overview]
Message-ID: <20160811090959.GA5035@noname.redhat.com> (raw)
In-Reply-To: <1470668720-211300-6-git-send-email-vsementsov@virtuozzo.com>
Am 08.08.2016 um 17:04 hat Vladimir Sementsov-Ogievskiy geschrieben:
> Create block/qcow2-bitmap.c
> Add data structures and constraints accordingly to docs/specs/qcow2.txt
>
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> ---
> block/Makefile.objs | 2 +-
> block/qcow2-bitmap.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++
> block/qcow2.h | 29 +++++++++++++++++++++++++++++
> 3 files changed, 77 insertions(+), 1 deletion(-)
> create mode 100644 block/qcow2-bitmap.c
>
> diff --git a/block/Makefile.objs b/block/Makefile.objs
> index 2593a2f..545d618 100644
> --- a/block/Makefile.objs
> +++ b/block/Makefile.objs
> @@ -1,5 +1,5 @@
> block-obj-y += raw_bsd.o qcow.o vdi.o vmdk.o cloop.o bochs.o vpc.o vvfat.o
> -block-obj-y += qcow2.o qcow2-refcount.o qcow2-cluster.o qcow2-snapshot.o qcow2-cache.o
> +block-obj-y += qcow2.o qcow2-refcount.o qcow2-cluster.o qcow2-snapshot.o qcow2-cache.o qcow2-bitmap.o
> block-obj-y += qed.o qed-gencb.o qed-l2-cache.o qed-table.o qed-cluster.o
> block-obj-y += qed-check.o
> block-obj-$(CONFIG_VHDX) += vhdx.o vhdx-endian.o vhdx-log.o
> diff --git a/block/qcow2-bitmap.c b/block/qcow2-bitmap.c
> new file mode 100644
> index 0000000..cd18b07
> --- /dev/null
> +++ b/block/qcow2-bitmap.c
> @@ -0,0 +1,47 @@
> +/*
> + * Bitmaps for the QCOW version 2 format
> + *
> + * Copyright (c) 2014-2016 Vladimir Sementsov-Ogievskiy
> + *
> + * This file is derived from qcow2-snapshot.c, original copyright:
> + * Copyright (c) 2004-2006 Fabrice Bellard
> + *
> + * Permission is hereby granted, free of charge, to any person obtaining a copy
> + * of this software and associated documentation files (the "Software"), to deal
> + * in the Software without restriction, including without limitation the rights
> + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
> + * copies of the Software, and to permit persons to whom the Software is
> + * furnished to do so, subject to the following conditions:
> + *
> + * The above copyright notice and this permission notice shall be included in
> + * all copies or substantial portions of the Software.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
> + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
> + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
> + * THE SOFTWARE.
> + */
> +
> +/* NOTICE: BME here means Bitmaps Extension and used as a namespace for
> + * _internal_ constants. Please do not use this _internal_ abbreviation for
> + * other needs and/or outside of this file. */
> +
> +/* Bitmap directory entry constraints */
> +#define BME_MAX_TABLE_SIZE 0x8000000
> +#define BME_MAX_PHYS_SIZE 0x20000000 /* 512 mb */
> +#define BME_MAX_GRANULARITY_BITS 31
> +#define BME_MIN_GRANULARITY_BITS 9
The spec accepts 0. Should we change the spec or at least add a note
that qemu requires a minimum of 512 bytes?
> +#define BME_MAX_NAME_SIZE 1023
> +
> +/* Bitmap directory entry flags */
> +#define BME_RESERVED_FLAGS 0xffffffff
> +
> +/* bits [1, 8] U [56, 63] are reserved */
> +#define BME_TABLE_ENTRY_RESERVED_MASK 0xff000000000001fe
> +
> +typedef enum BitmapType {
> + BT_DIRTY_TRACKING_BITMAP = 1
> +} BitmapType;
> diff --git a/block/qcow2.h b/block/qcow2.h
> index b36a7bf..b12cecc 100644
> --- a/block/qcow2.h
> +++ b/block/qcow2.h
> @@ -52,6 +52,10 @@
> * space for snapshot names and IDs */
> #define QCOW_MAX_SNAPSHOTS_SIZE (1024 * QCOW_MAX_SNAPSHOTS)
>
> +/* Bitmap header extension constraints */
> +#define QCOW_MAX_DIRTY_BITMAPS 65535
> +#define QCOW_MAX_DIRTY_BITMAP_DIRECTORY_SIZE (1024 * QCOW_MAX_DIRTY_BITMAPS)
> +
> /* indicate that the refcount of the referenced cluster is exactly one. */
> #define QCOW_OFLAG_COPIED (1ULL << 63)
> /* indicate that the cluster is compressed (they never have the copied flag) */
> @@ -142,6 +146,22 @@ typedef struct QEMU_PACKED QCowSnapshotHeader {
> /* name follows */
> } QCowSnapshotHeader;
>
> +/* QCow2BitmapHeader is actually a bitmap directory entry */
> +typedef struct QEMU_PACKED QCow2BitmapHeader {
Why not call it Qcow2BitmapDirEntry then?
> + /* header is 8 byte aligned */
> + uint64_t bitmap_table_offset;
> +
> + uint32_t bitmap_table_size;
> + uint32_t flags;
> +
> + uint8_t type;
> + uint8_t granularity_bits;
> + uint16_t name_size;
> + uint32_t extra_data_size;
> + /* extra data follows */
> + /* name follows */
> +} QCow2BitmapHeader;
> +
> typedef struct QEMU_PACKED QCowSnapshotExtraData {
> uint64_t vm_state_size_large;
> uint64_t disk_size;
> @@ -222,6 +242,15 @@ typedef uint64_t Qcow2GetRefcountFunc(const void *refcount_array,
> typedef void Qcow2SetRefcountFunc(void *refcount_array,
> uint64_t index, uint64_t value);
>
> +/* Be careful, Qcow2BitmapHeaderExt is not an extension of QCow2BitmapHeader, it
> + * is Qcow2 header extension */
Misunderstanding already avoided with Qcow2BitmapDirEntry. :-)
> +typedef struct Qcow2BitmapHeaderExt {
> + uint32_t nb_bitmaps;
> + uint32_t reserved32;
> + uint64_t bitmap_directory_size;
> + uint64_t bitmap_directory_offset;
> +} QEMU_PACKED Qcow2BitmapHeaderExt;
Looks good otherwise.
Kevin
next prev parent reply other threads:[~2016-08-11 9:10 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-08-08 15:04 [Qemu-devel] [PATCH v6 00/29] qcow2: persistent dirty bitmaps Vladimir Sementsov-Ogievskiy
2016-08-08 15:04 ` [Qemu-devel] [PATCH 01/29] hbitmap: fix dirty iter Vladimir Sementsov-Ogievskiy
2016-08-10 13:41 ` Kevin Wolf
2016-08-10 13:59 ` Vladimir Sementsov-Ogievskiy
2016-08-08 15:04 ` [Qemu-devel] [PATCH 02/29] tests: add hbitmap iter test Vladimir Sementsov-Ogievskiy
2016-08-08 15:04 ` [Qemu-devel] [PATCH 03/29] block: fix bdrv_dirty_bitmap_granularity signature Vladimir Sementsov-Ogievskiy
2016-08-10 13:42 ` Kevin Wolf
2016-08-08 15:04 ` [Qemu-devel] [PATCH 04/29] block/dirty-bitmap: add deserialize_ones func Vladimir Sementsov-Ogievskiy
2016-08-10 13:49 ` Kevin Wolf
2016-08-08 15:04 ` [Qemu-devel] [PATCH 05/29] qcow2-bitmap: structs and consts Vladimir Sementsov-Ogievskiy
2016-08-11 9:09 ` Kevin Wolf [this message]
2016-08-08 15:04 ` [Qemu-devel] [PATCH 06/29] qcow2-bitmap: add qcow2_read_bitmaps() Vladimir Sementsov-Ogievskiy
2016-08-11 9:36 ` Kevin Wolf
2016-08-11 12:00 ` Vladimir Sementsov-Ogievskiy
2016-08-11 12:54 ` Kevin Wolf
2016-08-08 15:04 ` [Qemu-devel] [PATCH 07/29] qcow2-bitmap: add qcow2_bitmap_load() Vladimir Sementsov-Ogievskiy
2016-08-11 13:00 ` Kevin Wolf
2016-08-08 15:04 ` [Qemu-devel] [PATCH 08/29] qcow2-bitmap: delete bitmap from qcow2 after load Vladimir Sementsov-Ogievskiy
2016-08-11 13:18 ` Kevin Wolf
2016-08-30 15:03 ` Vladimir Sementsov-Ogievskiy
2016-08-08 15:05 ` [Qemu-devel] [PATCH 09/29] qcow2-bitmap: add qcow2_bitmap_store() Vladimir Sementsov-Ogievskiy
2016-08-08 15:05 ` [Qemu-devel] [PATCH 10/29] qcow2-bitmap: add IN_USE flag Vladimir Sementsov-Ogievskiy
2016-08-08 15:05 ` [Qemu-devel] [PATCH 11/29] qcow2-bitmap: check constraints Vladimir Sementsov-Ogievskiy
2016-08-08 15:05 ` [Qemu-devel] [PATCH 12/29] qcow2: add qcow2_delete_bitmaps Vladimir Sementsov-Ogievskiy
2016-08-08 15:05 ` [Qemu-devel] [PATCH 13/29] qcow2: add dirty bitmaps extension Vladimir Sementsov-Ogievskiy
2016-08-08 15:05 ` [Qemu-devel] [PATCH 14/29] qcow2-bitmap: add qcow2_bitmap_load_check() Vladimir Sementsov-Ogievskiy
2016-08-08 15:05 ` [Qemu-devel] [PATCH 15/29] block/dirty-bitmap: introduce persistent bitmaps Vladimir Sementsov-Ogievskiy
2016-08-08 15:05 ` [Qemu-devel] [PATCH 16/29] block: add bdrv_load_dirty_bitmap() Vladimir Sementsov-Ogievskiy
2016-08-11 11:24 ` Kevin Wolf
2016-08-11 11:29 ` Vladimir Sementsov-Ogievskiy
2016-08-08 15:05 ` [Qemu-devel] [PATCH 17/29] qcow2-bitmap: add autoclear bit Vladimir Sementsov-Ogievskiy
2016-08-08 15:05 ` [Qemu-devel] [PATCH 18/29] qcow2-bitmap: disallow storing bitmap to other bs Vladimir Sementsov-Ogievskiy
2016-08-08 15:05 ` [Qemu-devel] [PATCH 19/29] block/dirty-bitmap: add autoload field to BdrvDirtyBitmap Vladimir Sementsov-Ogievskiy
2016-08-08 15:05 ` [Qemu-devel] [PATCH 20/29] qcow2-bitmap: add AUTO flag Vladimir Sementsov-Ogievskiy
2016-08-08 15:05 ` [Qemu-devel] [PATCH 21/29] qcow2-bitmap: add EXTRA_DATA_COMPATIBLE flag Vladimir Sementsov-Ogievskiy
2016-08-08 15:05 ` [Qemu-devel] [PATCH 22/29] qmp: add persistent flag to block-dirty-bitmap-add Vladimir Sementsov-Ogievskiy
2016-08-08 15:05 ` [Qemu-devel] [PATCH 23/29] qmp: add autoload parameter " Vladimir Sementsov-Ogievskiy
2016-08-08 15:05 ` [Qemu-devel] [PATCH 24/29] qcow2-bitmap: maintian BlockDirtyBitmap.autoload Vladimir Sementsov-Ogievskiy
2016-08-08 15:05 ` [Qemu-devel] [PATCH 25/29] qapi: add md5 checksum of last dirty bitmap level to query-block Vladimir Sementsov-Ogievskiy
2016-08-08 15:05 ` [Qemu-devel] [PATCH 26/29] iotests: test qcow2 persistent dirty bitmap Vladimir Sementsov-Ogievskiy
2016-08-08 15:05 ` [Qemu-devel] [PATCH 27/29] qcow2-bitmap: delete in_use bitmaps on image load Vladimir Sementsov-Ogievskiy
2016-08-08 15:05 ` [Qemu-devel] [PATCH 28/29] qcow2-bitmap: do not try reloading bitmaps Vladimir Sementsov-Ogievskiy
2016-08-08 15:05 ` [Qemu-devel] [PATCH 29/29] qcow2-dirty-bitmap: refcounts Vladimir Sementsov-Ogievskiy
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20160811090959.GA5035@noname.redhat.com \
--to=kwolf@redhat.com \
--cc=armbru@redhat.com \
--cc=den@openvz.org \
--cc=eblake@redhat.com \
--cc=famz@redhat.com \
--cc=jsnow@redhat.com \
--cc=mreitz@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
--cc=vsementsov@virtuozzo.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.