From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:57208) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TiPsa-0002t9-O4 for qemu-devel@nongnu.org; Tue, 11 Dec 2012 08:28:19 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TiPsU-0007Kd-Cw for qemu-devel@nongnu.org; Tue, 11 Dec 2012 08:28:12 -0500 Received: from mail-wi0-f171.google.com ([209.85.212.171]:60545) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TiPsU-0007KY-6V for qemu-devel@nongnu.org; Tue, 11 Dec 2012 08:28:06 -0500 Received: by mail-wi0-f171.google.com with SMTP id hn14so1795478wib.10 for ; Tue, 11 Dec 2012 05:28:05 -0800 (PST) Date: Tue, 11 Dec 2012 14:28:02 +0100 From: Stefan Hajnoczi Message-ID: <20121211132802.GL796@stefanha-thinkpad.muc.redhat.com> References: <1353935123-24199-1-git-send-email-benoit@irqsave.net> <1353935123-24199-9-git-send-email-benoit@irqsave.net> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <1353935123-24199-9-git-send-email-benoit@irqsave.net> Subject: Re: [Qemu-devel] [RFC V3 08/24] qcow2: Implement qcow2_compute_cluster_hash. List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: =?iso-8859-1?Q?Beno=EEt?= Canet Cc: kwolf@redhat.com, qemu-devel@nongnu.org, stefanha@redhat.com On Mon, Nov 26, 2012 at 02:05:07PM +0100, Benoît Canet wrote: > Signed-off-by: Benoit Canet > --- > 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 > +#include > #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