All of lore.kernel.org
 help / color / mirror / Atom feed
From: Max Reitz <mreitz@redhat.com>
To: qemu-block@nongnu.org
Cc: Kevin Wolf <kwolf@redhat.com>,
	Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>,
	qemu-devel@nongnu.org, Max Reitz <mreitz@redhat.com>
Subject: [Qemu-devel] [PATCH v5 34/42] block: Inline bdrv_co_block_status_from_*()
Date: Thu, 13 Jun 2019 00:09:56 +0200	[thread overview]
Message-ID: <20190612221004.2317-35-mreitz@redhat.com> (raw)
In-Reply-To: <20190612221004.2317-1-mreitz@redhat.com>

With bdrv_filtered_rw_bs(), we can easily handle this default filter
behavior in bdrv_co_block_status().

blkdebug wants to have an additional assertion, so it keeps its own
implementation, except bdrv_co_block_status_from_file() needs to be
inlined there.

Suggested-by: Eric Blake <eblake@redhat.com>
Signed-off-by: Max Reitz <mreitz@redhat.com>
---
 include/block/block_int.h | 22 -----------------
 block/blkdebug.c          |  7 ++++--
 block/blklogwrites.c      |  1 -
 block/commit.c            |  1 -
 block/copy-on-read.c      |  2 --
 block/io.c                | 51 +++++++++++++--------------------------
 block/mirror.c            |  1 -
 block/throttle.c          |  1 -
 8 files changed, 22 insertions(+), 64 deletions(-)

diff --git a/include/block/block_int.h b/include/block/block_int.h
index cfefb00104..431fa38ea0 100644
--- a/include/block/block_int.h
+++ b/include/block/block_int.h
@@ -1203,28 +1203,6 @@ void bdrv_format_default_perms(BlockDriverState *bs, BdrvChild *c,
                                uint64_t perm, uint64_t shared,
                                uint64_t *nperm, uint64_t *nshared);
 
-/*
- * Default implementation for drivers to pass bdrv_co_block_status() to
- * their file.
- */
-int coroutine_fn bdrv_co_block_status_from_file(BlockDriverState *bs,
-                                                bool want_zero,
-                                                int64_t offset,
-                                                int64_t bytes,
-                                                int64_t *pnum,
-                                                int64_t *map,
-                                                BlockDriverState **file);
-/*
- * Default implementation for drivers to pass bdrv_co_block_status() to
- * their backing file.
- */
-int coroutine_fn bdrv_co_block_status_from_backing(BlockDriverState *bs,
-                                                   bool want_zero,
-                                                   int64_t offset,
-                                                   int64_t bytes,
-                                                   int64_t *pnum,
-                                                   int64_t *map,
-                                                   BlockDriverState **file);
 const char *bdrv_get_parent_name(const BlockDriverState *bs);
 void blk_dev_change_media_cb(BlockBackend *blk, bool load, Error **errp);
 bool blk_dev_has_removable_media(BlockBackend *blk);
diff --git a/block/blkdebug.c b/block/blkdebug.c
index efd9441625..7950ae729c 100644
--- a/block/blkdebug.c
+++ b/block/blkdebug.c
@@ -637,8 +637,11 @@ static int coroutine_fn blkdebug_co_block_status(BlockDriverState *bs,
                                                  BlockDriverState **file)
 {
     assert(QEMU_IS_ALIGNED(offset | bytes, bs->bl.request_alignment));
-    return bdrv_co_block_status_from_file(bs, want_zero, offset, bytes,
-                                          pnum, map, file);
+    assert(bs->file && bs->file->bs);
+    *pnum = bytes;
+    *map = offset;
+    *file = bs->file->bs;
+    return BDRV_BLOCK_RAW | BDRV_BLOCK_OFFSET_VALID;
 }
 
 static void blkdebug_close(BlockDriverState *bs)
diff --git a/block/blklogwrites.c b/block/blklogwrites.c
index eb2b4901a5..1eb4a5c613 100644
--- a/block/blklogwrites.c
+++ b/block/blklogwrites.c
@@ -518,7 +518,6 @@ static BlockDriver bdrv_blk_log_writes = {
     .bdrv_co_pwrite_zeroes  = blk_log_writes_co_pwrite_zeroes,
     .bdrv_co_flush_to_disk  = blk_log_writes_co_flush_to_disk,
     .bdrv_co_pdiscard       = blk_log_writes_co_pdiscard,
-    .bdrv_co_block_status   = bdrv_co_block_status_from_file,
 
     .is_filter              = true,
     .strong_runtime_opts    = blk_log_writes_strong_runtime_opts,
diff --git a/block/commit.c b/block/commit.c
index ec5a8c8edf..a5b58eadeb 100644
--- a/block/commit.c
+++ b/block/commit.c
@@ -257,7 +257,6 @@ static void bdrv_commit_top_child_perm(BlockDriverState *bs, BdrvChild *c,
 static BlockDriver bdrv_commit_top = {
     .format_name                = "commit_top",
     .bdrv_co_preadv             = bdrv_commit_top_preadv,
-    .bdrv_co_block_status       = bdrv_co_block_status_from_backing,
     .bdrv_refresh_filename      = bdrv_commit_top_refresh_filename,
     .bdrv_child_perm            = bdrv_commit_top_child_perm,
 
diff --git a/block/copy-on-read.c b/block/copy-on-read.c
index 88e1c1f538..5a292de000 100644
--- a/block/copy-on-read.c
+++ b/block/copy-on-read.c
@@ -161,8 +161,6 @@ static BlockDriver bdrv_copy_on_read = {
     .bdrv_eject                         = cor_eject,
     .bdrv_lock_medium                   = cor_lock_medium,
 
-    .bdrv_co_block_status               = bdrv_co_block_status_from_file,
-
     .bdrv_recurse_is_first_non_filter   = cor_recurse_is_first_non_filter,
 
     .has_variable_length                = true,
diff --git a/block/io.c b/block/io.c
index 14f99e1c00..0a832e30a3 100644
--- a/block/io.c
+++ b/block/io.c
@@ -1998,36 +1998,6 @@ typedef struct BdrvCoBlockStatusData {
     bool done;
 } BdrvCoBlockStatusData;
 
-int coroutine_fn bdrv_co_block_status_from_file(BlockDriverState *bs,
-                                                bool want_zero,
-                                                int64_t offset,
-                                                int64_t bytes,
-                                                int64_t *pnum,
-                                                int64_t *map,
-                                                BlockDriverState **file)
-{
-    assert(bs->file && bs->file->bs);
-    *pnum = bytes;
-    *map = offset;
-    *file = bs->file->bs;
-    return BDRV_BLOCK_RAW | BDRV_BLOCK_OFFSET_VALID;
-}
-
-int coroutine_fn bdrv_co_block_status_from_backing(BlockDriverState *bs,
-                                                   bool want_zero,
-                                                   int64_t offset,
-                                                   int64_t bytes,
-                                                   int64_t *pnum,
-                                                   int64_t *map,
-                                                   BlockDriverState **file)
-{
-    assert(bs->backing && bs->backing->bs);
-    *pnum = bytes;
-    *map = offset;
-    *file = bs->backing->bs;
-    return BDRV_BLOCK_RAW | BDRV_BLOCK_OFFSET_VALID;
-}
-
 /*
  * Returns the allocation status of the specified sectors.
  * Drivers not implementing the functionality are assumed to not support
@@ -2068,6 +2038,7 @@ static int coroutine_fn bdrv_co_block_status(BlockDriverState *bs,
     BlockDriverState *local_file = NULL;
     int64_t aligned_offset, aligned_bytes;
     uint32_t align;
+    bool has_filtered_child;
 
     assert(pnum);
     *pnum = 0;
@@ -2093,7 +2064,8 @@ static int coroutine_fn bdrv_co_block_status(BlockDriverState *bs,
 
     /* Must be non-NULL or bdrv_getlength() would have failed */
     assert(bs->drv);
-    if (!bs->drv->bdrv_co_block_status) {
+    has_filtered_child = bs->drv->is_filter && bdrv_filtered_rw_child(bs);
+    if (!bs->drv->bdrv_co_block_status && !has_filtered_child) {
         *pnum = bytes;
         ret = BDRV_BLOCK_DATA | BDRV_BLOCK_ALLOCATED;
         if (offset + bytes == total_size) {
@@ -2114,9 +2086,20 @@ static int coroutine_fn bdrv_co_block_status(BlockDriverState *bs,
     aligned_offset = QEMU_ALIGN_DOWN(offset, align);
     aligned_bytes = ROUND_UP(offset + bytes, align) - aligned_offset;
 
-    ret = bs->drv->bdrv_co_block_status(bs, want_zero, aligned_offset,
-                                        aligned_bytes, pnum, &local_map,
-                                        &local_file);
+    if (bs->drv->bdrv_co_block_status) {
+        ret = bs->drv->bdrv_co_block_status(bs, want_zero, aligned_offset,
+                                            aligned_bytes, pnum, &local_map,
+                                            &local_file);
+    } else {
+        /* Default code for filters */
+
+        local_file = bdrv_filtered_rw_bs(bs);
+        assert(local_file);
+
+        *pnum = aligned_bytes;
+        local_map = aligned_offset;
+        ret = BDRV_BLOCK_RAW | BDRV_BLOCK_OFFSET_VALID;
+    }
     if (ret < 0) {
         *pnum = 0;
         goto out;
diff --git a/block/mirror.c b/block/mirror.c
index 3d767e3030..71bd7f7625 100644
--- a/block/mirror.c
+++ b/block/mirror.c
@@ -1484,7 +1484,6 @@ static BlockDriver bdrv_mirror_top = {
     .bdrv_co_pwrite_zeroes      = bdrv_mirror_top_pwrite_zeroes,
     .bdrv_co_pdiscard           = bdrv_mirror_top_pdiscard,
     .bdrv_co_flush              = bdrv_mirror_top_flush,
-    .bdrv_co_block_status       = bdrv_co_block_status_from_backing,
     .bdrv_refresh_filename      = bdrv_mirror_top_refresh_filename,
     .bdrv_child_perm            = bdrv_mirror_top_child_perm,
 
diff --git a/block/throttle.c b/block/throttle.c
index de1b6bd7e8..32ec56db0f 100644
--- a/block/throttle.c
+++ b/block/throttle.c
@@ -269,7 +269,6 @@ static BlockDriver bdrv_throttle = {
     .bdrv_reopen_prepare                =   throttle_reopen_prepare,
     .bdrv_reopen_commit                 =   throttle_reopen_commit,
     .bdrv_reopen_abort                  =   throttle_reopen_abort,
-    .bdrv_co_block_status               =   bdrv_co_block_status_from_file,
 
     .bdrv_co_drain_begin                =   throttle_co_drain_begin,
     .bdrv_co_drain_end                  =   throttle_co_drain_end,
-- 
2.21.0



  parent reply	other threads:[~2019-06-12 22:49 UTC|newest]

Thread overview: 113+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-06-12 22:09 [Qemu-devel] [PATCH v5 00/42] block: Deal with filters Max Reitz
2019-06-12 22:09 ` [Qemu-devel] [PATCH v5 01/42] block: Mark commit and mirror as filter drivers Max Reitz
2019-06-13 10:47   ` Vladimir Sementsov-Ogievskiy
2019-06-12 22:09 ` [Qemu-devel] [PATCH v5 02/42] copy-on-read: Support compressed writes Max Reitz
2019-06-13 10:49   ` Vladimir Sementsov-Ogievskiy
2019-06-12 22:09 ` [Qemu-devel] [PATCH v5 03/42] throttle: " Max Reitz
2019-06-13 10:51   ` Vladimir Sementsov-Ogievskiy
2019-06-12 22:09 ` [Qemu-devel] [PATCH v5 04/42] block: Add child access functions Max Reitz
2019-06-13 12:15   ` Vladimir Sementsov-Ogievskiy
2019-06-12 22:09 ` [Qemu-devel] [PATCH v5 05/42] block: Add chain helper functions Max Reitz
2019-06-13 12:26   ` Vladimir Sementsov-Ogievskiy
2019-06-13 12:33     ` Max Reitz
2019-06-13 12:39       ` Vladimir Sementsov-Ogievskiy
2019-06-12 22:09 ` [Qemu-devel] [PATCH v5 06/42] qcow2: Implement .bdrv_storage_child() Max Reitz
2019-06-13 12:27   ` Vladimir Sementsov-Ogievskiy
2019-06-12 22:09 ` [Qemu-devel] [PATCH v5 07/42] block: *filtered_cow_child() for *has_zero_init() Max Reitz
2019-06-13 12:34   ` Vladimir Sementsov-Ogievskiy
2019-06-12 22:09 ` [Qemu-devel] [PATCH v5 08/42] block: bdrv_set_backing_hd() is about bs->backing Max Reitz
2019-06-13 12:40   ` Vladimir Sementsov-Ogievskiy
2019-06-12 22:09 ` [Qemu-devel] [PATCH v5 09/42] block: Include filters when freezing backing chain Max Reitz
2019-06-13 13:04   ` Vladimir Sementsov-Ogievskiy
2019-06-13 14:05     ` Max Reitz
2019-06-12 22:09 ` [Qemu-devel] [PATCH v5 10/42] block: Use CAF in bdrv_is_encrypted() Max Reitz
2019-06-13 13:16   ` Vladimir Sementsov-Ogievskiy
2019-06-13 14:15     ` Max Reitz
2019-06-12 22:09 ` [Qemu-devel] [PATCH v5 11/42] block: Add bdrv_supports_compressed_writes() Max Reitz
2019-06-13 13:29   ` Vladimir Sementsov-Ogievskiy
2019-06-13 14:19     ` Max Reitz
2019-06-12 22:09 ` [Qemu-devel] [PATCH v5 12/42] block: Use bdrv_filtered_rw* where obvious Max Reitz
2019-06-13 13:37   ` Vladimir Sementsov-Ogievskiy
2019-06-12 22:09 ` [Qemu-devel] [PATCH v5 13/42] block: Use CAFs in block status functions Max Reitz
2019-06-14 12:07   ` Vladimir Sementsov-Ogievskiy
2019-06-12 22:09 ` [Qemu-devel] [PATCH v5 14/42] block: Use CAFs when working with backing chains Max Reitz
2019-06-14 13:26   ` Vladimir Sementsov-Ogievskiy
2019-06-14 13:50     ` Max Reitz
2019-06-14 14:31       ` Vladimir Sementsov-Ogievskiy
2019-06-14 16:02         ` Max Reitz
2019-06-14 16:39           ` Vladimir Sementsov-Ogievskiy
2019-06-12 22:09 ` [Qemu-devel] [PATCH v5 15/42] block: Re-evaluate backing file handling in reopen Max Reitz
2019-06-14 13:42   ` Vladimir Sementsov-Ogievskiy
2019-06-14 15:52     ` Max Reitz
2019-06-14 16:43       ` Vladimir Sementsov-Ogievskiy
2019-06-12 22:09 ` [Qemu-devel] [PATCH v5 16/42] block: Use child access functions when flushing Max Reitz
2019-06-14 14:01   ` Vladimir Sementsov-Ogievskiy
2019-06-14 15:55     ` Max Reitz
2019-06-12 22:09 ` [Qemu-devel] [PATCH v5 17/42] block: Use CAFs in bdrv_refresh_limits() Max Reitz
2019-06-14 15:04   ` Vladimir Sementsov-Ogievskiy
2019-06-12 22:09 ` [Qemu-devel] [PATCH v5 18/42] block: Use CAFs in bdrv_refresh_filename() Max Reitz
2019-06-12 22:09 ` [Qemu-devel] [PATCH v5 19/42] block: Use CAF in bdrv_co_rw_vmstate() Max Reitz
2019-06-14 15:14   ` Vladimir Sementsov-Ogievskiy
2019-06-12 22:09 ` [Qemu-devel] [PATCH v5 20/42] block/snapshot: Fall back to storage child Max Reitz
2019-06-14 15:22   ` Vladimir Sementsov-Ogievskiy
2019-06-14 16:10     ` Max Reitz
2019-06-14 16:47       ` Vladimir Sementsov-Ogievskiy
2019-06-12 22:09 ` [Qemu-devel] [PATCH v5 21/42] block: Use CAFs for debug breakpoints Max Reitz
2019-06-14 15:29   ` Vladimir Sementsov-Ogievskiy
2019-06-14 16:12     ` Max Reitz
2019-06-14 20:28       ` Eric Blake
2019-06-12 22:09 ` [Qemu-devel] [PATCH v5 22/42] block: Use CAFs in bdrv_get_allocated_file_size() Max Reitz
2019-06-12 22:17   ` Max Reitz
2019-06-14 15:41   ` Vladimir Sementsov-Ogievskiy
2019-06-14 16:15     ` Max Reitz
2019-06-12 22:09 ` [Qemu-devel] [PATCH v5 23/42] blockdev: Use CAF in external_snapshot_prepare() Max Reitz
2019-06-14 15:46   ` Vladimir Sementsov-Ogievskiy
2019-06-14 16:20     ` Max Reitz
2019-06-14 16:58       ` Vladimir Sementsov-Ogievskiy
2019-06-12 22:09 ` [Qemu-devel] [PATCH v5 24/42] block: Use child access functions for QAPI queries Max Reitz
2019-06-18 12:06   ` Vladimir Sementsov-Ogievskiy
2019-06-18 14:22     ` Max Reitz
2019-06-12 22:09 ` [Qemu-devel] [PATCH v5 25/42] mirror: Deal with filters Max Reitz
2019-06-18 13:12   ` Vladimir Sementsov-Ogievskiy
2019-06-18 14:47     ` Max Reitz
2019-06-18 14:55       ` Vladimir Sementsov-Ogievskiy
2019-06-18 15:20         ` Max Reitz
2019-06-12 22:09 ` [Qemu-devel] [PATCH v5 26/42] backup: " Max Reitz
2019-06-18 13:45   ` Vladimir Sementsov-Ogievskiy
2019-06-12 22:09 ` [Qemu-devel] [PATCH v5 27/42] commit: " Max Reitz
2019-06-12 22:09 ` [Qemu-devel] [PATCH v5 28/42] stream: " Max Reitz
2019-06-12 22:09 ` [Qemu-devel] [PATCH v5 29/42] nbd: Use CAF when looking for dirty bitmap Max Reitz
2019-06-18 13:58   ` Vladimir Sementsov-Ogievskiy
2019-06-18 14:48   ` Eric Blake
2019-06-12 22:09 ` [Qemu-devel] [PATCH v5 30/42] qemu-img: Use child access functions Max Reitz
2019-06-19  9:18   ` Vladimir Sementsov-Ogievskiy
2019-06-19 15:49     ` Max Reitz
2019-06-21 13:15       ` Vladimir Sementsov-Ogievskiy
2019-07-24  9:54         ` Vladimir Sementsov-Ogievskiy
2019-07-25 16:34           ` Max Reitz
2019-07-26 13:44             ` Vladimir Sementsov-Ogievskiy
2019-06-12 22:09 ` [Qemu-devel] [PATCH v5 31/42] block: Drop backing_bs() Max Reitz
2019-06-19  9:18   ` Vladimir Sementsov-Ogievskiy
2019-06-12 22:09 ` [Qemu-devel] [PATCH v5 32/42] block: Make bdrv_get_cumulative_perm() public Max Reitz
2019-06-19  9:19   ` Vladimir Sementsov-Ogievskiy
2019-06-12 22:09 ` [Qemu-devel] [PATCH v5 33/42] blockdev: Fix active commit choice Max Reitz
2019-06-19  9:31   ` Vladimir Sementsov-Ogievskiy
2019-06-19 15:59     ` Max Reitz
2019-06-21 13:26       ` Vladimir Sementsov-Ogievskiy
2019-07-24  9:54         ` Vladimir Sementsov-Ogievskiy
2019-06-12 22:09 ` Max Reitz [this message]
2019-06-19  9:34   ` [Qemu-devel] [PATCH v5 34/42] block: Inline bdrv_co_block_status_from_*() Vladimir Sementsov-Ogievskiy
2019-06-19 16:01     ` Max Reitz
2019-06-19 16:07     ` Max Reitz
2019-06-21 13:39   ` Vladimir Sementsov-Ogievskiy
2019-07-24  9:54     ` Vladimir Sementsov-Ogievskiy
2019-06-12 22:09 ` [Qemu-devel] [PATCH v5 35/42] block: Fix check_to_replace_node() Max Reitz
2019-06-12 22:09 ` [Qemu-devel] [PATCH v5 36/42] iotests: Add tests for mirror @replaces loops Max Reitz
2019-06-12 22:09 ` [Qemu-devel] [PATCH v5 37/42] block: Leave BDS.backing_file constant Max Reitz
2019-06-12 22:10 ` [Qemu-devel] [PATCH v5 38/42] iotests: Let complete_and_wait() work with commit Max Reitz
2019-06-12 22:10 ` [Qemu-devel] [PATCH v5 39/42] iotests: Add filter commit test cases Max Reitz
2019-06-12 22:10 ` [Qemu-devel] [PATCH v5 40/42] iotests: Add filter mirror " Max Reitz
2019-06-12 22:10 ` [Qemu-devel] [PATCH v5 41/42] iotests: Add test for commit in sub directory Max Reitz
2019-06-12 22:10 ` [Qemu-devel] [PATCH v5 42/42] iotests: Test committing to overridden backing Max Reitz
2019-06-13 15:28 ` [Qemu-devel] [PATCH v5 00/42] block: Deal with filters Vladimir Sementsov-Ogievskiy
2019-06-13 16:12   ` Max Reitz

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=20190612221004.2317-35-mreitz@redhat.com \
    --to=mreitz@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=vsementsov@virtuozzo.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.