qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/4] block: clean up coroutine versions of bdrv_{is_allocated, block_status}*
@ 2023-04-05 10:32 Paolo Bonzini
  2023-04-05 10:32 ` [PATCH 1/4] block: rename the bdrv_co_block_status static function Paolo Bonzini
                   ` (4 more replies)
  0 siblings, 5 replies; 10+ messages in thread
From: Paolo Bonzini @ 2023-04-05 10:32 UTC (permalink / raw)
  To: qemu-devel; +Cc: qemu-block

Provide coroutine versions of bdrv_is_allocated* and bdrv_block_status*,
since the underlying BlockDriver API is coroutine-based, and use
automatically-generated wrappers for the "mixed" versions.

Paolo

Paolo Bonzini (4):
  block: rename the bdrv_co_block_status static function
  block: complete public block status API
  block: switch to co_wrapper for bdrv_is_allocated_*
  block: convert more bdrv_is_allocated* and bdrv_block_status* calls to
    coroutine versions

 block/copy-before-write.c |  2 +-
 block/copy-on-read.c      |  8 ++--
 block/io.c                | 87 +++++++++------------------------------
 block/mirror.c            | 10 ++---
 block/qcow2.c             |  5 ++-
 block/replication.c       |  8 ++--
 block/stream.c            |  8 ++--
 block/vvfat.c             | 18 ++++----
 include/block/block-io.h  | 30 +++++++++-----
 9 files changed, 69 insertions(+), 107 deletions(-)

-- 
2.39.2



^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH 1/4] block: rename the bdrv_co_block_status static function
  2023-04-05 10:32 [PATCH 0/4] block: clean up coroutine versions of bdrv_{is_allocated, block_status}* Paolo Bonzini
@ 2023-04-05 10:32 ` Paolo Bonzini
  2023-04-21 14:55   ` Eric Blake
  2023-04-05 10:32 ` [PATCH 2/4] block: complete public block status API Paolo Bonzini
                   ` (3 subsequent siblings)
  4 siblings, 1 reply; 10+ messages in thread
From: Paolo Bonzini @ 2023-04-05 10:32 UTC (permalink / raw)
  To: qemu-devel; +Cc: qemu-block

bdrv_block_status exists as a wrapper for bdrv_block_status_above,
but the name of the (hypothetical) coroutine version, bdrv_co_block_status,
is squatted by a random static function.  Rename it to bdrv_do_block_status.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 block/io.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/block/io.c b/block/io.c
index db438c765757..e86090b7692b 100644
--- a/block/io.c
+++ b/block/io.c
@@ -2230,7 +2230,7 @@ int bdrv_flush_all(void)
  * set to the host mapping and BDS corresponding to the guest offset.
  */
 static int coroutine_fn GRAPH_RDLOCK
-bdrv_co_block_status(BlockDriverState *bs, bool want_zero,
+bdrv_do_block_status(BlockDriverState *bs, bool want_zero,
                      int64_t offset, int64_t bytes,
                      int64_t *pnum, int64_t *map, BlockDriverState **file)
 {
@@ -2391,7 +2391,7 @@ bdrv_co_block_status(BlockDriverState *bs, bool want_zero,
 
     if (ret & BDRV_BLOCK_RAW) {
         assert(ret & BDRV_BLOCK_OFFSET_VALID && local_file);
-        ret = bdrv_co_block_status(local_file, want_zero, local_map,
+        ret = bdrv_do_block_status(local_file, want_zero, local_map,
                                    *pnum, pnum, &local_map, &local_file);
         goto out;
     }
@@ -2419,7 +2419,7 @@ bdrv_co_block_status(BlockDriverState *bs, bool want_zero,
         int64_t file_pnum;
         int ret2;
 
-        ret2 = bdrv_co_block_status(local_file, want_zero, local_map,
+        ret2 = bdrv_do_block_status(local_file, want_zero, local_map,
                                     *pnum, &file_pnum, NULL, NULL);
         if (ret2 >= 0) {
             /* Ignore errors.  This is just providing extra information, it
@@ -2487,7 +2487,7 @@ bdrv_co_common_block_status_above(BlockDriverState *bs,
         return 0;
     }
 
-    ret = bdrv_co_block_status(bs, want_zero, offset, bytes, pnum, map, file);
+    ret = bdrv_do_block_status(bs, want_zero, offset, bytes, pnum, map, file);
     ++*depth;
     if (ret < 0 || *pnum == 0 || ret & BDRV_BLOCK_ALLOCATED || bs == base) {
         return ret;
@@ -2503,7 +2503,7 @@ bdrv_co_common_block_status_above(BlockDriverState *bs,
     for (p = bdrv_filter_or_cow_bs(bs); include_base || p != base;
          p = bdrv_filter_or_cow_bs(p))
     {
-        ret = bdrv_co_block_status(p, want_zero, offset, bytes, pnum, map,
+        ret = bdrv_do_block_status(p, want_zero, offset, bytes, pnum, map,
                                    file);
         ++*depth;
         if (ret < 0) {
-- 
2.39.2



^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 2/4] block: complete public block status API
  2023-04-05 10:32 [PATCH 0/4] block: clean up coroutine versions of bdrv_{is_allocated, block_status}* Paolo Bonzini
  2023-04-05 10:32 ` [PATCH 1/4] block: rename the bdrv_co_block_status static function Paolo Bonzini
@ 2023-04-05 10:32 ` Paolo Bonzini
  2023-04-21 14:58   ` Eric Blake
  2023-04-05 10:32 ` [PATCH 3/4] block: switch to co_wrapper for bdrv_is_allocated_* Paolo Bonzini
                   ` (2 subsequent siblings)
  4 siblings, 1 reply; 10+ messages in thread
From: Paolo Bonzini @ 2023-04-05 10:32 UTC (permalink / raw)
  To: qemu-devel; +Cc: qemu-block

Include both coroutine and non-coroutine versions, the latter being
co_wrapper_mixed_bdrv_rdlock of the former.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 block/io.c               | 18 +++++-------------
 include/block/block-io.h | 18 ++++++++++++------
 2 files changed, 17 insertions(+), 19 deletions(-)

diff --git a/block/io.c b/block/io.c
index e86090b7692b..0aad0f57d8c7 100644
--- a/block/io.c
+++ b/block/io.c
@@ -2570,21 +2570,13 @@ int coroutine_fn bdrv_co_block_status_above(BlockDriverState *bs,
                                              bytes, pnum, map, file, NULL);
 }
 
-int bdrv_block_status_above(BlockDriverState *bs, BlockDriverState *base,
-                            int64_t offset, int64_t bytes, int64_t *pnum,
-                            int64_t *map, BlockDriverState **file)
+int coroutine_fn bdrv_co_block_status(BlockDriverState *bs, int64_t offset,
+                                      int64_t bytes, int64_t *pnum,
+                                      int64_t *map, BlockDriverState **file)
 {
     IO_CODE();
-    return bdrv_common_block_status_above(bs, base, false, true, offset, bytes,
-                                          pnum, map, file, NULL);
-}
-
-int bdrv_block_status(BlockDriverState *bs, int64_t offset, int64_t bytes,
-                      int64_t *pnum, int64_t *map, BlockDriverState **file)
-{
-    IO_CODE();
-    return bdrv_block_status_above(bs, bdrv_filter_or_cow_bs(bs),
-                                   offset, bytes, pnum, map, file);
+    return bdrv_co_block_status_above(bs, bdrv_filter_or_cow_bs(bs),
+                                      offset, bytes, pnum, map, file);
 }
 
 /*
diff --git a/include/block/block-io.h b/include/block/block-io.h
index 5da99d4d60ff..0947f83d9ac7 100644
--- a/include/block/block-io.h
+++ b/include/block/block-io.h
@@ -113,17 +113,23 @@ int coroutine_fn GRAPH_RDLOCK bdrv_co_pdiscard(BdrvChild *child, int64_t offset,
                                                int64_t bytes);
 
 bool bdrv_can_write_zeroes_with_unmap(BlockDriverState *bs);
-int bdrv_block_status(BlockDriverState *bs, int64_t offset,
-                      int64_t bytes, int64_t *pnum, int64_t *map,
-                      BlockDriverState **file);
+
+int coroutine_fn GRAPH_RDLOCK
+bdrv_co_block_status(BlockDriverState *bs, int64_t offset,
+                     int64_t bytes, int64_t *pnum,
+                     int64_t *map, BlockDriverState **file);
+int co_wrapper_mixed_bdrv_rdlock bdrv_block_status(BlockDriverState *bs, int64_t offset,
+                                                   int64_t bytes, int64_t *pnum,
+                                                   int64_t *map, BlockDriverState **file);
 
 int coroutine_fn GRAPH_RDLOCK
 bdrv_co_block_status_above(BlockDriverState *bs, BlockDriverState *base,
                            int64_t offset, int64_t bytes, int64_t *pnum,
                            int64_t *map, BlockDriverState **file);
-int bdrv_block_status_above(BlockDriverState *bs, BlockDriverState *base,
-                            int64_t offset, int64_t bytes, int64_t *pnum,
-                            int64_t *map, BlockDriverState **file);
+int co_wrapper_mixed_bdrv_rdlock
+bdrv_block_status_above(BlockDriverState *bs, BlockDriverState *base,
+                        int64_t offset, int64_t bytes, int64_t *pnum,
+                        int64_t *map, BlockDriverState **file);
 
 int coroutine_fn GRAPH_RDLOCK
 bdrv_co_is_allocated(BlockDriverState *bs, int64_t offset, int64_t bytes,
-- 
2.39.2



^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 3/4] block: switch to co_wrapper for bdrv_is_allocated_*
  2023-04-05 10:32 [PATCH 0/4] block: clean up coroutine versions of bdrv_{is_allocated, block_status}* Paolo Bonzini
  2023-04-05 10:32 ` [PATCH 1/4] block: rename the bdrv_co_block_status static function Paolo Bonzini
  2023-04-05 10:32 ` [PATCH 2/4] block: complete public block status API Paolo Bonzini
@ 2023-04-05 10:32 ` Paolo Bonzini
  2023-04-21 14:59   ` Eric Blake
  2023-04-05 10:32 ` [PATCH 4/4] block: convert more bdrv_is_allocated* and bdrv_block_status* calls to coroutine versions Paolo Bonzini
  2023-04-21  9:34 ` [PATCH 0/4] block: clean up coroutine versions of bdrv_{is_allocated, block_status}* Paolo Bonzini
  4 siblings, 1 reply; 10+ messages in thread
From: Paolo Bonzini @ 2023-04-05 10:32 UTC (permalink / raw)
  To: qemu-devel; +Cc: qemu-block

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 block/io.c               | 53 ++++++----------------------------------
 include/block/block-io.h | 12 +++++----
 2 files changed, 14 insertions(+), 51 deletions(-)

diff --git a/block/io.c b/block/io.c
index 0aad0f57d8c7..cacde79a3e98 100644
--- a/block/io.c
+++ b/block/io.c
@@ -2623,45 +2623,6 @@ int coroutine_fn bdrv_co_is_allocated(BlockDriverState *bs, int64_t offset,
     return !!(ret & BDRV_BLOCK_ALLOCATED);
 }
 
-int bdrv_is_allocated(BlockDriverState *bs, int64_t offset, int64_t bytes,
-                      int64_t *pnum)
-{
-    int ret;
-    int64_t dummy;
-    IO_CODE();
-
-    ret = bdrv_common_block_status_above(bs, bs, true, false, offset,
-                                         bytes, pnum ? pnum : &dummy, NULL,
-                                         NULL, NULL);
-    if (ret < 0) {
-        return ret;
-    }
-    return !!(ret & BDRV_BLOCK_ALLOCATED);
-}
-
-/* See bdrv_is_allocated_above for documentation */
-int coroutine_fn bdrv_co_is_allocated_above(BlockDriverState *top,
-                                            BlockDriverState *base,
-                                            bool include_base, int64_t offset,
-                                            int64_t bytes, int64_t *pnum)
-{
-    int depth;
-    int ret;
-    IO_CODE();
-
-    ret = bdrv_co_common_block_status_above(top, base, include_base, false,
-                                            offset, bytes, pnum, NULL, NULL,
-                                            &depth);
-    if (ret < 0) {
-        return ret;
-    }
-
-    if (ret & BDRV_BLOCK_ALLOCATED) {
-        return depth;
-    }
-    return 0;
-}
-
 /*
  * Given an image chain: ... -> [BASE] -> [INTER1] -> [INTER2] -> [TOP]
  *
@@ -2679,18 +2640,18 @@ int coroutine_fn bdrv_co_is_allocated_above(BlockDriverState *top,
  * words, the result is not necessarily the maximum possible range);
  * but 'pnum' will only be 0 when end of file is reached.
  */
-int bdrv_is_allocated_above(BlockDriverState *top,
-                            BlockDriverState *base,
-                            bool include_base, int64_t offset,
-                            int64_t bytes, int64_t *pnum)
+int coroutine_fn bdrv_co_is_allocated_above(BlockDriverState *bs,
+                                            BlockDriverState *base,
+                                            bool include_base, int64_t offset,
+                                            int64_t bytes, int64_t *pnum)
 {
     int depth;
     int ret;
     IO_CODE();
 
-    ret = bdrv_common_block_status_above(top, base, include_base, false,
-                                         offset, bytes, pnum, NULL, NULL,
-                                         &depth);
+    ret = bdrv_co_common_block_status_above(bs, base, include_base, false,
+                                            offset, bytes, pnum, NULL, NULL,
+                                            &depth);
     if (ret < 0) {
         return ret;
     }
diff --git a/include/block/block-io.h b/include/block/block-io.h
index 0947f83d9ac7..9e179861895c 100644
--- a/include/block/block-io.h
+++ b/include/block/block-io.h
@@ -134,16 +134,18 @@ bdrv_block_status_above(BlockDriverState *bs, BlockDriverState *base,
 int coroutine_fn GRAPH_RDLOCK
 bdrv_co_is_allocated(BlockDriverState *bs, int64_t offset, int64_t bytes,
                      int64_t *pnum);
-int bdrv_is_allocated(BlockDriverState *bs, int64_t offset, int64_t bytes,
-                      int64_t *pnum);
+int co_wrapper_mixed_bdrv_rdlock
+bdrv_is_allocated(BlockDriverState *bs, int64_t offset,
+                  int64_t bytes, int64_t *pnum);
 
 int coroutine_fn GRAPH_RDLOCK
 bdrv_co_is_allocated_above(BlockDriverState *top, BlockDriverState *base,
                            bool include_base, int64_t offset, int64_t bytes,
                            int64_t *pnum);
-int bdrv_is_allocated_above(BlockDriverState *top, BlockDriverState *base,
-                            bool include_base, int64_t offset, int64_t bytes,
-                            int64_t *pnum);
+int co_wrapper_mixed_bdrv_rdlock
+bdrv_is_allocated_above(BlockDriverState *bs, BlockDriverState *base,
+                        bool include_base, int64_t offset,
+                        int64_t bytes, int64_t *pnum);
 
 int coroutine_fn GRAPH_RDLOCK
 bdrv_co_is_zero_fast(BlockDriverState *bs, int64_t offset, int64_t bytes);
-- 
2.39.2



^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 4/4] block: convert more bdrv_is_allocated* and bdrv_block_status* calls to coroutine versions
  2023-04-05 10:32 [PATCH 0/4] block: clean up coroutine versions of bdrv_{is_allocated, block_status}* Paolo Bonzini
                   ` (2 preceding siblings ...)
  2023-04-05 10:32 ` [PATCH 3/4] block: switch to co_wrapper for bdrv_is_allocated_* Paolo Bonzini
@ 2023-04-05 10:32 ` Paolo Bonzini
  2023-04-21 15:01   ` Eric Blake
  2023-04-21  9:34 ` [PATCH 0/4] block: clean up coroutine versions of bdrv_{is_allocated, block_status}* Paolo Bonzini
  4 siblings, 1 reply; 10+ messages in thread
From: Paolo Bonzini @ 2023-04-05 10:32 UTC (permalink / raw)
  To: qemu-devel; +Cc: qemu-block

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 block/copy-before-write.c |  2 +-
 block/copy-on-read.c      |  8 ++++----
 block/io.c                |  6 +++---
 block/mirror.c            | 10 +++++-----
 block/qcow2.c             |  5 +++--
 block/replication.c       |  8 ++++----
 block/stream.c            |  8 ++++----
 block/vvfat.c             | 18 +++++++++---------
 8 files changed, 33 insertions(+), 32 deletions(-)

diff --git a/block/copy-before-write.c b/block/copy-before-write.c
index 646d8227a461..20c227cd8f8d 100644
--- a/block/copy-before-write.c
+++ b/block/copy-before-write.c
@@ -305,7 +305,7 @@ cbw_co_snapshot_block_status(BlockDriverState *bs,
         return -EACCES;
     }
 
-    ret = bdrv_block_status(child->bs, offset, cur_bytes, pnum, map, file);
+    ret = bdrv_co_block_status(child->bs, offset, cur_bytes, pnum, map, file);
     if (child == s->target) {
         /*
          * We refer to s->target only for areas that we've written to it.
diff --git a/block/copy-on-read.c b/block/copy-on-read.c
index cc0f848b0f10..d7881abd69d9 100644
--- a/block/copy-on-read.c
+++ b/block/copy-on-read.c
@@ -146,11 +146,11 @@ cor_co_preadv_part(BlockDriverState *bs, int64_t offset, int64_t bytes,
         local_flags = flags;
 
         /* In case of failure, try to copy-on-read anyway */
-        ret = bdrv_is_allocated(bs->file->bs, offset, bytes, &n);
+        ret = bdrv_co_is_allocated(bs->file->bs, offset, bytes, &n);
         if (ret <= 0) {
-            ret = bdrv_is_allocated_above(bdrv_backing_chain_next(bs->file->bs),
-                                          state->bottom_bs, true, offset,
-                                          n, &n);
+            ret = bdrv_co_is_allocated_above(bdrv_backing_chain_next(bs->file->bs),
+                                             state->bottom_bs, true, offset,
+                                             n, &n);
             if (ret > 0 || ret < 0) {
                 local_flags |= BDRV_REQ_COPY_ON_READ;
             }
diff --git a/block/io.c b/block/io.c
index cacde79a3e98..b0f6a49dc5df 100644
--- a/block/io.c
+++ b/block/io.c
@@ -1210,8 +1210,8 @@ bdrv_co_do_copy_on_readv(BdrvChild *child, int64_t offset, int64_t bytes,
             ret = 1; /* "already allocated", so nothing will be copied */
             pnum = MIN(cluster_bytes, max_transfer);
         } else {
-            ret = bdrv_is_allocated(bs, cluster_offset,
-                                    MIN(cluster_bytes, max_transfer), &pnum);
+            ret = bdrv_co_is_allocated(bs, cluster_offset,
+                                       MIN(cluster_bytes, max_transfer), &pnum);
             if (ret < 0) {
                 /*
                  * Safe to treat errors in querying allocation as if
@@ -1358,7 +1358,7 @@ bdrv_aligned_preadv(BdrvChild *child, BdrvTrackedRequest *req,
         /* The flag BDRV_REQ_COPY_ON_READ has reached its addressee */
         flags &= ~BDRV_REQ_COPY_ON_READ;
 
-        ret = bdrv_is_allocated(bs, offset, bytes, &pnum);
+        ret = bdrv_co_is_allocated(bs, offset, bytes, &pnum);
         if (ret < 0) {
             goto out;
         }
diff --git a/block/mirror.c b/block/mirror.c
index af9bbd23d4cf..1c46ad51bf50 100644
--- a/block/mirror.c
+++ b/block/mirror.c
@@ -560,9 +560,9 @@ static uint64_t coroutine_fn mirror_iteration(MirrorBlockJob *s)
 
         assert(!(offset % s->granularity));
         WITH_GRAPH_RDLOCK_GUARD() {
-            ret = bdrv_block_status_above(source, NULL, offset,
-                                        nb_chunks * s->granularity,
-                                        &io_bytes, NULL, NULL);
+            ret = bdrv_co_block_status_above(source, NULL, offset,
+                                             nb_chunks * s->granularity,
+                                             &io_bytes, NULL, NULL);
         }
         if (ret < 0) {
             io_bytes = MIN(nb_chunks * s->granularity, max_io_bytes);
@@ -867,8 +867,8 @@ static int coroutine_fn mirror_dirty_init(MirrorBlockJob *s)
         }
 
         WITH_GRAPH_RDLOCK_GUARD() {
-            ret = bdrv_is_allocated_above(bs, s->base_overlay, true, offset,
-                                          bytes, &count);
+            ret = bdrv_co_is_allocated_above(bs, s->base_overlay, true, offset,
+                                             bytes, &count);
         }
         if (ret < 0) {
             return ret;
diff --git a/block/qcow2.c b/block/qcow2.c
index fe5def438e15..f8ea03a34515 100644
--- a/block/qcow2.c
+++ b/block/qcow2.c
@@ -3951,7 +3951,8 @@ finish:
 }
 
 
-static bool is_zero(BlockDriverState *bs, int64_t offset, int64_t bytes)
+static bool coroutine_fn GRAPH_RDLOCK
+is_zero(BlockDriverState *bs, int64_t offset, int64_t bytes)
 {
     int64_t nr;
     int res;
@@ -3972,7 +3973,7 @@ static bool is_zero(BlockDriverState *bs, int64_t offset, int64_t bytes)
      * backing file. So, we need a loop.
      */
     do {
-        res = bdrv_block_status_above(bs, NULL, offset, bytes, &nr, NULL, NULL);
+        res = bdrv_co_block_status_above(bs, NULL, offset, bytes, &nr, NULL, NULL);
         offset += nr;
         bytes -= nr;
     } while (res >= 0 && (res & BDRV_BLOCK_ZERO) && nr && bytes);
diff --git a/block/replication.c b/block/replication.c
index de01f9618467..c0758841888e 100644
--- a/block/replication.c
+++ b/block/replication.c
@@ -276,10 +276,10 @@ replication_co_writev(BlockDriverState *bs, int64_t sector_num,
     while (remaining_sectors > 0) {
         int64_t count;
 
-        ret = bdrv_is_allocated_above(top->bs, base->bs, false,
-                                      sector_num * BDRV_SECTOR_SIZE,
-                                      remaining_sectors * BDRV_SECTOR_SIZE,
-                                      &count);
+        ret = bdrv_co_is_allocated_above(top->bs, base->bs, false,
+                                         sector_num * BDRV_SECTOR_SIZE,
+                                         remaining_sectors * BDRV_SECTOR_SIZE,
+                                         &count);
         if (ret < 0) {
             goto out1;
         }
diff --git a/block/stream.c b/block/stream.c
index 7f9e1ecdbb41..d92a4c99d359 100644
--- a/block/stream.c
+++ b/block/stream.c
@@ -163,7 +163,7 @@ static int coroutine_fn stream_run(Job *job, Error **errp)
         copy = false;
 
         WITH_GRAPH_RDLOCK_GUARD() {
-            ret = bdrv_is_allocated(unfiltered_bs, offset, STREAM_CHUNK, &n);
+            ret = bdrv_co_is_allocated(unfiltered_bs, offset, STREAM_CHUNK, &n);
             if (ret == 1) {
                 /* Allocated in the top, no need to copy.  */
             } else if (ret >= 0) {
@@ -171,9 +171,9 @@ static int coroutine_fn stream_run(Job *job, Error **errp)
                  * Copy if allocated in the intermediate images.  Limit to the
                  * known-unallocated area [offset, offset+n*BDRV_SECTOR_SIZE).
                  */
-                ret = bdrv_is_allocated_above(bdrv_cow_bs(unfiltered_bs),
-                                            s->base_overlay, true,
-                                            offset, n, &n);
+                ret = bdrv_co_is_allocated_above(bdrv_cow_bs(unfiltered_bs),
+                                                 s->base_overlay, true,
+                                                 offset, n, &n);
                 /* Finish early if end of backing file has been reached */
                 if (ret == 0 && n == 0) {
                     n = len - offset;
diff --git a/block/vvfat.c b/block/vvfat.c
index 0ddc91fc096a..5df2d6b1c64d 100644
--- a/block/vvfat.c
+++ b/block/vvfat.c
@@ -1481,8 +1481,8 @@ vvfat_read(BlockDriverState *bs, int64_t sector_num, uint8_t *buf, int nb_sector
         if (s->qcow) {
             int64_t n;
             int ret;
-            ret = bdrv_is_allocated(s->qcow->bs, sector_num * BDRV_SECTOR_SIZE,
-                                    (nb_sectors - i) * BDRV_SECTOR_SIZE, &n);
+            ret = bdrv_co_is_allocated(s->qcow->bs, sector_num * BDRV_SECTOR_SIZE,
+                                       (nb_sectors - i) * BDRV_SECTOR_SIZE, &n);
             if (ret < 0) {
                 return ret;
             }
@@ -1807,10 +1807,10 @@ cluster_was_modified(BDRVVVFATState *s, uint32_t cluster_num)
     }
 
     for (i = 0; !was_modified && i < s->sectors_per_cluster; i++) {
-        was_modified = bdrv_is_allocated(s->qcow->bs,
-                                         (cluster2sector(s, cluster_num) +
-                                          i) * BDRV_SECTOR_SIZE,
-                                         BDRV_SECTOR_SIZE, NULL);
+        was_modified = bdrv_co_is_allocated(s->qcow->bs,
+                                            (cluster2sector(s, cluster_num) +
+                                             i) * BDRV_SECTOR_SIZE,
+                                            BDRV_SECTOR_SIZE, NULL);
     }
 
     /*
@@ -1968,9 +1968,9 @@ get_cluster_count_for_direntry(BDRVVVFATState* s, direntry_t* direntry, const ch
                 for (i = 0; i < s->sectors_per_cluster; i++) {
                     int res;
 
-                    res = bdrv_is_allocated(s->qcow->bs,
-                                            (offset + i) * BDRV_SECTOR_SIZE,
-                                            BDRV_SECTOR_SIZE, NULL);
+                    res = bdrv_co_is_allocated(s->qcow->bs,
+                                               (offset + i) * BDRV_SECTOR_SIZE,
+                                               BDRV_SECTOR_SIZE, NULL);
                     if (res < 0) {
                         return -1;
                     }
-- 
2.39.2



^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH 0/4] block: clean up coroutine versions of bdrv_{is_allocated, block_status}*
  2023-04-05 10:32 [PATCH 0/4] block: clean up coroutine versions of bdrv_{is_allocated, block_status}* Paolo Bonzini
                   ` (3 preceding siblings ...)
  2023-04-05 10:32 ` [PATCH 4/4] block: convert more bdrv_is_allocated* and bdrv_block_status* calls to coroutine versions Paolo Bonzini
@ 2023-04-21  9:34 ` Paolo Bonzini
  4 siblings, 0 replies; 10+ messages in thread
From: Paolo Bonzini @ 2023-04-21  9:34 UTC (permalink / raw)
  To: qemu-devel; +Cc: qemu-block

Ping.

Paolo

On Wed, Apr 5, 2023 at 12:32 PM Paolo Bonzini <pbonzini@redhat.com> wrote:
>
> Provide coroutine versions of bdrv_is_allocated* and bdrv_block_status*,
> since the underlying BlockDriver API is coroutine-based, and use
> automatically-generated wrappers for the "mixed" versions.
>
> Paolo
>
> Paolo Bonzini (4):
>   block: rename the bdrv_co_block_status static function
>   block: complete public block status API
>   block: switch to co_wrapper for bdrv_is_allocated_*
>   block: convert more bdrv_is_allocated* and bdrv_block_status* calls to
>     coroutine versions
>
>  block/copy-before-write.c |  2 +-
>  block/copy-on-read.c      |  8 ++--
>  block/io.c                | 87 +++++++++------------------------------
>  block/mirror.c            | 10 ++---
>  block/qcow2.c             |  5 ++-
>  block/replication.c       |  8 ++--
>  block/stream.c            |  8 ++--
>  block/vvfat.c             | 18 ++++----
>  include/block/block-io.h  | 30 +++++++++-----
>  9 files changed, 69 insertions(+), 107 deletions(-)
>
> --
> 2.39.2



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 1/4] block: rename the bdrv_co_block_status static function
  2023-04-05 10:32 ` [PATCH 1/4] block: rename the bdrv_co_block_status static function Paolo Bonzini
@ 2023-04-21 14:55   ` Eric Blake
  0 siblings, 0 replies; 10+ messages in thread
From: Eric Blake @ 2023-04-21 14:55 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: qemu-devel, qemu-block

On Wed, Apr 05, 2023 at 12:32:13PM +0200, Paolo Bonzini wrote:
> bdrv_block_status exists as a wrapper for bdrv_block_status_above,
> but the name of the (hypothetical) coroutine version, bdrv_co_block_status,
> is squatted by a random static function.  Rename it to bdrv_do_block_status.
> 
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
>  block/io.c | 10 +++++-----
>  1 file changed, 5 insertions(+), 5 deletions(-)

[Hmm - I notice I have a local branch that tries to address an issue
where a 4k-sector overlay backed by a 512-byte backing image can
report unaligned block status, and touches this maze of functions to
support a way to get block status forced to a given alignment.  I
should try and revive that once this series lands...]

> 
> diff --git a/block/io.c b/block/io.c
> index db438c765757..e86090b7692b 100644
> --- a/block/io.c
> +++ b/block/io.c
> @@ -2230,7 +2230,7 @@ int bdrv_flush_all(void)
>   * set to the host mapping and BDS corresponding to the guest offset.
>   */
>  static int coroutine_fn GRAPH_RDLOCK
> -bdrv_co_block_status(BlockDriverState *bs, bool want_zero,
> +bdrv_do_block_status(BlockDriverState *bs, bool want_zero,

This is still marked coroutine.  Do we want to go with the longer name
bdrv_co_do_block_status, to make it obvious that it is both coroutine
and a local helper?  Or is the fact that it is static to this file
enough to elide the _co?

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3266
Virtualization:  qemu.org | libvirt.org



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 2/4] block: complete public block status API
  2023-04-05 10:32 ` [PATCH 2/4] block: complete public block status API Paolo Bonzini
@ 2023-04-21 14:58   ` Eric Blake
  0 siblings, 0 replies; 10+ messages in thread
From: Eric Blake @ 2023-04-21 14:58 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: qemu-devel, qemu-block

On Wed, Apr 05, 2023 at 12:32:14PM +0200, Paolo Bonzini wrote:
> Include both coroutine and non-coroutine versions, the latter being
> co_wrapper_mixed_bdrv_rdlock of the former.
> 
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
>  block/io.c               | 18 +++++-------------
>  include/block/block-io.h | 18 ++++++++++++------
>  2 files changed, 17 insertions(+), 19 deletions(-)

Reviewed-by: Eric Blake <eblake@redhat.com>

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3266
Virtualization:  qemu.org | libvirt.org



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 3/4] block: switch to co_wrapper for bdrv_is_allocated_*
  2023-04-05 10:32 ` [PATCH 3/4] block: switch to co_wrapper for bdrv_is_allocated_* Paolo Bonzini
@ 2023-04-21 14:59   ` Eric Blake
  0 siblings, 0 replies; 10+ messages in thread
From: Eric Blake @ 2023-04-21 14:59 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: qemu-devel, qemu-block

On Wed, Apr 05, 2023 at 12:32:15PM +0200, Paolo Bonzini wrote:
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
>  block/io.c               | 53 ++++++----------------------------------
>  include/block/block-io.h | 12 +++++----
>  2 files changed, 14 insertions(+), 51 deletions(-)
>

Reviewed-by: Eric Blake <eblake@redhat.com>

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3266
Virtualization:  qemu.org | libvirt.org



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 4/4] block: convert more bdrv_is_allocated* and bdrv_block_status* calls to coroutine versions
  2023-04-05 10:32 ` [PATCH 4/4] block: convert more bdrv_is_allocated* and bdrv_block_status* calls to coroutine versions Paolo Bonzini
@ 2023-04-21 15:01   ` Eric Blake
  0 siblings, 0 replies; 10+ messages in thread
From: Eric Blake @ 2023-04-21 15:01 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: qemu-devel, qemu-block

On Wed, Apr 05, 2023 at 12:32:16PM +0200, Paolo Bonzini wrote:
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
>  block/copy-before-write.c |  2 +-
>  block/copy-on-read.c      |  8 ++++----
>  block/io.c                |  6 +++---
>  block/mirror.c            | 10 +++++-----
>  block/qcow2.c             |  5 +++--
>  block/replication.c       |  8 ++++----
>  block/stream.c            |  8 ++++----
>  block/vvfat.c             | 18 +++++++++---------
>  8 files changed, 33 insertions(+), 32 deletions(-)
>

Reviewed-by: Eric Blake <eblake@redhat.com>

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3266
Virtualization:  qemu.org | libvirt.org



^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2023-04-21 15:02 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-04-05 10:32 [PATCH 0/4] block: clean up coroutine versions of bdrv_{is_allocated, block_status}* Paolo Bonzini
2023-04-05 10:32 ` [PATCH 1/4] block: rename the bdrv_co_block_status static function Paolo Bonzini
2023-04-21 14:55   ` Eric Blake
2023-04-05 10:32 ` [PATCH 2/4] block: complete public block status API Paolo Bonzini
2023-04-21 14:58   ` Eric Blake
2023-04-05 10:32 ` [PATCH 3/4] block: switch to co_wrapper for bdrv_is_allocated_* Paolo Bonzini
2023-04-21 14:59   ` Eric Blake
2023-04-05 10:32 ` [PATCH 4/4] block: convert more bdrv_is_allocated* and bdrv_block_status* calls to coroutine versions Paolo Bonzini
2023-04-21 15:01   ` Eric Blake
2023-04-21  9:34 ` [PATCH 0/4] block: clean up coroutine versions of bdrv_{is_allocated, block_status}* Paolo Bonzini

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).