* [Qemu-devel] [PATCH] Fix occassional crashes during qcow2 recompression @ 2015-06-23 21:34 Jindřich Makovička 2015-06-23 21:34 ` [Qemu-devel] [PATCH] qcow2: Handle EAGAIN returned from update_refcount Jindřich Makovička 2015-06-25 14:52 ` [Qemu-devel] [PATCH] Fix occassional crashes during qcow2 recompression Stefan Hajnoczi 0 siblings, 2 replies; 7+ messages in thread From: Jindřich Makovička @ 2015-06-23 21:34 UTC (permalink / raw) To: qemu-devel; +Cc: Jindřich Makovička Hi, the following patch adds missing EAGAIN handling in qcow2 code. When the conditions for throwing EAGAIN from the refcount allocator are met, qcow-img image recompression fails with "error while writing sector". Jindřich Makovička (1): qcow2: Handle EAGAIN returned from update_refcount block/qcow2-refcount.c | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) -- 2.1.4 ^ permalink raw reply [flat|nested] 7+ messages in thread
* [Qemu-devel] [PATCH] qcow2: Handle EAGAIN returned from update_refcount 2015-06-23 21:34 [Qemu-devel] [PATCH] Fix occassional crashes during qcow2 recompression Jindřich Makovička @ 2015-06-23 21:34 ` Jindřich Makovička 2015-06-24 5:05 ` Jindřich Makovička 2015-06-25 14:52 ` [Qemu-devel] [PATCH] Fix occassional crashes during qcow2 recompression Stefan Hajnoczi 1 sibling, 1 reply; 7+ messages in thread From: Jindřich Makovička @ 2015-06-23 21:34 UTC (permalink / raw) To: qemu-devel; +Cc: Jindřich Makovička Fixes a crash during image compression Signed-off-by: Jindřich Makovička <makovick@gmail.com> --- block/qcow2-refcount.c | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c index 0632fc3..f8d18e7 100644 --- a/block/qcow2-refcount.c +++ b/block/qcow2-refcount.c @@ -940,19 +940,22 @@ int64_t qcow2_alloc_bytes(BlockDriverState *bs, int size) } free_in_cluster = s->cluster_size - offset_into_cluster(s, offset); - if (!offset || free_in_cluster < size) { - int64_t new_cluster = alloc_clusters_noref(bs, s->cluster_size); - if (new_cluster < 0) { - return new_cluster; - } + do { + if (!offset || free_in_cluster < size) { + int64_t new_cluster = alloc_clusters_noref(bs, s->cluster_size); + if (new_cluster < 0) { + fprintf(stderr, "error getting new cluster\n"); + return new_cluster; + } - if (!offset || ROUND_UP(offset, s->cluster_size) != new_cluster) { - offset = new_cluster; + if (!offset || ROUND_UP(offset, s->cluster_size) != new_cluster) { + offset = new_cluster; + } } - } - assert(offset); - ret = update_refcount(bs, offset, size, 1, false, QCOW2_DISCARD_NEVER); + assert(offset); + ret = update_refcount(bs, offset, size, 1, false, QCOW2_DISCARD_NEVER); + } while (ret == -EAGAIN); if (ret < 0) { return ret; } -- 2.1.4 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [Qemu-devel] [PATCH] qcow2: Handle EAGAIN returned from update_refcount 2015-06-23 21:34 ` [Qemu-devel] [PATCH] qcow2: Handle EAGAIN returned from update_refcount Jindřich Makovička @ 2015-06-24 5:05 ` Jindřich Makovička 2015-06-24 14:15 ` Cole Robinson 2015-06-24 15:26 ` Max Reitz 0 siblings, 2 replies; 7+ messages in thread From: Jindřich Makovička @ 2015-06-24 5:05 UTC (permalink / raw) To: qemu-devel; +Cc: Jindřich Makovička Fixes a crash during image compression Signed-off-by: Jindřich Makovička <makovick@gmail.com> --- block/qcow2-refcount.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c index 0632fc3..b0ee42d 100644 --- a/block/qcow2-refcount.c +++ b/block/qcow2-refcount.c @@ -940,19 +940,21 @@ int64_t qcow2_alloc_bytes(BlockDriverState *bs, int size) } free_in_cluster = s->cluster_size - offset_into_cluster(s, offset); - if (!offset || free_in_cluster < size) { - int64_t new_cluster = alloc_clusters_noref(bs, s->cluster_size); - if (new_cluster < 0) { - return new_cluster; - } + do { + if (!offset || free_in_cluster < size) { + int64_t new_cluster = alloc_clusters_noref(bs, s->cluster_size); + if (new_cluster < 0) { + return new_cluster; + } - if (!offset || ROUND_UP(offset, s->cluster_size) != new_cluster) { - offset = new_cluster; + if (!offset || ROUND_UP(offset, s->cluster_size) != new_cluster) { + offset = new_cluster; + } } - } - assert(offset); - ret = update_refcount(bs, offset, size, 1, false, QCOW2_DISCARD_NEVER); + assert(offset); + ret = update_refcount(bs, offset, size, 1, false, QCOW2_DISCARD_NEVER); + } while (ret == -EAGAIN); if (ret < 0) { return ret; } -- 2.1.4 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [Qemu-devel] [PATCH] qcow2: Handle EAGAIN returned from update_refcount 2015-06-24 5:05 ` Jindřich Makovička @ 2015-06-24 14:15 ` Cole Robinson 2015-06-24 14:22 ` Richard W.M. Jones 2015-06-24 15:26 ` Max Reitz 1 sibling, 1 reply; 7+ messages in thread From: Cole Robinson @ 2015-06-24 14:15 UTC (permalink / raw) To: Jindřich Makovička, qemu-devel; +Cc: Richard W.M. Jones On 06/24/2015 01:05 AM, Jindřich Makovička wrote: > Fixes a crash during image compression > > Signed-off-by: Jindřich Makovička <makovick@gmail.com> > --- > block/qcow2-refcount.c | 22 ++++++++++++---------- > 1 file changed, 12 insertions(+), 10 deletions(-) > Rich Jones already confirmed that this patch fixes a bug he can reliably reproduce: https://bugzilla.redhat.com/show_bug.cgi?id=1214855 - Cole > diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c > index 0632fc3..b0ee42d 100644 > --- a/block/qcow2-refcount.c > +++ b/block/qcow2-refcount.c > @@ -940,19 +940,21 @@ int64_t qcow2_alloc_bytes(BlockDriverState *bs, int size) > } > > free_in_cluster = s->cluster_size - offset_into_cluster(s, offset); > - if (!offset || free_in_cluster < size) { > - int64_t new_cluster = alloc_clusters_noref(bs, s->cluster_size); > - if (new_cluster < 0) { > - return new_cluster; > - } > + do { > + if (!offset || free_in_cluster < size) { > + int64_t new_cluster = alloc_clusters_noref(bs, s->cluster_size); > + if (new_cluster < 0) { > + return new_cluster; > + } > > - if (!offset || ROUND_UP(offset, s->cluster_size) != new_cluster) { > - offset = new_cluster; > + if (!offset || ROUND_UP(offset, s->cluster_size) != new_cluster) { > + offset = new_cluster; > + } > } > - } > > - assert(offset); > - ret = update_refcount(bs, offset, size, 1, false, QCOW2_DISCARD_NEVER); > + assert(offset); > + ret = update_refcount(bs, offset, size, 1, false, QCOW2_DISCARD_NEVER); > + } while (ret == -EAGAIN); > if (ret < 0) { > return ret; > } > ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Qemu-devel] [PATCH] qcow2: Handle EAGAIN returned from update_refcount 2015-06-24 14:15 ` Cole Robinson @ 2015-06-24 14:22 ` Richard W.M. Jones 0 siblings, 0 replies; 7+ messages in thread From: Richard W.M. Jones @ 2015-06-24 14:22 UTC (permalink / raw) To: Cole Robinson; +Cc: Jindřich Makovička, qemu-devel On Wed, Jun 24, 2015 at 10:15:21AM -0400, Cole Robinson wrote: > On 06/24/2015 01:05 AM, Jindřich Makovička wrote: > > Fixes a crash during image compression > > > > Signed-off-by: Jindřich Makovička <makovick@gmail.com> > > --- > > block/qcow2-refcount.c | 22 ++++++++++++---------- > > 1 file changed, 12 insertions(+), 10 deletions(-) > > > > Rich Jones already confirmed that this patch fixes a bug he can reliably > reproduce: > > https://bugzilla.redhat.com/show_bug.cgi?id=1214855 Confirmed. You can add Tested-by: Richard W.M. Jones <rjones@redhat.com> to this patch. Also note that if you view the patch without whitespace changes (eg. git diff -b) then it's actually quite simple. Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com virt-df lists disk usage of guests without needing to install any software inside the virtual machine. Supports Linux and Windows. http://people.redhat.com/~rjones/virt-df/ ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Qemu-devel] [PATCH] qcow2: Handle EAGAIN returned from update_refcount 2015-06-24 5:05 ` Jindřich Makovička 2015-06-24 14:15 ` Cole Robinson @ 2015-06-24 15:26 ` Max Reitz 1 sibling, 0 replies; 7+ messages in thread From: Max Reitz @ 2015-06-24 15:26 UTC (permalink / raw) To: Jindřich Makovička, qemu-devel, qemu-block Cc: Kevin Wolf, Stefan Hajnoczi On 24.06.2015 07:05, Jindřich Makovička wrote: > Fixes a crash during image compression > > Signed-off-by: Jindřich Makovička <makovick@gmail.com> > --- > block/qcow2-refcount.c | 22 ++++++++++++---------- > 1 file changed, 12 insertions(+), 10 deletions(-) Reviewed-by: Max Reitz <mreitz@redhat.com> ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Qemu-devel] [PATCH] Fix occassional crashes during qcow2 recompression 2015-06-23 21:34 [Qemu-devel] [PATCH] Fix occassional crashes during qcow2 recompression Jindřich Makovička 2015-06-23 21:34 ` [Qemu-devel] [PATCH] qcow2: Handle EAGAIN returned from update_refcount Jindřich Makovička @ 2015-06-25 14:52 ` Stefan Hajnoczi 1 sibling, 0 replies; 7+ messages in thread From: Stefan Hajnoczi @ 2015-06-25 14:52 UTC (permalink / raw) To: Jindřich Makovička; +Cc: qemu-devel [-- Attachment #1: Type: text/plain, Size: 635 bytes --] On Tue, Jun 23, 2015 at 11:34:48PM +0200, Jindřich Makovička wrote: > Hi, > > the following patch adds missing EAGAIN handling in qcow2 code. > > When the conditions for throwing EAGAIN from the refcount allocator > are met, qcow-img image recompression fails with "error while writing > sector". > > Jindřich Makovička (1): > qcow2: Handle EAGAIN returned from update_refcount > > block/qcow2-refcount.c | 23 +++++++++++++---------- > 1 file changed, 13 insertions(+), 10 deletions(-) > > -- > 2.1.4 > > Thanks, applied to my block tree: https://github.com/stefanha/qemu/commits/block Stefan [-- Attachment #2: Type: application/pgp-signature, Size: 473 bytes --] ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2015-06-25 14:52 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2015-06-23 21:34 [Qemu-devel] [PATCH] Fix occassional crashes during qcow2 recompression Jindřich Makovička 2015-06-23 21:34 ` [Qemu-devel] [PATCH] qcow2: Handle EAGAIN returned from update_refcount Jindřich Makovička 2015-06-24 5:05 ` Jindřich Makovička 2015-06-24 14:15 ` Cole Robinson 2015-06-24 14:22 ` Richard W.M. Jones 2015-06-24 15:26 ` Max Reitz 2015-06-25 14:52 ` [Qemu-devel] [PATCH] Fix occassional crashes during qcow2 recompression Stefan Hajnoczi
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).