All of lore.kernel.org
 help / color / mirror / Atom feed
From: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
To: qemu-block@nongnu.org
Cc: fam@euphon.net, kwolf@redhat.com, vsementsov@virtuozzo.com,
	berto@igalia.com, qemu-devel@nongnu.org, mreitz@redhat.com,
	stefanha@redhat.com, den@openvz.org
Subject: [PATCH v4 04/16] block/io: refactor bdrv_pad_request(): move bdrv_pad_request() up
Date: Fri, 11 Dec 2020 21:39:22 +0300	[thread overview]
Message-ID: <20201211183934.169161-5-vsementsov@virtuozzo.com> (raw)
In-Reply-To: <20201211183934.169161-1-vsementsov@virtuozzo.com>

Prepare to the following patch when bdrv_pad_request() will be able to
fail. Update the comments.

Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
---
 block/io.c | 25 +++++++++++++++++++------
 1 file changed, 19 insertions(+), 6 deletions(-)

diff --git a/block/io.c b/block/io.c
index d9bc67f1b0..dcfab267f8 100644
--- a/block/io.c
+++ b/block/io.c
@@ -2107,6 +2107,7 @@ int coroutine_fn bdrv_co_pwritev_part(BdrvChild *child,
     uint64_t align = bs->bl.request_alignment;
     BdrvRequestPadding pad;
     int ret;
+    bool padded = false;
 
     trace_bdrv_co_pwritev(child->bs, offset, bytes, flags);
 
@@ -2138,20 +2139,32 @@ int coroutine_fn bdrv_co_pwritev_part(BdrvChild *child,
         return 0;
     }
 
+    if (!(flags & BDRV_REQ_ZERO_WRITE)) {
+        /*
+         * Pad request for following read-modify-write cycle.
+         * bdrv_co_do_zero_pwritev() does aligning by itself, so, we do
+         * alignment only if there is no ZERO flag.
+         */
+        padded = bdrv_pad_request(bs, &qiov, &qiov_offset, &offset, &bytes,
+                                  &pad);
+    }
+
     bdrv_inc_in_flight(bs);
-    /*
-     * Align write if necessary by performing a read-modify-write cycle.
-     * Pad qiov with the read parts and be sure to have a tracked request not
-     * only for bdrv_aligned_pwritev, but also for the reads of the RMW cycle.
-     */
     tracked_request_begin(&req, bs, offset, bytes, BDRV_TRACKED_WRITE);
 
     if (flags & BDRV_REQ_ZERO_WRITE) {
+        assert(!padded);
         ret = bdrv_co_do_zero_pwritev(child, offset, bytes, flags, &req);
         goto out;
     }
 
-    if (bdrv_pad_request(bs, &qiov, &qiov_offset, &offset, &bytes, &pad)) {
+    if (padded) {
+        /*
+         * Request was unaligned to request_alignment and therefore padded.
+         * We are going to do read-modify-write. User is not prepared to widened
+         * request intersections with other requests, so we serialize the
+         * request.
+         */
         bdrv_mark_request_serialising(&req, align);
         bdrv_padding_rmw_read(child, &req, &pad, false);
     }
-- 
2.25.4



  parent reply	other threads:[~2020-12-11 18:59 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-11 18:39 [PATCH v4 00/16] 64bit block-layer: part I Vladimir Sementsov-Ogievskiy
2020-12-11 18:39 ` [PATCH v4 01/16] block: refactor bdrv_check_request: add errp Vladimir Sementsov-Ogievskiy
2021-01-20 22:20   ` Eric Blake
2021-01-22 19:33   ` Eric Blake
2020-12-11 18:39 ` [PATCH v4 02/16] util/iov: make qemu_iovec_init_extended() honest Vladimir Sementsov-Ogievskiy
2021-01-21 21:58   ` Eric Blake
2020-12-11 18:39 ` [PATCH v4 03/16] block: fix theoretical overflow in bdrv_init_padding() Vladimir Sementsov-Ogievskiy
2021-01-21 22:42   ` Eric Blake
2020-12-11 18:39 ` Vladimir Sementsov-Ogievskiy [this message]
2021-01-21 22:50   ` [PATCH v4 04/16] block/io: refactor bdrv_pad_request(): move bdrv_pad_request() up Eric Blake
2020-12-11 18:39 ` [PATCH v4 05/16] block/io: bdrv_pad_request(): support qemu_iovec_init_extended failure Vladimir Sementsov-Ogievskiy
2021-01-21 22:53   ` Eric Blake
2020-12-11 18:39 ` [PATCH v4 06/16] block/throttle-groups: throttle_group_co_io_limits_intercept(): 64bit bytes Vladimir Sementsov-Ogievskiy
2020-12-11 18:39 ` [PATCH v4 07/16] block/io: improve bdrv_check_request: check qiov too Vladimir Sementsov-Ogievskiy
2021-01-22 14:48   ` Eric Blake
2020-12-11 18:39 ` [PATCH v4 08/16] block: use int64_t as bytes type in tracked requests Vladimir Sementsov-Ogievskiy
2021-01-22 14:50   ` Eric Blake
2020-12-11 18:39 ` [PATCH v4 09/16] block/io: use int64_t bytes in driver wrappers Vladimir Sementsov-Ogievskiy
2021-01-22 16:02   ` Eric Blake
2020-12-11 18:39 ` [PATCH v4 10/16] block/io: support int64_t bytes in bdrv_co_do_pwrite_zeroes() Vladimir Sementsov-Ogievskiy
2021-01-22 16:18   ` Eric Blake
2020-12-11 18:39 ` [PATCH v4 11/16] block/io: support int64_t bytes in bdrv_aligned_pwritev() Vladimir Sementsov-Ogievskiy
2021-01-22 16:26   ` Eric Blake
2020-12-11 18:39 ` [PATCH v4 12/16] block/io: support int64_t bytes in bdrv_co_do_copy_on_readv() Vladimir Sementsov-Ogievskiy
2021-01-22 16:34   ` Eric Blake
2020-12-11 18:39 ` [PATCH v4 13/16] block/io: support int64_t bytes in bdrv_aligned_preadv() Vladimir Sementsov-Ogievskiy
2021-01-22 16:54   ` Eric Blake
2021-01-23 14:34     ` Vladimir Sementsov-Ogievskiy
2020-12-11 18:39 ` [PATCH v4 14/16] block/io: support int64_t bytes in bdrv_co_p{read, write}v_part() Vladimir Sementsov-Ogievskiy via
2021-01-22 17:00   ` [PATCH v4 14/16] block/io: support int64_t bytes in bdrv_co_p{read,write}v_part() Eric Blake
2020-12-11 18:39 ` [PATCH v4 15/16] block/io: support int64_t bytes in read/write wrappers Vladimir Sementsov-Ogievskiy
2021-01-22 17:22   ` Eric Blake
2020-12-11 18:39 ` [PATCH v4 16/16] block/io: use int64_t bytes in copy_range Vladimir Sementsov-Ogievskiy
2021-01-22 18:29   ` Eric Blake
2020-12-14 11:51 ` [PATCH v4 00/16] 64bit block-layer: part I Vladimir Sementsov-Ogievskiy
2021-01-09 10:13 ` Vladimir Sementsov-Ogievskiy
2021-02-02  2:56 ` Eric Blake
2021-02-02  6:50   ` Vladimir Sementsov-Ogievskiy
2021-02-02 14:59   ` Eric Blake
2021-02-02 16:13   ` iotest failures in head [was: [PATCH v4 00/16] 64bit block-layer: part I] Eric Blake
2021-02-02 16:23     ` Kevin Wolf
2021-02-02 16:29       ` Vladimir Sementsov-Ogievskiy
2021-02-02 18:50         ` Vladimir Sementsov-Ogievskiy
2021-02-02 22:47         ` Peter Maydell
2021-02-03 10:45           ` Peter Maydell
2021-02-04 15:18             ` 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=20201211183934.169161-5-vsementsov@virtuozzo.com \
    --to=vsementsov@virtuozzo.com \
    --cc=berto@igalia.com \
    --cc=den@openvz.org \
    --cc=fam@euphon.net \
    --cc=kwolf@redhat.com \
    --cc=mreitz@redhat.com \
    --cc=qemu-block@nongnu.org \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.