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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).