Do you (the block maintainers) have an idea on how the code could be
improved
to securely pass the crypto key to the QCOW2 code ?
More generally, QCow2's current encryption support is woefully inadequate
from a design POV. If we wanted better encryption built-in to QEMU it is
best to
More generally, QCow2's current encryption support is woefully inadequate
from a design POV. If we wanted better encryption built-in to QEMU it is
best to just deprecate the current encryption support and define a new
qcow2 extension based around something like the LUKS data format. Using
the
1. Can we activate the timer only when requests are actually pending?
Imagine a host with 1000 guests, even a 1 second timer becomes
wasteful.
I will try to do this.
2. You don't vary the wait time, does this mean a throttled request must
wait for max 1 second? If yes, then it
I don't fully understand the patch yet but:
The patch is a variant of the following algorithm.
http://en.wikipedia.org/wiki/Leaky_bucket
Best regards
Benoît
The throttling code was segfaulting since commit
02ffb504485f0920cfc75a0982a602f824a9a4f4 because some qemu_co_queue_next caller
does not run in a coroutine.
qemu_co_queue_do_restart assume that the caller is a coroutinne.
As suggested by Stefan fix this by entering the coroutine directly.
Also
The thresholds of the leaky bucket algorithm can be used to allow some
burstiness.
Signed-off-by: Benoit Canet ben...@irqsave.net
---
block/qapi.c | 24 +
blockdev.c | 105 +++---
hmp.c| 32 +++--
activity [Stefan]
Mark function as coroutine_fn [Stefan]
Guard these function checking they are in a coroutine [Stefan]
Use defines to access buckets [Stefan]
Fix typo [Stefan]
reset throttling metric on iddle [Benoît]
rename invalid to check_io_limit [Stefan]
Benoît Canet (5
This patch replace the previous algorithm by the well described leaky bucket
algorithm: A bucket is filled by the incoming IOs and a periodic timer decrement
the counter to make the bucket leak. When a given threshold is reached the
bucket is full and the IOs are hold.
In this patch the threshold
This metrics show how many percent of the time I/Os are put on hold by the
throttling algorithm.
This metric could be used by system administrators or cloud stack developpers
to decide when the throttling settings must be changed.
Signed-off-by: Benoit Canet ben...@irqsave.net
---
block.c
This feature can be used in case where users are avoiding the iops limit by
doing jumbo I/Os hammering the storage backend.
Signed-off-by: Benoit Canet ben...@irqsave.net
---
block.c |8 +++-
block/qapi.c |4
blockdev.c| 22
There are two ways I could see it happening. Either integrate directly
into the qcow2 file format, by mapping LUKS headers key material
blocks into the qcow2 header region in some manner.
Alternatively do it in a completely generic block driver, that qcow2
(or any other qemu bdrv) calls
Le Thursday 25 Jul 2013 à 20:08:22 (+0800), Fam Zheng a écrit :
My ignorant question: Besides the fix, how is io throttling improved
from previously, what are the advantages of leaky bucket algorithm?
The advantage is simplicity and the ability to allow controlled bursts.
The disavantage is it
I think it is easier to understand written like this:
int64_t total_leak = ((bs-io_limits.iops[BLOCK_IO_LIMIT_TOTAL] *
delta) /
NANOSECONDS_PER_SECOND);
if (ios[BLOCK_IO_LIMIT_READ] = total_leak / 2) {
read_leak =
If I understand it, the percentage is recalculated every leak check. So
it only reflects the instant io flow, instead of historical statistics?
But I think for system admin purpose, it's good to know a longer range
io activity character. Or do you think management tool should sample it?
Yes I
This patch will probably conflict with Benoît's work on leaky bucket
throttling; can the two of you decide which one should go in first? Are
we trying to target both this series and leaky bucket throttling for 1.6?
I will to rebase my serie on top of this.
However if anyone has suggestions
The throttling code was segfaulting repair it for 1.6.
Benoît Canet (1):
block: Repair the throttling code.
block.c |8
include/block/coroutine.h |9 +++--
qemu-coroutine-lock.c | 20 ++--
3 files changed, 29 insertions(+), 8
The throttling code was segfaulting since commit
02ffb504485f0920cfc75a0982a602f824a9a4f4 because some qemu_co_queue_next caller
does not run in a coroutine.
qemu_co_queue_do_restart assume that the caller is a coroutinne.
As suggested by Stefan fix this by entering the coroutine directly.
Also
since v3:
silence bogus checkpatch warning [abligh]
Benoît Canet (1):
block: Repair the throttling code.
block.c |7 +++
include/block/coroutine.h |9 +++--
qemu-coroutine-lock.c | 20 ++--
3 files changed, 28 insertions(+), 8 deletions
The throttling code was segfaulting since commit
02ffb504485f0920cfc75a0982a602f824a9a4f4 because some qemu_co_queue_next caller
does not run in a coroutine.
qemu_co_queue_do_restart assume that the caller is a coroutinne.
As suggested by Stefan fix this by entering the coroutine directly.
Also
Kevin's series renamed these to have a dash in the name, and also moved
all the throttling parameters into a sub-struct. Does it make more
sense to have just '*throttling' with that sub-struct containing 12
parameters, 6 for limits and 6 for thresholds, or would it be better to
have
Confused.
You have one VF accessing BAR of another VF?
Why?
The VFs are scheduled and the board have only one microcontroller responsible
to give the read results for some memory mapped registers.
So it could respond the value of the active VF when a bar of an inactive VF is
read.
I handed
:
On Tue, Jul 23, 2013 at 05:38:00PM +0200, Kevin Wolf wrote:
Am 23.07.2013 um 17:22 hat Stefan Hajnoczi geschrieben:
On Tue, Jul 23, 2013 at 04:40:34PM +0200, Benoît Canet wrote:
More generally, QCow2's current encryption support is woefully
inadequate
from a design POV. If we
Crypto should be done by trained professionals[*].
I agree I feel uneasy to write cryptographic code.
Best regards
Benoît
For example, current qcow2 encryption is vulnerable to a watermarking
attack.
http://en.wikipedia.org/wiki/Disk_encryption_theory#Cipher-block_chaining_.28CBC.29
void qcow2_encrypt_sectors(BDRVQcowState *s, int64_t sector_num,
uint8_t *out_buf, const uint8_t *in_buf,
throttling infrastructure
+ *
+ * Copyright (C) Nodalink, SARL. 2013
+ *
+ * Author:
+ * Benoît Canet benoit.ca...@irqsave.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software
Signed-off-by: Benoit Canet ben...@irqsave.net
---
block.c | 316 +++--
block/qapi.c | 21 ++-
blockdev.c| 115 +
include/block/block.h |1 -
include/block/block_int.h | 33 +
strategies to avoid this: two timer, two throttled request
queues or even a different algorithm using a priority queue.
The problem is still the same in every version of the code: reads and writes
operation seems entangled.
Benoît Canet (2):
throttle: Add a new throttling API implementing continuus leaky
Le Thursday 25 Jul 2013 à 12:11:15 (+0200), Andrea Arcangeli a écrit :
MADV_DONTFORK prevents fork to fail with -ENOMEM if the default
overcommit heuristics decides there's too much anonymous virtual
memory allocated. If the KVM secondary MMU is synchronized with MMU
notifiers or not, doesn't
I saw more discussion on IRC. Does this mean you will send another
revision to address outstanding issues?
Just wanted to check if you are waiting for code review or if you are
still developing the next patch revision.
I am currently finishing to write unit tests for the next patch
Kevin's series renamed these to have a dash in the name, and also moved
all the throttling parameters into a sub-struct. Does it make more
sense to have just '*throttling' with that sub-struct containing 12
parameters, 6 for limits and 6 for thresholds, or would it be better to
have
:
wrap qemu-option.hx declararation [Eric]
continuus - continuous [Fam]
unit test [Paolo]
Benoît Canet (5):
throttle: Add a new throttling API implementing continuous leaky
bucket.
throttle: Add units tests
block: Enable the new throttling code in the block layer.
block: Add support
throttling infrastructure
+ *
+ * Copyright (C) Nodalink, SARL. 2013
+ *
+ * Author:
+ * Benoît Canet benoit.ca...@irqsave.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software
tip: Do not ever use the cfg scheduler in the guest with this code.
It gives incorrect throttling.
Signed-off-by: Benoit Canet ben...@irqsave.net
---
block.c | 351 ++---
block/qapi.c | 21 ++-
blockdev.c
file mode 100644
index 000..c687f5f
--- /dev/null
+++ b/tests/test-throttle.c
@@ -0,0 +1,494 @@
+/*
+ * Throttle infrastructure tests
+ *
+ * Copyright Nodalink, SARL. 2013
+ *
+ * Authors:
+ * Benoît Canet benoit.ca...@irqsave.net
+ *
+ * This work is licensed under the terms of the GNU
The max parameter of the leaky bycket throttling algoritm can be used to
allow the guest to do bursts.
The max value is a pool of I/O that the guest can use without being throttled
at all. Throttling is triggered once this pool is empty.
Signed-off-by: Benoit Canet ben...@irqsave.net
---
This feature can be used in case where users are avoiding the iops limit by
doing jumbo I/Os hammering the storage backend.
Signed-off-by: Benoit Canet ben...@irqsave.net
---
block/qapi.c |3 +++
blockdev.c | 22 +++---
hmp.c|8 ++--
This is not really accurate; the cfq scheduler reorders reads and writes
to have longer bursts, and these sometimes exceed the rate you set. I
understood this is mostly for separate rd/wr settings, or did you
reproduce it with total rates too?
I'll drop the comment.
It's only with
Also, it would be better to have a workaround for this. Perhaps we
could simply make the default value of max nonzero? In the old
throttling code the slice time is 0.1s, so perhaps we could see what
happens with max=0.1*avg.
This gives correct results with cfg with some little auto
It fail with the following error message at exit and I don't know why yet.
qemu-system-x86_64: block.c:1489: bdrv_drain_all: Assertion
`((bs-tracked_requests)-lh_first == ((void *)0))' failed.
I solved this issue: bdrv_drain_all was bogus.
Best regards
Benoît
block.c |
Le Saturday 02 Nov 2013 à 14:52:11 (+0100), Max Reitz a écrit :
The actual size of the image file may differ depending on the Linux
kernel currently running on the host. Filtering out this value makes
this test pass in such cases.
Signed-off-by: Max Reitz mre...@redhat.com
---
Le Monday 04 Nov 2013 à 17:30:10 (+0800), Fam Zheng a écrit :
Previously a BlockDriverState has only one dirty bitmap, so only one
caller (e.g. a block job) can keep track of writing. This changes the
dirty bitmap to a list and creates a BdrvDirtyBitmap for each caller, the
lifecycle is
Le Tuesday 05 Nov 2013 à 20:03:33 (+0100), Max Reitz a écrit :
error_setg_errno() may overwrite errno; therefore, its value should be
read before calling that function and not afterwards.
Signed-off-by: Max Reitz mre...@redhat.com
---
block.c | 2 +-
1 file changed, 1 insertion(+), 1
Le Wednesday 06 Nov 2013 à 19:48:06 (+0800), Fam Zheng a écrit :
Since b94a2610, bdrv_getlength() is omitted when probing image. VMDK
monolithicFlat is broken by that because a file 512 bytes can't be
read with its total_sectors truncated to 0. This patch round up the size
to
Le Thursday 07 Nov 2013 à 15:34:52 (+0800), Fam Zheng a écrit :
If backing file doesn't exist, the error message is confusing and
misleading:
$ qemu /tmp/a.qcow2
qemu: could not open disk image /tmp/a.qcow2: Could not open file: No
such file or directory
But...
$ ls
it
was not named.
After this patchset is merged I would like to take care of presenting the graph
to the management. (HMP /|| QMP)
Eric: Do you have some ideas on this topic ?
Best regards
Benoît
Benoît Canet (2):
block: Add bs-node_name to hold the name of a bs node of the bs
graph.
block
As node-name is a separate name space as device-name we can enable it's
definition right now: nobody will use it so no harm involved.
Signed-off-by: Benoit Canet ben...@irqsave.net
---
block.c | 6 --
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/block.c b/block.c
index
Add the minimum of code to prepare the followings patches.
If no node_name is provided to bdrv_new the bs-node_name is set to undefined.
This will allow to have some default string to communicate in QMP and HMP.
This also make undefined a reserved string for bs-node_name.
Signed-off-by: Benoit
Le Monday 04 Nov 2013 à 19:33:21 (+0800), Fam Zheng a écrit :
On 11/04/2013 07:06 PM, Kevin Wolf wrote:
Am 04.11.2013 um 10:48 hat Fam Zheng geschrieben:
On 11/04/2013 05:31 PM, Stefan Hajnoczi wrote:
On Wed, Oct 30, 2013 at 02:49:32PM +0100, Markus Armbruster wrote:
The first proposal is
Le Thursday 07 Nov 2013 à 19:47:48 (+0100), Max Reitz a écrit :
If the NewImageMode is absolute-paths but no backing file is available
(e.g., when mirroring a device with an unbacked image), the target image
will not be backed either. This patch updates the documentation in
qapi-schema.json
Le Thursday 07 Nov 2013 à 20:10:29 (+0100), Max Reitz a écrit :
There may be calls to error_setg() and especially error_setg_errno()
which blindly (and until now wrongly) assume these functions not to
clobber errno (e.g., they pass errno to error_setg_errno() and return
-errno afterwards).
Le Thursday 07 Nov 2013 à 13:23:43 (-0700), Eric Blake a écrit :
On 11/07/2013 08:01 AM, Benoît Canet wrote:
Add the minimum of code to prepare the followings patches.
If no node_name is provided to bdrv_new the bs-node_name is set to
undefined.
This will allow to have some default
Le Thursday 07 Nov 2013 à 15:54:09 (-0500), Jeff Cody a écrit :
On Thu, Nov 07, 2013 at 04:01:42PM +0100, Benoît Canet wrote:
Add the minimum of code to prepare the followings patches.
If no node_name is provided to bdrv_new the bs-node_name is set to
undefined.
This will allow
]
s/see/sees/ [Eric]
prevent duplicate node_name [Eric]
drop undefined and use [Eric, Kevin, Jeff]
remove from graph list on bdrv_make_anon [Jeff]
comment the two chains [Fam]
Add new command stub to retrieve the graph from libvirt [Benoît]
Benoît Canet (3):
block: Add bs
Signed-off-by: Benoit Canet ben...@irqsave.net
---
block.c | 20 ++--
1 file changed, 18 insertions(+), 2 deletions(-)
diff --git a/block.c b/block.c
index c397ee9..6690e3d 100644
--- a/block.c
+++ b/block.c
@@ -872,6 +872,7 @@ int bdrv_file_open(BlockDriverState **pbs, const
Add the minimum of code to prepare the followings patches.
Signed-off-by: Benoit Canet ben...@irqsave.net
---
block.c | 72 ++-
block/blkverify.c | 2 +-
block/iscsi.c | 2 +-
block/vmdk.c | 2 +-
---
blockdev.c | 8
qapi-schema.json | 32
2 files changed, 40 insertions(+)
diff --git a/blockdev.c b/blockdev.c
index 911ee7e..bfaeda0 100644
--- a/blockdev.c
+++ b/blockdev.c
@@ -1938,6 +1938,14 @@ void qmp_drive_backup(const char *device,
Le Tuesday 19 Nov 2013 à 17:49:46 (+0100), Paolo Bonzini a écrit :
Commit 787aaf5 (target-i386: forward CPUID cache leaves when -cpu host is
used, 2013-09-02) brings bits 31..26 of CPUID leaf 04h out of sync with
the APIC IDs that QEMU reserves for each package. This number must come
from
+QCOW2 can use one or more instance of a metadata journal.
s/instance/instances/
Is there a reason to use multiple journals rather than a single journal
for all entry types? The single journal area avoids seeks.
Here are the main reason for this:
For the deduplication some patterns
2. Byte-granularity means that read-modify-write is necessary to append
entries to the journal. Therefore a failure could destroy previously
committed entries.
Any ideas how existing journals handle this?
You commit only whole blocks. So in this case we can consider a block
Care to explain that in more detail? Why shouldn't it work on spinning
disks?
Hash are random they introduce random read access.
With a QCOW2 cluster size of 4KB the deduplication code when writting duplicated
data will do one random read per 4KB block to deduplicate.
A server grade hardisk
Does this mean the journal forms the first-stage data structure for
deduplication? Dedup records will accumulate in the journal until it
becomes time to convert them in bulk into a more compact representation?
The journal is mainly used to persist the last inserted dedup metadata across
QEMU
By the way, I don't know much about journalling techniques. So I'm
asking you these questions so that either you can answer them straight
away or because they might warrant a look at existing journal
implementations like:
I tried to so something simple and performing for the deduplication
Simple is good. Even for deduplication alone, I think data integrity is
critical - otherwise we risk stale dedup metadata pointing to clusters
that are unallocated or do not contain the right data. So the journal
will probably need to follow techniques for commits/checksums.
I agree that
Hello,
I want to implement an alternative mac address setting to allow a guest using
virtio-net to change it's mac address by itself.
The main use case is high availability setups where a slave machine take the
lead when the master is failing. (heartbeat)
The thing that an alternate mac
Sorry for the gibberish I misread the code.
Please ignore this mail.
Best regards
Benoît
Le Tuesday 16 Jul 2013 à 13:36:49 (+0200), Benoît Canet a écrit :
Hello,
I want to implement an alternative mac address setting to allow a guest using
virtio-net to change it's mac address by itself
Simple is good. Even for deduplication alone, I think data integrity is
critical - otherwise we risk stale dedup metadata pointing to clusters
that are unallocated or do not contain the right data. So the journal
will probably need to follow techniques for commits/checksums.
I'll add
to define the max size of an io when throttling by iops via
iops_sector_count.
Benoît Canet (4):
block: Repair the throttling code.
block: Modify the throttling code to implement the leaky bucket
algorithm.
block: Add support for throttling burst threshold in QMP and the
command line
The throttling code was segfaulting since commit
02ffb504485f0920cfc75a0982a602f824a9a4f4 because some qemu_co_queue_next caller
does not run in a coroutine.
qemu_co_queue_do_restart assume that the caller is a coroutinne.
As sugested by Stefan fix this by entering the coroutine directly.
This patch replace the previous algorithm by the well described leaky bucket
algorithm: A bucket is filled by the incoming IOs and a periodic timer decrement
the counter to make the bucket leak. When a given threshold is reached the
bucket is full and the IOs are hold.
In this patch the threshold
The thresholds of the leaky bucket algorithm can be used to allow some
burstiness.
Signed-off-by: Benoit Canet ben...@irqsave.net
---
block/qapi.c | 24 +
blockdev.c | 105 +++---
hmp.c| 32 +++--
This feature can be used in case where users are avoiding the iops limit by
doing jumbo I/Os hammering the storage backend.
Signed-off-by: Benoit Canet ben...@irqsave.net
---
block.c |8 +++-
block/qapi.c |4
blockdev.c| 22
This feature can be used in case where users are avoiding the iops limit by
doing jumbo I/Os hammering the storage backend.
Signed-off-by: Benoit Canet ben...@irqsave.net
---
block.c |8 +++-
block/qapi.c |4
blockdev.c| 22
The throttling code was segfaulting since commit
02ffb504485f0920cfc75a0982a602f824a9a4f4 because some qemu_co_queue_next caller
does not run in a coroutine.
qemu_co_queue_do_restart assume that the caller is a coroutinne.
As sugested by Stefan fix this by entering the coroutine directly.
The thresholds of the leaky bucket algorithm can be used to allow some
burstiness.
Signed-off-by: Benoit Canet ben...@irqsave.net
---
block/qapi.c | 24 +
blockdev.c | 105 +++---
hmp.c| 32 +++--
to define the max size of an io when throttling by iops via
iops_sector_count to avoid vm users cheating on the iops limit.
Benoît Canet (4):
block: Repair the throttling code.
block: Modify the throttling code to implement the leaky bucket
algorithm.
block: Add support for throttling burst
This patch replace the previous algorithm by the well described leaky bucket
algorithm: A bucket is filled by the incoming IOs and a periodic timer decrement
the counter to make the bucket leak. When a given threshold is reached the
bucket is full and the IOs are hold.
In this patch the threshold
---
docs/specs/qcow2.txt | 42 ++
1 file changed, 42 insertions(+)
diff --git a/docs/specs/qcow2.txt b/docs/specs/qcow2.txt
index 36a559d..a4ffc85 100644
--- a/docs/specs/qcow2.txt
+++ b/docs/specs/qcow2.txt
@@ -350,3 +350,45 @@ Snapshot table entry:
structure are comming.
Best regards
Benoît
Benoît Canet (24):
qcow2: Add journal specification.
qcow2: Add deduplication structures and fields.
qcow2: Add journal.
qcow2: Create the log store.
qcow2: Add the hash store.
qcow2: Add the deduplication store.
qcow2: Add
) Nodalink, SARL. 2013
+ *
+ * Author:
+ * Benoît Canet benoit.ca...@irqsave.net
+ *
+ * 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
/qcow2-dedup.c b/block/qcow2-dedup.c
new file mode 100644
index 000..bc6e2c2
--- /dev/null
+++ b/block/qcow2-dedup.c
@@ -0,0 +1,121 @@
+/*
+ * Deduplication for the QCOW2 format
+ *
+ * Copyright (C) Nodalink, SARL. 2012-2013
+ *
+ * Author:
+ * Benoît Canet benoit.ca...@irqsave.net
Signed-off-by: Benoit Canet ben...@irqsave.net
---
block/qcow2-refcount.c | 17 ++---
block/qcow2.h |3 +++
2 files changed, 13 insertions(+), 7 deletions(-)
diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c
index b32738f..3bd8f37 100644
---
+1,587 @@
+/*
+ * QCOW2 journal
+ *
+ * Copyright (C) Nodalink, SARL. 2013
+ *
+ * Author:
+ * Benoît Canet benoit.ca...@irqsave.net
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the Software), to
deal
Signed-off-by: Benoit Canet ben...@irqsave.net
---
block/qcow2-cluster.c |6 --
block/qcow2.h |6 ++
2 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/block/qcow2-cluster.c b/block/qcow2-cluster.c
index c71470a..d6db0b9 100644
--- a/block/qcow2-cluster.c
+++
--git a/block/qcow2-hash-store.c b/block/qcow2-hash-store.c
new file mode 100644
index 000..5284740
--- /dev/null
+++ b/block/qcow2-hash-store.c
@@ -0,0 +1,802 @@
+/*
+ * QCOW2 hash store
+ *
+ * Copyright (C) Nodalink, SARL. 2013
+ *
+ * Author:
+ * Benoît Canet benoit.ca...@irqsave.net
Signed-off-by: Benoit Canet ben...@irqsave.net
---
block/qcow2-dedup.c | 97 ++-
block/qcow2.h |6 +++-
2 files changed, 101 insertions(+), 2 deletions(-)
diff --git a/block/qcow2-dedup.c b/block/qcow2-dedup.c
index 0daf77e..ffbf866
..8e3fad5
--- /dev/null
+++ b/block/qcow2-store.c
@@ -0,0 +1,771 @@
+/*
+ * QCOW2 key value store for SSD storage
+ *
+ * Copyright (C) Nodalink, SARL. 2013
+ *
+ * Author:
+ * Benoît Canet benoit.ca...@irqsave.net
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
Also modify qemu-io-test.
Signed-off-by: Benoit Canet ben...@irqsave.net
---
block/qcow2.c| 176 --
include/block/block_int.h|1 +
tests/qemu-iotests/common.rc |3 +-
3 files changed, 173 insertions(+), 7 deletions(-)
diff
Also factorize detection of libgnutls with vnc tls.
Signed-off-by: Benoit Canet ben...@irqsave.net
---
block/qcow2-dedup.c | 17 +-
configure | 86 +--
2 files changed, 79 insertions(+), 24 deletions(-)
diff --git
Also change callers.
Signed-off-by: Benoit Canet ben...@irqsave.net
---
block/qcow2-cluster.c |2 +-
block/qcow2.c | 43 ++-
block/qcow2.h |7 ---
3 files changed, 27 insertions(+), 25 deletions(-)
diff --git
Signed-off-by: Benoit Canet ben...@irqsave.net
---
block/qcow2-dedup.c | 15 +++
block/qcow2.c |5 +
configure | 35 +++
3 files changed, 55 insertions(+)
diff --git a/block/qcow2-dedup.c b/block/qcow2-dedup.c
index
---
block/qcow2.c | 17 +
1 file changed, 17 insertions(+)
diff --git a/block/qcow2.c b/block/qcow2.c
index f7b94dd..bb7bf74 100644
--- a/block/qcow2.c
+++ b/block/qcow2.c
@@ -569,6 +569,13 @@ static int qcow2_open(BlockDriverState *bs, QDict
*options, int flags)
goto
This patch does allocate on rewrite when deduplication is on.
This get rid of the need of removing the old hash of the lookup structure
when a cluster get rewritten.
The old data is left in place and will be collected/deleted when it's cluster
will reach 0.
Signed-off-by: Benoit Canet
Signed-off-by: Benoit Canet ben...@irqsave.net
---
block/qcow2-dedup.c | 415 +++
block/qcow2.h |5 +
2 files changed, 420 insertions(+)
diff --git a/block/qcow2-dedup.c b/block/qcow2-dedup.c
index bc6e2c2..0daf77e 100644
---
Signed-off-by: Benoit Canet ben...@irqsave.net
---
block/qcow2.c | 53 +
1 file changed, 53 insertions(+)
diff --git a/block/qcow2.c b/block/qcow2.c
index 34b2a87..3cd1051 100644
--- a/block/qcow2.c
+++ b/block/qcow2.c
@@ -54,9 +54,19 @@
A new physical cluster with the same hash value will be used for further
occurrence of this hash.
Signed-off-by: Benoit Canet ben...@irqsave.net
---
block/qcow2-dedup.c | 20
1 file changed, 16 insertions(+), 4 deletions(-)
diff --git a/block/qcow2-dedup.c
Signed-off-by: Benoit Canet ben...@irqsave.net
---
block/qcow2.c | 88 +++--
1 file changed, 86 insertions(+), 2 deletions(-)
diff --git a/block/qcow2.c b/block/qcow2.c
index e1265a2..8eb63f1 100644
--- a/block/qcow2.c
+++ b/block/qcow2.c
@@
Signed-off-by: Benoit Canet ben...@irqsave.net
---
block/qcow2-dedup.c | 60 +++
block/qcow2.c |2 +-
block/qcow2.h |2 ++
3 files changed, 63 insertions(+), 1 deletion(-)
diff --git a/block/qcow2-dedup.c b/block/qcow2-dedup.c
---
tests/qemu-iotests/common |6 ++
1 file changed, 6 insertions(+)
diff --git a/tests/qemu-iotests/common b/tests/qemu-iotests/common
index 6826ea7..2483742 100644
--- a/tests/qemu-iotests/common
+++ b/tests/qemu-iotests/common
@@ -130,6 +130,7 @@ check options
-cow
Signed-off-by: Benoit Canet ben...@irqsave.net
---
block/qcow2.h | 203 -
1 file changed, 201 insertions(+), 2 deletions(-)
diff --git a/block/qcow2.h b/block/qcow2.h
index 9421843..953edfe 100644
--- a/block/qcow2.h
+++ b/block/qcow2.h
@@
Signed-off-by: Benoit Canet ben...@irqsave.net
---
block/qcow2-dedup.c| 45 +
block/qcow2-refcount.c |3 +++
block/qcow2.h |2 ++
3 files changed, 50 insertions(+)
diff --git a/block/qcow2-dedup.c b/block/qcow2-dedup.c
index
101 - 200 of 2243 matches
Mail list logo