From: Devin Nakamura <devin122@gmail.com>
To: qemu-devel@nongnu.org
Cc: kwolf@redhat.com, Devin Nakamura <devin122@gmail.com>
Subject: [Qemu-devel] [RFC 01/24] block: add block conversion api
Date: Fri, 29 Jul 2011 00:49:31 -0400 [thread overview]
Message-ID: <1311914994-20482-2-git-send-email-devin122@gmail.com> (raw)
In-Reply-To: <1311914994-20482-1-git-send-email-devin122@gmail.com>
add functions to block driver interface to support inplace image conversion
Signed-off-by: Devin Nakamura <devin122@gmail.com>
---
block.h | 2 +
block_int.h | 88 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 90 insertions(+), 0 deletions(-)
diff --git a/block.h b/block.h
index 59cc410..a1c4cc8 100644
--- a/block.h
+++ b/block.h
@@ -251,6 +251,8 @@ int64_t bdrv_get_dirty_count(BlockDriverState *bs);
void bdrv_set_in_use(BlockDriverState *bs, int in_use);
int bdrv_in_use(BlockDriverState *bs);
+typedef struct BlockConversionOptions BlockConversionOptions;
+
typedef enum {
BLKDBG_L1_UPDATE,
diff --git a/block_int.h b/block_int.h
index efb6803..84bf89e 100644
--- a/block_int.h
+++ b/block_int.h
@@ -41,6 +41,9 @@
#define BLOCK_OPT_PREALLOC "preallocation"
#define BLOCK_OPT_SUBFMT "subformat"
+#define BLOCK_CRYPT_NONE 0
+#define BLOCK_CRYPT_AES 1
+
typedef struct AIOPool {
void (*cancel)(BlockDriverAIOCB *acb);
int aiocb_size;
@@ -139,6 +142,85 @@ struct BlockDriver {
*/
int (*bdrv_has_zero_init)(BlockDriverState *bs);
+ /* In-place image conversion */
+
+ /**
+ * Opens an image conversion target.
+ *
+ * @param bs Basic Initialization done by
+ * bdrv_open_conversion_target() Still need to set format
+ * specific data.
+ * @param usr_options Creation options.
+ * @param drv_options Conversion Options
+ * @return Returns non-zero on failure.
+ */
+ int (*bdrv_open_conversion_target)(BlockDriverState *bs,
+ BlockConversionOptions *drv_options, QEMUOptionParameter *usr_options);
+
+ /**
+ * Gets a mapping in the image file.
+ *
+ * The function starts searching for a mapping at
+ * starting_guest_offset = guest_offset + contiguous_bytes
+ *
+ * @param bs[in] The image in which to find mapping.
+ * @param guest_offset[in,out] On function entry used to calculate
+ * starting search address.
+ * On function exit contains the starting
+ * guest offset of the mapping.
+ * @param host_offset[out] The starting image file offset for the
+ * mapping.
+ * @param contiguous_bytes[in,out] On function entry used to calculate
+ * starting search address.
+ * On function exit contains the number of
+ * bytes for which this mapping is valid.
+ * A value of 0 means there are no more
+ * mappings in the image.
+ * @return Returns non-zero on error.
+ */
+ int (*bdrv_get_mapping)(BlockDriverState *bs, uint64_t *guest_offset,
+ uint64_t *host_offset, uint64_t *contiguous_bytes);
+
+ /**
+ * Sets a mapping in the image file.
+ *
+ * @param bs Usualy opened with bdrv_open_conversion_target
+ * @param guest_offset The starting guest offset of the mapping
+ * (in bytes). Function fails and returns -EINVAL if
+ * not cluster aligned.
+ * @param host_offset The starting image offset of the mapping
+ * (in bytes). Function fails and returns -EINVAL if
+ * not cluster aligned.
+ * @param contiguous_bytes The number of bytes for which this mapping exists
+ * Function fails and returns -EINVAL if not cluster
+ * aligned
+ * @return Returns non-zero on error
+ */
+ int (*bdrv_map)(BlockDriverState *bs, uint64_t guest_offset,
+ uint64_t host_offset, uint64_t contiguous_bytes);
+
+ /**
+ * Copies out the header of a conversion target
+ *
+ * Saves the current header for the image in a temporary file and overwrites
+ * it with the header for the new format (at the moment the header is
+ * assumed to be 1 sector)
+ *
+ * @param bs Usualy opened with bdrv_open_conversion_target().
+ * @return Returns non-zero on failure
+ */
+ int (*bdrv_copy_header) (BlockDriverState *bs);
+
+ /**
+ * Asks the block driver what options should be used to create a conversion
+ * target.
+ *
+ * @param options[out] Block conversion options
+ */
+ int (*bdrv_get_conversion_options)(BlockDriverState *bs,
+ BlockConversionOptions *options);
+
+
QLIST_ENTRY(BlockDriver) list;
};
@@ -263,4 +345,10 @@ static inline unsigned int get_physical_block_exp(BlockConf *conf)
DEFINE_PROP_UINT32("discard_granularity", _state, \
_conf.discard_granularity, 0)
+struct BlockConversionOptions {
+ int encryption_type;
+ uint64_t image_size;
+ uint64_t cluster_size;
+ uint64_t allocation_size;
+};
#endif /* BLOCK_INT_H */
--
1.7.6.rc1
next prev parent reply other threads:[~2011-07-29 4:50 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-07-29 4:49 [Qemu-devel] [RFC 00/24] inplace image conversion Devin Nakamura
2011-07-29 4:49 ` Devin Nakamura [this message]
2011-08-01 13:34 ` [Qemu-devel] [RFC 01/24] block: add block conversion api Kevin Wolf
2011-08-02 4:43 ` Devin Nakamura
2011-08-02 8:56 ` Stefan Hajnoczi
2011-08-02 9:24 ` Kevin Wolf
2011-07-29 4:49 ` [Qemu-devel] [RFC 02/24] block: add bdrv_get_conversion_options() Devin Nakamura
2011-07-29 4:49 ` [Qemu-devel] [RFC 03/24] block: add bdrv_open_conversion_target() Devin Nakamura
2011-08-01 13:42 ` Kevin Wolf
2011-08-02 8:57 ` Stefan Hajnoczi
2011-07-29 4:49 ` [Qemu-devel] [RFC 04/24] block: add bdrv_get_mapping() Devin Nakamura
2011-08-02 8:58 ` Stefan Hajnoczi
2011-07-29 4:49 ` [Qemu-devel] [RFC 05/24] block: add bdrv_map() Devin Nakamura
2011-07-29 4:49 ` [Qemu-devel] [RFC 06/24] block: add bdrv_copy_header() Devin Nakamura
2011-07-29 4:49 ` [Qemu-devel] [RFC 07/24] qed: make qed_alloc_clusters round up offset to nearest cluster Devin Nakamura
2011-08-01 13:51 ` Kevin Wolf
2011-07-29 4:49 ` [Qemu-devel] [RFC 08/24] qed: add qed_find_cluster_sync() Devin Nakamura
2011-07-29 4:49 ` [Qemu-devel] [RFC 09/24] qed: add qed_bdrv_get_mapping() Devin Nakamura
2011-08-02 8:59 ` Stefan Hajnoczi
2011-07-29 4:49 ` [Qemu-devel] [RFC 10/24] qed: add qed_bdrv_map() Devin Nakamura
2011-07-29 4:49 ` [Qemu-devel] [RFC 11/24] qed: add open_conversion_target() Devin Nakamura
2011-07-29 4:49 ` [Qemu-devel] [RFC 12/24] qed: add bdrv_qed_copy_header() Devin Nakamura
2011-07-29 4:49 ` [Qemu-devel] [RFC 13/24] qed: add bdrv_qed_get_conversion_options() Devin Nakamura
2011-07-29 4:49 ` [Qemu-devel] [RFC 14/24] qcow2: fix typo in documentation for qcow2_get_cluster_offset() Devin Nakamura
2011-07-29 4:49 ` [Qemu-devel] [RFC 15/24] qcow2: split up the creation of new refcount table from the act of checking it Devin Nakamura
2011-07-29 4:49 ` [Qemu-devel] [RFC 16/24] qcow2: add qcow2_drop_leaked_clusters() Devin Nakamura
2011-08-01 14:18 ` Kevin Wolf
2011-07-29 4:49 ` [Qemu-devel] [RFC 17/24] qcow2: add qcow2_get_mapping Devin Nakamura
2011-07-29 4:49 ` [Qemu-devel] [RFC 18/24] qcow2: add qcow2_map Devin Nakamura
2011-08-01 14:32 ` Kevin Wolf
[not found] ` <CAJ1AwB5ohCMOeSgcUKpKHbqGuK8Eioq5dr-z+a6+vGzdMrJJ6w@mail.gmail.com>
2011-08-02 8:05 ` Kevin Wolf
2011-07-29 4:49 ` [Qemu-devel] [RFC 19/24] qcow2: add qcow2_copy_header() Devin Nakamura
2011-08-01 14:57 ` Kevin Wolf
2011-07-29 4:49 ` [Qemu-devel] [RFC 20/24] qcow2: add get_conversion_options() Devin Nakamura
2011-07-29 4:49 ` [Qemu-devel] [RFC 21/24] qcow2: add qcow2_open_conversion_target() Devin Nakamura
2011-08-01 15:26 ` Kevin Wolf
2011-08-02 4:37 ` Devin Nakamura
2011-07-29 4:49 ` [Qemu-devel] [RFC 22/24] qemu-io: make map command use new block mapping function Devin Nakamura
2011-08-01 15:38 ` Kevin Wolf
2011-08-02 4:02 ` Devin Nakamura
2011-07-29 4:49 ` [Qemu-devel] [RFC 23/24] qemu-io: add setmap command Devin Nakamura
2011-07-29 4:49 ` [Qemu-devel] [RFC 24/24] qemu-img: add inplace conversion to qemu-img Devin Nakamura
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=1311914994-20482-2-git-send-email-devin122@gmail.com \
--to=devin122@gmail.com \
--cc=kwolf@redhat.com \
--cc=qemu-devel@nongnu.org \
/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.