From: Stefan Hajnoczi <stefanha@gmail.com>
To: "Benoît Canet" <benoit@irqsave.net>
Cc: kwolf@redhat.com, qemu-devel@nongnu.org, stefanha@redhat.com
Subject: Re: [Qemu-devel] [RFC V3 08/24] qcow2: Implement qcow2_compute_cluster_hash.
Date: Tue, 11 Dec 2012 14:28:02 +0100 [thread overview]
Message-ID: <20121211132802.GL796@stefanha-thinkpad.muc.redhat.com> (raw)
In-Reply-To: <1353935123-24199-9-git-send-email-benoit@irqsave.net>
On Mon, Nov 26, 2012 at 02:05:07PM +0100, Benoît Canet wrote:
> Signed-off-by: Benoit Canet <benoit@irqsave.net>
> ---
> Makefile | 3 +++
> Makefile.target | 2 +-
> block/qcow2-dedup.c | 10 ++++++++--
> 3 files changed, 12 insertions(+), 3 deletions(-)
>
> diff --git a/Makefile b/Makefile
> index 88285a4..c79b2da 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -168,6 +168,9 @@ qemu-img$(EXESUF): qemu-img.o $(tools-obj-y) $(block-obj-y) $(qapi-obj-y) \
> qapi-visit.o qapi-types.o
> qemu-nbd$(EXESUF): qemu-nbd.o $(tools-obj-y) $(block-obj-y)
> qemu-io$(EXESUF): qemu-io.o cmd.o $(tools-obj-y) $(block-obj-y)
> +qemu-img$(EXESUF): LIBS+=-lcrypto
> +qemu-nbd$(EXESUF): LIBS+=-lcrypto
> +qemu-io$(EXESUF): LIBS+=-lcrypto
>
> qemu-bridge-helper$(EXESUF): qemu-bridge-helper.o
>
> diff --git a/Makefile.target b/Makefile.target
> index 3822bc5..f9a988a 100644
> --- a/Makefile.target
> +++ b/Makefile.target
> @@ -119,7 +119,7 @@ obj-$(CONFIG_HAVE_GET_MEMORY_MAPPING) += memory_mapping.o
> obj-$(CONFIG_HAVE_CORE_DUMP) += dump.o
> obj-$(CONFIG_NO_GET_MEMORY_MAPPING) += memory_mapping-stub.o
> obj-$(CONFIG_NO_CORE_DUMP) += dump-stub.o
> -LIBS+=-lz
> +LIBS+=-lz -lcrypto
Need a ./configure check for openssl?
VNC can already use gnutls so perhaps we should support that?
http://gnutls.org/manual/gnutls.html#Hash-and-HMAC-functions
>
> QEMU_CFLAGS += $(VNC_TLS_CFLAGS)
> QEMU_CFLAGS += $(VNC_SASL_CFLAGS)
> diff --git a/block/qcow2-dedup.c b/block/qcow2-dedup.c
> index 83ad61e..37e8266 100644
> --- a/block/qcow2-dedup.c
> +++ b/block/qcow2-dedup.c
> @@ -25,11 +25,13 @@
> * THE SOFTWARE.
> */
>
> +#include <openssl/sha.h>
> +#include <openssl/evp.h>
> #include "block_int.h"
> #include "qemu-common.h"
> #include "qcow2.h"
>
> -#define HASH_LENGTH 32
> +#define HASH_LENGTH SHA256_DIGEST_LENGTH
>
> static int qcow2_dedup_read_write_hash(BlockDriverState *bs,
> uint8_t **hash,
> @@ -188,7 +190,11 @@ static QCowHashNode *qcow2_dedup_build_qcow_hash_node(uint8_t *hash,
> static uint8_t *qcow2_compute_cluster_hash(BlockDriverState *bs,
> uint8_t *data)
> {
> - return NULL;
> + BDRVQcowState *s = bs->opaque;
> + uint8_t *hash = g_malloc0(HASH_LENGTH);
> + EVP_Digest(data, s->cluster_size,
> + hash, NULL, EVP_sha256(), NULL);
> + return hash;
> }
Not sure if it's worth allocating these relatively small objects on the
heap and worrying about their lifecycle.
It's simpler to pass references to the hashes and copy the entire object
to pass ownership.
This function would become:
void qcow2_compute_cluster_hash(BlockDriverState *bs, uint8_t *data, QcowHash *hash);
typedef struct {
uint8_t data[SHA256_DIGEST_LENGTH];
} QcowHash;
The caller needs to decide whether a stack-allocated variable is
appropriate or if the hash should live inside a QcowHashNode, etc.
Stefan
next prev parent reply other threads:[~2012-12-11 13:28 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-11-26 13:04 [Qemu-devel] [RFC V3 00/24] QCOW2 deduplication Benoît Canet
2012-11-26 13:05 ` [Qemu-devel] [RFC V3 01/24] qcow2: Add deduplication to the qcow2 specification Benoît Canet
2012-12-11 11:28 ` Stefan Hajnoczi
2012-12-11 11:32 ` Stefan Hajnoczi
2012-12-12 15:57 ` Benoît Canet
2012-12-18 13:38 ` Stefan Hajnoczi
2012-12-11 23:03 ` Eric Blake
2012-12-12 15:59 ` Benoît Canet
2012-11-26 13:05 ` [Qemu-devel] [RFC V3 02/24] qcow2: Add deduplication structures and fields Benoît Canet
2012-12-11 11:34 ` Stefan Hajnoczi
2012-11-26 13:05 ` [Qemu-devel] [RFC V3 03/24] qcow2: Add qcow2_dedup_read_missing_and_concatenate Benoît Canet
2012-12-11 11:52 ` Stefan Hajnoczi
2012-11-26 13:05 ` [Qemu-devel] [RFC V3 04/24] qcow2: Make update_cluster_refcount public Benoît Canet
2012-11-26 13:05 ` [Qemu-devel] [RFC V3 05/24] qcow2: Create a way to link to l2 tables in dedup Benoît Canet
2012-11-26 13:05 ` [Qemu-devel] [RFC V3 06/24] qcow2: Add qcow2_dedup and related functions Benoît Canet
2012-12-11 13:16 ` Stefan Hajnoczi
2012-11-26 13:05 ` [Qemu-devel] [RFC V3 07/24] qcow2: Add qcow2_dedup_write_new_hashes Benoît Canet
2012-11-26 13:05 ` [Qemu-devel] [RFC V3 08/24] qcow2: Implement qcow2_compute_cluster_hash Benoît Canet
2012-12-11 13:28 ` Stefan Hajnoczi [this message]
2012-11-26 13:05 ` [Qemu-devel] [RFC V3 09/24] qcow2: Extract qcow2_dedup_grow_table Benoît Canet
2012-11-26 13:05 ` [Qemu-devel] [RFC V3 10/24] qcow2: create function to load deduplication hashes at startup Benoît Canet
2012-11-26 13:05 ` [Qemu-devel] [RFC V3 11/24] qcow2: Load and save deduplication table header extension Benoît Canet
2012-11-26 13:05 ` [Qemu-devel] [RFC V3 12/24] qcow2: Extract qcow2_do_table_init Benoît Canet
2012-11-26 13:05 ` [Qemu-devel] [RFC V3 13/24] qcow2: Add qcow2_dedup_init and qcow2_dedup_close Benoît Canet
2012-11-26 13:05 ` [Qemu-devel] [RFC V3 14/24] qcow2: Extract qcow2_add_feature and qcow2_remove_feature Benoît Canet
2012-11-26 13:05 ` [Qemu-devel] [RFC V3 15/24] block: Add dedup image create option Benoît Canet
2012-11-26 13:05 ` [Qemu-devel] [RFC V3 16/24] qcow2: Allow creation of images using deduplication Benoît Canet
2012-11-26 13:05 ` [Qemu-devel] [RFC V3 17/24] qcow2: Behave correctly when refcount reach 0 or 2^16 Benoît Canet
2012-11-26 13:05 ` [Qemu-devel] [RFC V3 18/24] qcow2: Integrate deduplication in qcow2_co_writev loop Benoît Canet
2012-11-26 13:05 ` [Qemu-devel] [RFC V3 19/24] qcow2: Add verification of dedup table Benoît Canet
2012-11-26 13:05 ` [Qemu-devel] [RFC V3 20/24] qcow2: Adapt checking of QCOW_OFLAG_COPIED for dedup Benoît Canet
2012-11-26 13:05 ` [Qemu-devel] [RFC V3 21/24] qcow2: Add check_dedup_l2 in order to check l2 of dedup table Benoît Canet
2012-11-26 13:05 ` [Qemu-devel] [RFC V3 22/24] qcow2: Do not overwrite existing entries with QCOW_OFLAG_COPIED Benoît Canet
2012-11-26 13:05 ` [Qemu-devel] [RFC V3 23/24] qcow2: init and cleanup deduplication Benoît Canet
2012-11-26 13:05 ` [Qemu-devel] [RFC V3 24/24] qemu-iotests: Filter dedup=on/off so existing tests don't break Benoît Canet
2012-12-11 14:19 ` [Qemu-devel] [RFC V3 00/24] QCOW2 deduplication Stefan Hajnoczi
2012-12-11 14:38 ` Stefan Hajnoczi
2012-12-12 16:14 ` Benoît Canet
2012-12-18 13:42 ` Stefan Hajnoczi
2012-12-24 12:26 ` Benoît Canet
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=20121211132802.GL796@stefanha-thinkpad.muc.redhat.com \
--to=stefanha@gmail.com \
--cc=benoit@irqsave.net \
--cc=kwolf@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.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 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).