qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Hanna Reitz <hreitz@redhat.com>
To: qemu-block@nongnu.org
Cc: Kevin Wolf <kwolf@redhat.com>,
	Peter Maydell <peter.maydell@linaro.org>,
	Hanna Reitz <hreitz@redhat.com>,
	qemu-devel@nongnu.org
Subject: [PULL 02/25] block/rbd: fix write zeroes with growing images
Date: Tue, 22 Mar 2022 12:56:24 +0100	[thread overview]
Message-ID: <20220322115647.726044-3-hreitz@redhat.com> (raw)
In-Reply-To: <20220322115647.726044-1-hreitz@redhat.com>

From: Stefano Garzarella <sgarzare@redhat.com>

Commit d24f80234b ("block/rbd: increase dynamically the image size")
added a workaround to support growing images (eg. qcow2), resizing
the image before write operations that exceed the current size.

We recently added support for write zeroes and without the
workaround we can have problems with qcow2.

So let's move the resize into qemu_rbd_start_co() and do it when
the command is RBD_AIO_WRITE or RBD_AIO_WRITE_ZEROES.

Buglink: https://bugzilla.redhat.com/show_bug.cgi?id=2020993
Fixes: c56ac27d2a ("block/rbd: add write zeroes support")
Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
Message-Id: <20220317162638.41192-1-sgarzare@redhat.com>
Signed-off-by: Hanna Reitz <hreitz@redhat.com>
---
 block/rbd.c | 26 ++++++++++++++------------
 1 file changed, 14 insertions(+), 12 deletions(-)

diff --git a/block/rbd.c b/block/rbd.c
index 8f183eba2a..6caf35cbba 100644
--- a/block/rbd.c
+++ b/block/rbd.c
@@ -1107,6 +1107,20 @@ static int coroutine_fn qemu_rbd_start_co(BlockDriverState *bs,
 
     assert(!qiov || qiov->size == bytes);
 
+    if (cmd == RBD_AIO_WRITE || cmd == RBD_AIO_WRITE_ZEROES) {
+        /*
+         * RBD APIs don't allow us to write more than actual size, so in order
+         * to support growing images, we resize the image before write
+         * operations that exceed the current size.
+         */
+        if (offset + bytes > s->image_size) {
+            int r = qemu_rbd_resize(bs, offset + bytes);
+            if (r < 0) {
+                return r;
+            }
+        }
+    }
+
     r = rbd_aio_create_completion(&task,
                                   (rbd_callback_t) qemu_rbd_completion_cb, &c);
     if (r < 0) {
@@ -1182,18 +1196,6 @@ coroutine_fn qemu_rbd_co_pwritev(BlockDriverState *bs, int64_t offset,
                                  int64_t bytes, QEMUIOVector *qiov,
                                  BdrvRequestFlags flags)
 {
-    BDRVRBDState *s = bs->opaque;
-    /*
-     * RBD APIs don't allow us to write more than actual size, so in order
-     * to support growing images, we resize the image before write
-     * operations that exceed the current size.
-     */
-    if (offset + bytes > s->image_size) {
-        int r = qemu_rbd_resize(bs, offset + bytes);
-        if (r < 0) {
-            return r;
-        }
-    }
     return qemu_rbd_start_co(bs, offset, bytes, qiov, flags, RBD_AIO_WRITE);
 }
 
-- 
2.35.1



  parent reply	other threads:[~2022-03-22 11:58 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-03-22 11:56 [PULL 00/25] Block patches for 7.0-rc1 Hanna Reitz
2022-03-22 11:56 ` [PULL 01/25] tests: add (riscv virt) machine mapping to testenv Hanna Reitz
2022-03-22 11:56 ` Hanna Reitz [this message]
2022-03-22 11:56 ` [PULL 03/25] tests/qemu-iotests: Use GNU sed in two more spots where it is necessary Hanna Reitz
2022-03-22 11:56 ` [PULL 04/25] tests: Do not treat the iotests as separate meson test target anymore Hanna Reitz
2022-03-22 11:56 ` [PULL 05/25] tests/qemu-iotests/testrunner: Supply a test plan in TAP mode Hanna Reitz
2022-03-22 11:56 ` [PULL 06/25] python/utils: add add_visual_margin() text decoration utility Hanna Reitz
2022-03-22 11:56 ` [PULL 07/25] python/utils: add VerboseProcessError Hanna Reitz
2022-03-22 11:56 ` [PULL 08/25] iotests: Remove explicit checks for qemu_img() == 0 Hanna Reitz
2022-03-22 11:56 ` [PULL 09/25] iotests: make qemu_img raise on non-zero rc by default Hanna Reitz
2022-03-22 11:56 ` [PULL 10/25] iotests: fortify compare_images() against crashes Hanna Reitz
2022-03-22 11:56 ` [PULL 11/25] iotests: add qemu_img_json() Hanna Reitz
2022-03-22 11:56 ` [PULL 12/25] iotests: use qemu_img_json() when applicable Hanna Reitz
2022-03-22 11:56 ` [PULL 13/25] iotests: add qemu_img_info() Hanna Reitz
2022-03-22 11:56 ` [PULL 14/25] iotests/remove-bitmap-from-backing: use qemu_img_info() Hanna Reitz
2022-03-22 11:56 ` [PULL 15/25] iotests: add qemu_img_map() function Hanna Reitz
2022-03-22 11:56 ` [PULL 16/25] iotests: change supports_quorum to use qemu_img Hanna Reitz
2022-03-22 11:56 ` [PULL 17/25] iotests: replace unchecked calls to qemu_img_pipe() Hanna Reitz
2022-03-22 11:56 ` [PULL 18/25] iotests/149: Remove qemu_img_pipe() call Hanna Reitz
2022-03-22 11:56 ` [PULL 19/25] iotests: remove remaining calls to qemu_img_pipe() Hanna Reitz
2022-03-22 11:56 ` [PULL 20/25] iotests: use qemu_img() in has_working_luks() Hanna Reitz
2022-03-22 11:56 ` [PULL 21/25] iotests: replace qemu_img_log('create', ...) calls Hanna Reitz
2022-03-22 11:56 ` [PULL 22/25] iotests: remove qemu_img_pipe_and_status() Hanna Reitz
2022-03-22 11:56 ` [PULL 23/25] iotests: make qemu_img_log and img_info_log raise on error Hanna Reitz
2022-03-22 11:56 ` [PULL 24/25] iotests.py: Filters for VM.run_job() Hanna Reitz
2022-03-22 11:56 ` [PULL 25/25] iotests/207: Filter host fingerprint Hanna Reitz
2022-03-22 17:05 ` [PULL 00/25] Block patches for 7.0-rc1 Peter Maydell

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=20220322115647.726044-3-hreitz@redhat.com \
    --to=hreitz@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-block@nongnu.org \
    --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).