All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 00/19] block: fix coroutine_fn annotations
@ 2022-04-15 13:18 Paolo Bonzini
  2022-04-15 13:18 ` [PATCH 01/26] block: remove incorrect " Paolo Bonzini
                   ` (26 more replies)
  0 siblings, 27 replies; 46+ messages in thread
From: Paolo Bonzini @ 2022-04-15 13:18 UTC (permalink / raw)
  To: qemu-devel; +Cc: malureau, kwolf, hreitz, stefanha, qemu-block

This is the initial result of reviving Marc-André's series at
https://patchew.org/QEMU/20170704220346.29244-1-marcandre.lureau@redhat.com/.
A lot of the patches are similar to the ones that Marc-André wrote,
but due to the changes in the code it was easier to redo them.

For nbd, the patch is on top of "nbd: mark more coroutine_fns" that
I sent a few days ago and that (AIUI) Eric has already queued; only
one function was missing, much to my surprise.

Apart from this, I also identified the following functions that
can be called both in coroutine context and outside:

- qmp_dispatch
- schedule_next_request
- nvme_get_free_req
- bdrv_create
- bdrv_remove_persistent_dirty_bitmap
- bdrv_can_store_new_dirty_bitmap
- bdrv_do_drained_begin
- bdrv_do_drained_end
- bdrv_drain_all_begin
- qcow2_open
- qcow2_has_zero_init
- bdrv_qed_open
- qio_channel_readv_full_all_eof
- qio_channel_writev_full_all

besides, of course, everything that is generated by
scripts/block-coroutine-wrapper.py.

Thanks,

Paolo

Supersedes: <20170704220346.29244-1-marcandre.lureau@redhat.com>

Marc-André Lureau (3):
  9p: add missing coroutine_fn annotations
  migration: add missing coroutine_fn annotations
  test-coroutine: add missing coroutine_fn annotations

Paolo Bonzini (23):
  block: remove incorrect coroutine_fn annotations
  qcow2: remove incorrect coroutine_fn annotations
  nbd: remove incorrect coroutine_fn annotations
  coroutine: remove incorrect coroutine_fn annotations
  blkdebug: add missing coroutine_fn annotations
  blkverify: add missing coroutine_fn annotations
  block: add missing coroutine_fn annotations
  file-posix: add missing coroutine_fn annotations
  iscsi: add missing coroutine_fn annotations
  nbd: add missing coroutine_fn annotations
  nfs: add missing coroutine_fn annotations
  nvme: add missing coroutine_fn annotations
  parallels: add missing coroutine_fn annotations
  qcow2: add missing coroutine_fn annotations
  copy-before-write: add missing coroutine_fn annotations
  curl: add missing coroutine_fn annotations
  qed: add missing coroutine_fn annotations
  quorum: add missing coroutine_fn annotations
  throttle: add missing coroutine_fn annotations
  vmdk: add missing coroutine_fn annotations
  job: add missing coroutine_fn annotations
  coroutine-lock: add missing coroutine_fn annotations
  raw-format: add missing coroutine_fn annotations

 block/blkdebug.c            | 14 +++++++-------
 block/blkverify.c           |  2 +-
 block/block-backend.c       | 26 +++++++++++++-------------
 block/copy-before-write.c   |  8 ++++----
 block/curl.c                |  2 +-
 block/file-posix.c          |  2 +-
 block/io.c                  | 24 ++++++++++++------------
 block/iscsi.c               |  2 +-
 block/nbd.c                 | 10 +++++-----
 block/nfs.c                 |  2 +-
 block/nvme.c                |  5 +++--
 block/parallels.c           |  5 +++--
 block/qcow2-cluster.c       | 18 +++++++++---------
 block/qcow2-refcount.c      |  6 +++---
 block/qcow2.c               |  4 ++--
 block/qcow2.h               | 18 +++++++++---------
 block/qed.c                 |  4 ++--
 block/quorum.c              | 35 ++++++++++++++++++-----------------
 block/raw-format.c          |  2 +-
 block/throttle.c            |  2 +-
 block/vmdk.c                | 20 ++++++++++----------
 hw/9pfs/9p.h                |  9 ++++++---
 include/block/nbd.h         |  2 +-
 include/qemu/coroutine.h    |  2 +-
 include/qemu/job.h          |  2 +-
 job.c                       |  2 +-
 migration/migration.c       |  3 ++-
 tests/unit/test-coroutine.c |  2 +-
 util/qemu-coroutine-lock.c  | 14 +++++++-------
 util/qemu-coroutine.c       |  2 +-
 30 files changed, 128 insertions(+), 121 deletions(-)

-- 
2.35.1



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

* [PATCH 01/26] block: remove incorrect coroutine_fn annotations
  2022-04-15 13:18 [PATCH 00/19] block: fix coroutine_fn annotations Paolo Bonzini
@ 2022-04-15 13:18 ` Paolo Bonzini
  2022-04-19 17:57   ` Eric Blake
  2022-04-15 13:18 ` [PATCH 02/26] qcow2: " Paolo Bonzini
                   ` (25 subsequent siblings)
  26 siblings, 1 reply; 46+ messages in thread
From: Paolo Bonzini @ 2022-04-15 13:18 UTC (permalink / raw)
  To: qemu-devel; +Cc: malureau, kwolf, hreitz, stefanha, qemu-block

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

diff --git a/block/block-backend.c b/block/block-backend.c
index e0e1aff4b1..fedf2eca83 100644
--- a/block/block-backend.c
+++ b/block/block-backend.c
@@ -1391,10 +1391,10 @@ int coroutine_fn blk_co_pwritev(BlockBackend *blk, int64_t offset,
     return blk_co_pwritev_part(blk, offset, bytes, qiov, 0, flags);
 }
 
-static int coroutine_fn blk_pwritev_part(BlockBackend *blk, int64_t offset,
-                                         int64_t bytes,
-                                         QEMUIOVector *qiov, size_t qiov_offset,
-                                         BdrvRequestFlags flags)
+static int blk_pwritev_part(BlockBackend *blk, int64_t offset,
+                            int64_t bytes,
+                            QEMUIOVector *qiov, size_t qiov_offset,
+                            BdrvRequestFlags flags)
 {
     int ret;
 
-- 
2.35.1




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

* [PATCH 02/26] qcow2: remove incorrect coroutine_fn annotations
  2022-04-15 13:18 [PATCH 00/19] block: fix coroutine_fn annotations Paolo Bonzini
  2022-04-15 13:18 ` [PATCH 01/26] block: remove incorrect " Paolo Bonzini
@ 2022-04-15 13:18 ` Paolo Bonzini
  2022-04-19 18:07   ` Eric Blake
  2022-04-15 13:18 ` [PATCH 03/26] nbd: " Paolo Bonzini
                   ` (24 subsequent siblings)
  26 siblings, 1 reply; 46+ messages in thread
From: Paolo Bonzini @ 2022-04-15 13:18 UTC (permalink / raw)
  To: qemu-devel; +Cc: malureau, kwolf, hreitz, stefanha, qemu-block

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 block/qcow2-refcount.c | 4 ++--
 block/qcow2.h          | 4 ++--
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c
index b91499410c..b6f90b2702 100644
--- a/block/qcow2-refcount.c
+++ b/block/qcow2-refcount.c
@@ -1206,7 +1206,7 @@ void qcow2_free_any_cluster(BlockDriverState *bs, uint64_t l2_entry,
     }
 }
 
-int coroutine_fn qcow2_write_caches(BlockDriverState *bs)
+int qcow2_write_caches(BlockDriverState *bs)
 {
     BDRVQcow2State *s = bs->opaque;
     int ret;
@@ -1226,7 +1226,7 @@ int coroutine_fn qcow2_write_caches(BlockDriverState *bs)
     return 0;
 }
 
-int coroutine_fn qcow2_flush_caches(BlockDriverState *bs)
+int qcow2_flush_caches(BlockDriverState *bs)
 {
     int ret = qcow2_write_caches(bs);
     if (ret < 0) {
diff --git a/block/qcow2.h b/block/qcow2.h
index ba436a8d0d..c8d9e8ea79 100644
--- a/block/qcow2.h
+++ b/block/qcow2.h
@@ -874,8 +874,8 @@ void qcow2_free_any_cluster(BlockDriverState *bs, uint64_t l2_entry,
 int qcow2_update_snapshot_refcount(BlockDriverState *bs,
     int64_t l1_table_offset, int l1_size, int addend);
 
-int coroutine_fn qcow2_flush_caches(BlockDriverState *bs);
-int coroutine_fn qcow2_write_caches(BlockDriverState *bs);
+int qcow2_flush_caches(BlockDriverState *bs);
+int qcow2_write_caches(BlockDriverState *bs);
 int qcow2_check_refcounts(BlockDriverState *bs, BdrvCheckResult *res,
                           BdrvCheckMode fix);
 
-- 
2.35.1




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

* [PATCH 03/26] nbd: remove incorrect coroutine_fn annotations
  2022-04-15 13:18 [PATCH 00/19] block: fix coroutine_fn annotations Paolo Bonzini
  2022-04-15 13:18 ` [PATCH 01/26] block: remove incorrect " Paolo Bonzini
  2022-04-15 13:18 ` [PATCH 02/26] qcow2: " Paolo Bonzini
@ 2022-04-15 13:18 ` Paolo Bonzini
  2022-04-19 18:08   ` Eric Blake
  2022-04-15 13:18 ` [PATCH 04/26] coroutine: " Paolo Bonzini
                   ` (23 subsequent siblings)
  26 siblings, 1 reply; 46+ messages in thread
From: Paolo Bonzini @ 2022-04-15 13:18 UTC (permalink / raw)
  To: qemu-devel; +Cc: malureau, kwolf, hreitz, stefanha, qemu-block

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 include/block/nbd.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/include/block/nbd.h b/include/block/nbd.h
index a98eb665da..5c3710fa52 100644
--- a/include/block/nbd.h
+++ b/include/block/nbd.h
@@ -423,6 +423,6 @@ QIOChannel *coroutine_fn
 nbd_co_establish_connection(NBDClientConnection *conn, NBDExportInfo *info,
                             bool blocking, Error **errp);
 
-void coroutine_fn nbd_co_establish_connection_cancel(NBDClientConnection *conn);
+void nbd_co_establish_connection_cancel(NBDClientConnection *conn);
 
 #endif
-- 
2.35.1




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

* [PATCH 04/26] coroutine: remove incorrect coroutine_fn annotations
  2022-04-15 13:18 [PATCH 00/19] block: fix coroutine_fn annotations Paolo Bonzini
                   ` (2 preceding siblings ...)
  2022-04-15 13:18 ` [PATCH 03/26] nbd: " Paolo Bonzini
@ 2022-04-15 13:18 ` Paolo Bonzini
  2022-04-19 18:25   ` Eric Blake
  2022-04-21 10:26   ` Stefan Hajnoczi
  2022-04-15 13:18 ` [PATCH 05/26] blkdebug: add missing " Paolo Bonzini
                   ` (22 subsequent siblings)
  26 siblings, 2 replies; 46+ messages in thread
From: Paolo Bonzini @ 2022-04-15 13:18 UTC (permalink / raw)
  To: qemu-devel; +Cc: malureau, kwolf, hreitz, stefanha, qemu-block

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 include/qemu/coroutine.h | 2 +-
 util/qemu-coroutine.c    | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/include/qemu/coroutine.h b/include/qemu/coroutine.h
index 284571badb..2d9211faff 100644
--- a/include/qemu/coroutine.h
+++ b/include/qemu/coroutine.h
@@ -92,7 +92,7 @@ void coroutine_fn qemu_coroutine_yield(void);
 /**
  * Get the AioContext of the given coroutine
  */
-AioContext *coroutine_fn qemu_coroutine_get_aio_context(Coroutine *co);
+AioContext *qemu_coroutine_get_aio_context(Coroutine *co);
 
 /**
  * Get the currently executing coroutine
diff --git a/util/qemu-coroutine.c b/util/qemu-coroutine.c
index c03b2422ff..9f2bd96fa0 100644
--- a/util/qemu-coroutine.c
+++ b/util/qemu-coroutine.c
@@ -200,7 +200,7 @@ bool qemu_coroutine_entered(Coroutine *co)
     return co->caller;
 }
 
-AioContext *coroutine_fn qemu_coroutine_get_aio_context(Coroutine *co)
+AioContext *qemu_coroutine_get_aio_context(Coroutine *co)
 {
     return co->ctx;
 }
-- 
2.35.1




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

* [PATCH 05/26] blkdebug: add missing coroutine_fn annotations
  2022-04-15 13:18 [PATCH 00/19] block: fix coroutine_fn annotations Paolo Bonzini
                   ` (3 preceding siblings ...)
  2022-04-15 13:18 ` [PATCH 04/26] coroutine: " Paolo Bonzini
@ 2022-04-15 13:18 ` Paolo Bonzini
  2022-04-19 18:46   ` Eric Blake
  2022-04-15 13:18 ` [PATCH 06/26] blkverify: " Paolo Bonzini
                   ` (21 subsequent siblings)
  26 siblings, 1 reply; 46+ messages in thread
From: Paolo Bonzini @ 2022-04-15 13:18 UTC (permalink / raw)
  To: qemu-devel; +Cc: malureau, kwolf, hreitz, stefanha, qemu-block

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

diff --git a/block/blkdebug.c b/block/blkdebug.c
index bbf2948703..a93ba61487 100644
--- a/block/blkdebug.c
+++ b/block/blkdebug.c
@@ -587,8 +587,8 @@ out:
     return ret;
 }
 
-static int rule_check(BlockDriverState *bs, uint64_t offset, uint64_t bytes,
-                      BlkdebugIOType iotype)
+static int coroutine_fn rule_check(BlockDriverState *bs, uint64_t offset, uint64_t bytes,
+                                   BlkdebugIOType iotype)
 {
     BDRVBlkdebugState *s = bs->opaque;
     BlkdebugRule *rule = NULL;
@@ -672,7 +672,7 @@ blkdebug_co_pwritev(BlockDriverState *bs, int64_t offset, int64_t bytes,
     return bdrv_co_pwritev(bs->file, offset, bytes, qiov, flags);
 }
 
-static int blkdebug_co_flush(BlockDriverState *bs)
+static int coroutine_fn blkdebug_co_flush(BlockDriverState *bs)
 {
     int err = rule_check(bs, 0, 0, BLKDEBUG_IO_TYPE_FLUSH);
 
@@ -791,7 +791,7 @@ static void blkdebug_close(BlockDriverState *bs)
 }
 
 /* Called with lock held.  */
-static void suspend_request(BlockDriverState *bs, BlkdebugRule *rule)
+static void coroutine_fn suspend_request(BlockDriverState *bs, BlkdebugRule *rule)
 {
     BDRVBlkdebugState *s = bs->opaque;
     BlkdebugSuspendedReq *r;
@@ -810,8 +810,8 @@ static void suspend_request(BlockDriverState *bs, BlkdebugRule *rule)
 }
 
 /* Called with lock held.  */
-static void process_rule(BlockDriverState *bs, struct BlkdebugRule *rule,
-                         int *action_count, int *new_state)
+static void coroutine_fn process_rule(BlockDriverState *bs, struct BlkdebugRule *rule,
+                                      int *action_count, int *new_state)
 {
     BDRVBlkdebugState *s = bs->opaque;
 
@@ -840,7 +840,7 @@ static void process_rule(BlockDriverState *bs, struct BlkdebugRule *rule,
     }
 }
 
-static void blkdebug_debug_event(BlockDriverState *bs, BlkdebugEvent event)
+static void coroutine_fn blkdebug_debug_event(BlockDriverState *bs, BlkdebugEvent event)
 {
     BDRVBlkdebugState *s = bs->opaque;
     struct BlkdebugRule *rule, *next;
-- 
2.35.1




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

* [PATCH 06/26] blkverify: add missing coroutine_fn annotations
  2022-04-15 13:18 [PATCH 00/19] block: fix coroutine_fn annotations Paolo Bonzini
                   ` (4 preceding siblings ...)
  2022-04-15 13:18 ` [PATCH 05/26] blkdebug: add missing " Paolo Bonzini
@ 2022-04-15 13:18 ` Paolo Bonzini
  2022-04-19 18:47   ` Eric Blake
  2022-04-15 13:18 ` [PATCH 07/26] block: " Paolo Bonzini
                   ` (20 subsequent siblings)
  26 siblings, 1 reply; 46+ messages in thread
From: Paolo Bonzini @ 2022-04-15 13:18 UTC (permalink / raw)
  To: qemu-devel; +Cc: malureau, kwolf, hreitz, stefanha, qemu-block

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 block/blkverify.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/block/blkverify.c b/block/blkverify.c
index e4a37af3b2..020b1ae7b6 100644
--- a/block/blkverify.c
+++ b/block/blkverify.c
@@ -258,7 +258,7 @@ blkverify_co_pwritev(BlockDriverState *bs, int64_t offset, int64_t bytes,
     return blkverify_co_prwv(bs, &r, offset, bytes, qiov, qiov, flags, true);
 }
 
-static int blkverify_co_flush(BlockDriverState *bs)
+static int coroutine_fn blkverify_co_flush(BlockDriverState *bs)
 {
     BDRVBlkverifyState *s = bs->opaque;
 
-- 
2.35.1




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

* [PATCH 07/26] block: add missing coroutine_fn annotations
  2022-04-15 13:18 [PATCH 00/19] block: fix coroutine_fn annotations Paolo Bonzini
                   ` (5 preceding siblings ...)
  2022-04-15 13:18 ` [PATCH 06/26] blkverify: " Paolo Bonzini
@ 2022-04-15 13:18 ` Paolo Bonzini
  2022-04-19 18:50   ` Eric Blake
  2022-04-15 13:18 ` [PATCH 08/26] file-posix: " Paolo Bonzini
                   ` (19 subsequent siblings)
  26 siblings, 1 reply; 46+ messages in thread
From: Paolo Bonzini @ 2022-04-15 13:18 UTC (permalink / raw)
  To: qemu-devel; +Cc: malureau, kwolf, hreitz, stefanha, qemu-block

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

diff --git a/block/block-backend.c b/block/block-backend.c
index fedf2eca83..52009b8949 100644
--- a/block/block-backend.c
+++ b/block/block-backend.c
@@ -1413,8 +1413,8 @@ typedef struct BlkRwCo {
     BdrvRequestFlags flags;
 } BlkRwCo;
 
-int blk_pwrite_zeroes(BlockBackend *blk, int64_t offset,
-                      int64_t bytes, BdrvRequestFlags flags)
+int coroutine_fn blk_pwrite_zeroes(BlockBackend *blk, int64_t offset,
+                                   int64_t bytes, BdrvRequestFlags flags)
 {
     IO_OR_GS_CODE();
     return blk_pwritev_part(blk, offset, bytes, NULL, 0,
@@ -1534,7 +1534,7 @@ static BlockAIOCB *blk_aio_prwv(BlockBackend *blk, int64_t offset,
     return &acb->common;
 }
 
-static void blk_aio_read_entry(void *opaque)
+static void coroutine_fn blk_aio_read_entry(void *opaque)
 {
     BlkAioEmAIOCB *acb = opaque;
     BlkRwCo *rwco = &acb->rwco;
@@ -1546,7 +1546,7 @@ static void blk_aio_read_entry(void *opaque)
     blk_aio_complete(acb);
 }
 
-static void blk_aio_write_entry(void *opaque)
+static void coroutine_fn blk_aio_write_entry(void *opaque)
 {
     BlkAioEmAIOCB *acb = opaque;
     BlkRwCo *rwco = &acb->rwco;
@@ -1580,8 +1580,8 @@ int blk_pread(BlockBackend *blk, int64_t offset, void *buf, int bytes)
     return ret < 0 ? ret : bytes;
 }
 
-int blk_pwrite(BlockBackend *blk, int64_t offset, const void *buf, int bytes,
-               BdrvRequestFlags flags)
+int coroutine_fn blk_pwrite(BlockBackend *blk, int64_t offset, const void *buf, int bytes,
+                            BdrvRequestFlags flags)
 {
     int ret;
     QEMUIOVector qiov = QEMU_IOVEC_INIT_BUF(qiov, buf, bytes);
@@ -1681,7 +1681,7 @@ int blk_ioctl(BlockBackend *blk, unsigned long int req, void *buf)
     return ret;
 }
 
-static void blk_aio_ioctl_entry(void *opaque)
+static void coroutine_fn blk_aio_ioctl_entry(void *opaque)
 {
     BlkAioEmAIOCB *acb = opaque;
     BlkRwCo *rwco = &acb->rwco;
@@ -1715,7 +1715,7 @@ blk_co_do_pdiscard(BlockBackend *blk, int64_t offset, int64_t bytes)
     return bdrv_co_pdiscard(blk->root, offset, bytes);
 }
 
-static void blk_aio_pdiscard_entry(void *opaque)
+static void coroutine_fn blk_aio_pdiscard_entry(void *opaque)
 {
     BlkAioEmAIOCB *acb = opaque;
     BlkRwCo *rwco = &acb->rwco;
@@ -1771,7 +1771,7 @@ int coroutine_fn blk_co_do_flush(BlockBackend *blk)
     return bdrv_co_flush(blk_bs(blk));
 }
 
-static void blk_aio_flush_entry(void *opaque)
+static void coroutine_fn blk_aio_flush_entry(void *opaque)
 {
     BlkAioEmAIOCB *acb = opaque;
     BlkRwCo *rwco = &acb->rwco;
diff --git a/block/io.c b/block/io.c
index 9769ec53b0..7db9be3c03 100644
--- a/block/io.c
+++ b/block/io.c
@@ -751,7 +751,7 @@ void bdrv_drain_all(void)
  *
  * This function should be called when a tracked request is completing.
  */
-static void tracked_request_end(BdrvTrackedRequest *req)
+static void coroutine_fn tracked_request_end(BdrvTrackedRequest *req)
 {
     if (req->serialising) {
         qatomic_dec(&req->bs->serialising_in_flight);
@@ -766,11 +766,11 @@ static void tracked_request_end(BdrvTrackedRequest *req)
 /**
  * Add an active request to the tracked requests list
  */
-static void tracked_request_begin(BdrvTrackedRequest *req,
-                                  BlockDriverState *bs,
-                                  int64_t offset,
-                                  int64_t bytes,
-                                  enum BdrvTrackedRequestType type)
+static void coroutine_fn tracked_request_begin(BdrvTrackedRequest *req,
+                                               BlockDriverState *bs,
+                                               int64_t offset,
+                                               int64_t bytes,
+                                               enum BdrvTrackedRequestType type)
 {
     bdrv_check_request(offset, bytes, &error_abort);
 
@@ -809,7 +809,7 @@ static bool tracked_request_overlaps(BdrvTrackedRequest *req,
 }
 
 /* Called with self->bs->reqs_lock held */
-static BdrvTrackedRequest *
+static coroutine_fn BdrvTrackedRequest *
 bdrv_find_conflicting_request(BdrvTrackedRequest *self)
 {
     BdrvTrackedRequest *req;
@@ -1704,10 +1704,10 @@ static bool bdrv_init_padding(BlockDriverState *bs,
     return true;
 }
 
-static int bdrv_padding_rmw_read(BdrvChild *child,
-                                 BdrvTrackedRequest *req,
-                                 BdrvRequestPadding *pad,
-                                 bool zero_middle)
+static coroutine_fn int bdrv_padding_rmw_read(BdrvChild *child,
+                                              BdrvTrackedRequest *req,
+                                              BdrvRequestPadding *pad,
+                                              bool zero_middle)
 {
     QEMUIOVector local_qiov;
     BlockDriverState *bs = child->bs;
@@ -3228,7 +3228,7 @@ out:
     return ret;
 }
 
-int bdrv_co_ioctl(BlockDriverState *bs, int req, void *buf)
+int coroutine_fn bdrv_co_ioctl(BlockDriverState *bs, int req, void *buf)
 {
     BlockDriver *drv = bs->drv;
     CoroutineIOCompletion co = {
-- 
2.35.1




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

* [PATCH 08/26] file-posix: add missing coroutine_fn annotations
  2022-04-15 13:18 [PATCH 00/19] block: fix coroutine_fn annotations Paolo Bonzini
                   ` (6 preceding siblings ...)
  2022-04-15 13:18 ` [PATCH 07/26] block: " Paolo Bonzini
@ 2022-04-15 13:18 ` Paolo Bonzini
  2022-04-19 19:30   ` Eric Blake
  2022-04-15 13:18 ` [PATCH 09/26] iscsi: " Paolo Bonzini
                   ` (18 subsequent siblings)
  26 siblings, 1 reply; 46+ messages in thread
From: Paolo Bonzini @ 2022-04-15 13:18 UTC (permalink / raw)
  To: qemu-devel; +Cc: malureau, kwolf, hreitz, stefanha, qemu-block

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 block/file-posix.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/block/file-posix.c b/block/file-posix.c
index bfd9b21111..cf7b5531c8 100644
--- a/block/file-posix.c
+++ b/block/file-posix.c
@@ -2143,7 +2143,7 @@ static void raw_aio_unplug(BlockDriverState *bs)
 #endif
 }
 
-static int raw_co_flush_to_disk(BlockDriverState *bs)
+static int coroutine_fn raw_co_flush_to_disk(BlockDriverState *bs)
 {
     BDRVRawState *s = bs->opaque;
     RawPosixAIOData acb;
-- 
2.35.1




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

* [PATCH 09/26] iscsi: add missing coroutine_fn annotations
  2022-04-15 13:18 [PATCH 00/19] block: fix coroutine_fn annotations Paolo Bonzini
                   ` (7 preceding siblings ...)
  2022-04-15 13:18 ` [PATCH 08/26] file-posix: " Paolo Bonzini
@ 2022-04-15 13:18 ` Paolo Bonzini
  2022-04-19 19:43   ` Eric Blake
  2022-04-15 13:18 ` [PATCH 10/26] nbd: " Paolo Bonzini
                   ` (17 subsequent siblings)
  26 siblings, 1 reply; 46+ messages in thread
From: Paolo Bonzini @ 2022-04-15 13:18 UTC (permalink / raw)
  To: qemu-devel; +Cc: malureau, kwolf, hreitz, stefanha, qemu-block

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 block/iscsi.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/block/iscsi.c b/block/iscsi.c
index d707d0b354..b33eeec794 100644
--- a/block/iscsi.c
+++ b/block/iscsi.c
@@ -290,7 +290,7 @@ iscsi_co_generic_cb(struct iscsi_context *iscsi, int status,
     }
 }
 
-static void iscsi_co_init_iscsitask(IscsiLun *iscsilun, struct IscsiTask *iTask)
+static void coroutine_fn iscsi_co_init_iscsitask(IscsiLun *iscsilun, struct IscsiTask *iTask)
 {
     *iTask = (struct IscsiTask) {
         .co         = qemu_coroutine_self(),
-- 
2.35.1




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

* [PATCH 10/26] nbd: add missing coroutine_fn annotations
  2022-04-15 13:18 [PATCH 00/19] block: fix coroutine_fn annotations Paolo Bonzini
                   ` (8 preceding siblings ...)
  2022-04-15 13:18 ` [PATCH 09/26] iscsi: " Paolo Bonzini
@ 2022-04-15 13:18 ` Paolo Bonzini
  2022-04-26 20:26   ` Eric Blake
  2022-04-15 13:18 ` [PATCH 11/26] nfs: " Paolo Bonzini
                   ` (16 subsequent siblings)
  26 siblings, 1 reply; 46+ messages in thread
From: Paolo Bonzini @ 2022-04-15 13:18 UTC (permalink / raw)
  To: qemu-devel; +Cc: malureau, kwolf, hreitz, stefanha, qemu-block

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

diff --git a/block/nbd.c b/block/nbd.c
index 5af4deac3f..a4c8d661ad 100644
--- a/block/nbd.c
+++ b/block/nbd.c
@@ -974,11 +974,11 @@ static void nbd_iter_request_error(NBDReplyChunkIter *iter, int ret)
  * nbd_reply_chunk_iter_receive
  * The pointer stored in @payload requires g_free() to free it.
  */
-static bool nbd_reply_chunk_iter_receive(BDRVNBDState *s,
-                                         NBDReplyChunkIter *iter,
-                                         uint64_t handle,
-                                         QEMUIOVector *qiov, NBDReply *reply,
-                                         void **payload)
+static bool coroutine_fn nbd_reply_chunk_iter_receive(BDRVNBDState *s,
+                                                      NBDReplyChunkIter *iter,
+                                                      uint64_t handle,
+                                                      QEMUIOVector *qiov, NBDReply *reply,
+                                                      void **payload)
 {
     int ret, request_ret;
     NBDReply local_reply;
-- 
2.35.1




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

* [PATCH 11/26] nfs: add missing coroutine_fn annotations
  2022-04-15 13:18 [PATCH 00/19] block: fix coroutine_fn annotations Paolo Bonzini
                   ` (9 preceding siblings ...)
  2022-04-15 13:18 ` [PATCH 10/26] nbd: " Paolo Bonzini
@ 2022-04-15 13:18 ` Paolo Bonzini
  2022-04-15 13:18 ` [PATCH 12/26] nvme: " Paolo Bonzini
                   ` (15 subsequent siblings)
  26 siblings, 0 replies; 46+ messages in thread
From: Paolo Bonzini @ 2022-04-15 13:18 UTC (permalink / raw)
  To: qemu-devel; +Cc: malureau, kwolf, hreitz, stefanha, qemu-block

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 block/nfs.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/block/nfs.c b/block/nfs.c
index 444c40b458..596ebe98cb 100644
--- a/block/nfs.c
+++ b/block/nfs.c
@@ -223,7 +223,7 @@ static void nfs_process_write(void *arg)
     qemu_mutex_unlock(&client->mutex);
 }
 
-static void nfs_co_init_task(BlockDriverState *bs, NFSRPC *task)
+static void coroutine_fn nfs_co_init_task(BlockDriverState *bs, NFSRPC *task)
 {
     *task = (NFSRPC) {
         .co             = qemu_coroutine_self(),
-- 
2.35.1




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

* [PATCH 12/26] nvme: add missing coroutine_fn annotations
  2022-04-15 13:18 [PATCH 00/19] block: fix coroutine_fn annotations Paolo Bonzini
                   ` (10 preceding siblings ...)
  2022-04-15 13:18 ` [PATCH 11/26] nfs: " Paolo Bonzini
@ 2022-04-15 13:18 ` Paolo Bonzini
  2022-04-15 13:18 ` [PATCH 13/26] parallels: " Paolo Bonzini
                   ` (14 subsequent siblings)
  26 siblings, 0 replies; 46+ messages in thread
From: Paolo Bonzini @ 2022-04-15 13:18 UTC (permalink / raw)
  To: qemu-devel; +Cc: malureau, kwolf, hreitz, stefanha, qemu-block

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

diff --git a/block/nvme.c b/block/nvme.c
index 01fb28aa63..6519697e40 100644
--- a/block/nvme.c
+++ b/block/nvme.c
@@ -1234,8 +1234,9 @@ static inline bool nvme_qiov_aligned(BlockDriverState *bs,
     return true;
 }
 
-static int nvme_co_prw(BlockDriverState *bs, uint64_t offset, uint64_t bytes,
-                       QEMUIOVector *qiov, bool is_write, int flags)
+static coroutine_fn int nvme_co_prw(BlockDriverState *bs,
+				    uint64_t offset, uint64_t bytes,
+				    QEMUIOVector *qiov, bool is_write, int flags)
 {
     BDRVNVMeState *s = bs->opaque;
     int r;
-- 
2.35.1




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

* [PATCH 13/26] parallels: add missing coroutine_fn annotations
  2022-04-15 13:18 [PATCH 00/19] block: fix coroutine_fn annotations Paolo Bonzini
                   ` (11 preceding siblings ...)
  2022-04-15 13:18 ` [PATCH 12/26] nvme: " Paolo Bonzini
@ 2022-04-15 13:18 ` Paolo Bonzini
  2022-04-15 13:18 ` [PATCH 14/26] qcow2: " Paolo Bonzini
                   ` (13 subsequent siblings)
  26 siblings, 0 replies; 46+ messages in thread
From: Paolo Bonzini @ 2022-04-15 13:18 UTC (permalink / raw)
  To: qemu-devel; +Cc: malureau, kwolf, hreitz, stefanha, qemu-block

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

diff --git a/block/parallels.c b/block/parallels.c
index 8879b7027a..bee2ff023d 100644
--- a/block/parallels.c
+++ b/block/parallels.c
@@ -165,8 +165,9 @@ static int64_t block_status(BDRVParallelsState *s, int64_t sector_num,
     return start_off;
 }
 
-static int64_t allocate_clusters(BlockDriverState *bs, int64_t sector_num,
-                                 int nb_sectors, int *pnum)
+static coroutine_fn int64_t allocate_clusters(BlockDriverState *bs,
+					      int64_t sector_num,
+					      int nb_sectors, int *pnum)
 {
     int ret = 0;
     BDRVParallelsState *s = bs->opaque;
-- 
2.35.1




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

* [PATCH 14/26] qcow2: add missing coroutine_fn annotations
  2022-04-15 13:18 [PATCH 00/19] block: fix coroutine_fn annotations Paolo Bonzini
                   ` (12 preceding siblings ...)
  2022-04-15 13:18 ` [PATCH 13/26] parallels: " Paolo Bonzini
@ 2022-04-15 13:18 ` Paolo Bonzini
  2022-04-15 13:18 ` [PATCH 15/26] copy-before-write: " Paolo Bonzini
                   ` (12 subsequent siblings)
  26 siblings, 0 replies; 46+ messages in thread
From: Paolo Bonzini @ 2022-04-15 13:18 UTC (permalink / raw)
  To: qemu-devel; +Cc: malureau, kwolf, hreitz, stefanha, qemu-block

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 block/qcow2-cluster.c  | 18 +++++++++---------
 block/qcow2-refcount.c |  2 +-
 block/qcow2.c          |  4 ++--
 block/qcow2.h          | 14 +++++++-------
 4 files changed, 19 insertions(+), 19 deletions(-)

diff --git a/block/qcow2-cluster.c b/block/qcow2-cluster.c
index 20a16ba6ee..37fc7b905a 100644
--- a/block/qcow2-cluster.c
+++ b/block/qcow2-cluster.c
@@ -884,7 +884,7 @@ int qcow2_alloc_compressed_cluster_offset(BlockDriverState *bs,
     return 0;
 }
 
-static int perform_cow(BlockDriverState *bs, QCowL2Meta *m)
+static int coroutine_fn perform_cow(BlockDriverState *bs, QCowL2Meta *m)
 {
     BDRVQcow2State *s = bs->opaque;
     Qcow2COWRegion *start = &m->cow_start;
@@ -1024,7 +1024,7 @@ fail:
     return ret;
 }
 
-int qcow2_alloc_cluster_link_l2(BlockDriverState *bs, QCowL2Meta *m)
+int coroutine_fn qcow2_alloc_cluster_link_l2(BlockDriverState *bs, QCowL2Meta *m)
 {
     BDRVQcow2State *s = bs->opaque;
     int i, j = 0, l2_index, ret;
@@ -1397,8 +1397,8 @@ static int count_single_write_clusters(BlockDriverState *bs, int nb_clusters,
  *           information on cluster allocation may be invalid now. The caller
  *           must start over anyway, so consider *cur_bytes undefined.
  */
-static int handle_dependencies(BlockDriverState *bs, uint64_t guest_offset,
-    uint64_t *cur_bytes, QCowL2Meta **m)
+static int coroutine_fn handle_dependencies(BlockDriverState *bs, uint64_t guest_offset,
+                                            uint64_t *cur_bytes, QCowL2Meta **m)
 {
     BDRVQcow2State *s = bs->opaque;
     QCowL2Meta *old_alloc;
@@ -1772,9 +1772,9 @@ out:
  *
  * Return 0 on success and -errno in error cases
  */
-int qcow2_alloc_host_offset(BlockDriverState *bs, uint64_t offset,
-                            unsigned int *bytes, uint64_t *host_offset,
-                            QCowL2Meta **m)
+int coroutine_fn qcow2_alloc_host_offset(BlockDriverState *bs, uint64_t offset,
+                                         unsigned int *bytes, uint64_t *host_offset,
+                                         QCowL2Meta **m)
 {
     BDRVQcow2State *s = bs->opaque;
     uint64_t start, remaining;
@@ -2105,8 +2105,8 @@ out:
     return ret;
 }
 
-int qcow2_subcluster_zeroize(BlockDriverState *bs, uint64_t offset,
-                             uint64_t bytes, int flags)
+int coroutine_fn qcow2_subcluster_zeroize(BlockDriverState *bs, uint64_t offset,
+                                          uint64_t bytes, int flags)
 {
     BDRVQcow2State *s = bs->opaque;
     uint64_t end_offset = offset + bytes;
diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c
index b6f90b2702..ef4cbaedf2 100644
--- a/block/qcow2-refcount.c
+++ b/block/qcow2-refcount.c
@@ -3561,7 +3561,7 @@ int64_t qcow2_get_last_cluster(BlockDriverState *bs, int64_t size)
     return -EIO;
 }
 
-int qcow2_detect_metadata_preallocation(BlockDriverState *bs)
+int coroutine_fn qcow2_detect_metadata_preallocation(BlockDriverState *bs)
 {
     BDRVQcow2State *s = bs->opaque;
     int64_t i, end_cluster, cluster_count = 0, threshold;
diff --git a/block/qcow2.c b/block/qcow2.c
index b5c47931ef..d1c35cd290 100644
--- a/block/qcow2.c
+++ b/block/qcow2.c
@@ -2434,7 +2434,7 @@ static bool merge_cow(uint64_t offset, unsigned bytes,
  * Return 1 if the COW regions read as zeroes, 0 if not, < 0 on error.
  * Note that returning 0 does not guarantee non-zero data.
  */
-static int is_zero_cow(BlockDriverState *bs, QCowL2Meta *m)
+static int coroutine_fn is_zero_cow(BlockDriverState *bs, QCowL2Meta *m)
 {
     /*
      * This check is designed for optimization shortcut so it must be
@@ -2452,7 +2452,7 @@ static int is_zero_cow(BlockDriverState *bs, QCowL2Meta *m)
                                 m->cow_end.nb_bytes);
 }
 
-static int handle_alloc_space(BlockDriverState *bs, QCowL2Meta *l2meta)
+static int coroutine_fn handle_alloc_space(BlockDriverState *bs, QCowL2Meta *l2meta)
 {
     BDRVQcow2State *s = bs->opaque;
     QCowL2Meta *m;
diff --git a/block/qcow2.h b/block/qcow2.h
index c8d9e8ea79..36495d9051 100644
--- a/block/qcow2.h
+++ b/block/qcow2.h
@@ -895,7 +895,7 @@ int qcow2_change_refcount_order(BlockDriverState *bs, int refcount_order,
                                 void *cb_opaque, Error **errp);
 int qcow2_shrink_reftable(BlockDriverState *bs);
 int64_t qcow2_get_last_cluster(BlockDriverState *bs, int64_t size);
-int qcow2_detect_metadata_preallocation(BlockDriverState *bs);
+int coroutine_fn qcow2_detect_metadata_preallocation(BlockDriverState *bs);
 
 /* qcow2-cluster.c functions */
 int qcow2_grow_l1_table(BlockDriverState *bs, uint64_t min_size,
@@ -908,9 +908,9 @@ int qcow2_encrypt_sectors(BDRVQcow2State *s, int64_t sector_num,
 int qcow2_get_host_offset(BlockDriverState *bs, uint64_t offset,
                           unsigned int *bytes, uint64_t *host_offset,
                           QCow2SubclusterType *subcluster_type);
-int qcow2_alloc_host_offset(BlockDriverState *bs, uint64_t offset,
-                            unsigned int *bytes, uint64_t *host_offset,
-                            QCowL2Meta **m);
+int coroutine_fn qcow2_alloc_host_offset(BlockDriverState *bs, uint64_t offset,
+                                         unsigned int *bytes, uint64_t *host_offset,
+                                         QCowL2Meta **m);
 int qcow2_alloc_compressed_cluster_offset(BlockDriverState *bs,
                                           uint64_t offset,
                                           int compressed_size,
@@ -918,13 +918,13 @@ int qcow2_alloc_compressed_cluster_offset(BlockDriverState *bs,
 void qcow2_parse_compressed_l2_entry(BlockDriverState *bs, uint64_t l2_entry,
                                      uint64_t *coffset, int *csize);
 
-int qcow2_alloc_cluster_link_l2(BlockDriverState *bs, QCowL2Meta *m);
+int coroutine_fn qcow2_alloc_cluster_link_l2(BlockDriverState *bs, QCowL2Meta *m);
 void qcow2_alloc_cluster_abort(BlockDriverState *bs, QCowL2Meta *m);
 int qcow2_cluster_discard(BlockDriverState *bs, uint64_t offset,
                           uint64_t bytes, enum qcow2_discard_type type,
                           bool full_discard);
-int qcow2_subcluster_zeroize(BlockDriverState *bs, uint64_t offset,
-                             uint64_t bytes, int flags);
+int coroutine_fn qcow2_subcluster_zeroize(BlockDriverState *bs, uint64_t offset,
+                                          uint64_t bytes, int flags);
 
 int qcow2_expand_zero_clusters(BlockDriverState *bs,
                                BlockDriverAmendStatusCB *status_cb,
-- 
2.35.1




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

* [PATCH 15/26] copy-before-write: add missing coroutine_fn annotations
  2022-04-15 13:18 [PATCH 00/19] block: fix coroutine_fn annotations Paolo Bonzini
                   ` (13 preceding siblings ...)
  2022-04-15 13:18 ` [PATCH 14/26] qcow2: " Paolo Bonzini
@ 2022-04-15 13:18 ` Paolo Bonzini
  2022-04-15 13:18 ` [PATCH 16/26] curl: " Paolo Bonzini
                   ` (11 subsequent siblings)
  26 siblings, 0 replies; 46+ messages in thread
From: Paolo Bonzini @ 2022-04-15 13:18 UTC (permalink / raw)
  To: qemu-devel; +Cc: malureau, kwolf, hreitz, stefanha, qemu-block

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 block/copy-before-write.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/block/copy-before-write.c b/block/copy-before-write.c
index a8a06fdc09..5ad9693b13 100644
--- a/block/copy-before-write.c
+++ b/block/copy-before-write.c
@@ -165,9 +165,9 @@ static int coroutine_fn cbw_co_flush(BlockDriverState *bs)
  * It's guaranteed that guest writes will not interact in the region until
  * cbw_snapshot_read_unlock() called.
  */
-static BlockReq *cbw_snapshot_read_lock(BlockDriverState *bs,
-                                        int64_t offset, int64_t bytes,
-                                        int64_t *pnum, BdrvChild **file)
+static coroutine_fn BlockReq *cbw_snapshot_read_lock(BlockDriverState *bs,
+                                                     int64_t offset, int64_t bytes,
+                                                     int64_t *pnum, BdrvChild **file)
 {
     BDRVCopyBeforeWriteState *s = bs->opaque;
     BlockReq *req = g_new(BlockReq, 1);
@@ -197,7 +197,7 @@ static BlockReq *cbw_snapshot_read_lock(BlockDriverState *bs,
     return req;
 }
 
-static void cbw_snapshot_read_unlock(BlockDriverState *bs, BlockReq *req)
+static coroutine_fn void cbw_snapshot_read_unlock(BlockDriverState *bs, BlockReq *req)
 {
     BDRVCopyBeforeWriteState *s = bs->opaque;
 
-- 
2.35.1




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

* [PATCH 16/26] curl: add missing coroutine_fn annotations
  2022-04-15 13:18 [PATCH 00/19] block: fix coroutine_fn annotations Paolo Bonzini
                   ` (14 preceding siblings ...)
  2022-04-15 13:18 ` [PATCH 15/26] copy-before-write: " Paolo Bonzini
@ 2022-04-15 13:18 ` Paolo Bonzini
  2022-04-15 13:18 ` [PATCH 17/26] qed: " Paolo Bonzini
                   ` (10 subsequent siblings)
  26 siblings, 0 replies; 46+ messages in thread
From: Paolo Bonzini @ 2022-04-15 13:18 UTC (permalink / raw)
  To: qemu-devel; +Cc: malureau, kwolf, hreitz, stefanha, qemu-block

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 block/curl.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/block/curl.c b/block/curl.c
index 1e0f609579..cba4c4cac7 100644
--- a/block/curl.c
+++ b/block/curl.c
@@ -855,7 +855,7 @@ out_noclean:
     return -EINVAL;
 }
 
-static void curl_setup_preadv(BlockDriverState *bs, CURLAIOCB *acb)
+static void coroutine_fn curl_setup_preadv(BlockDriverState *bs, CURLAIOCB *acb)
 {
     CURLState *state;
     int running;
-- 
2.35.1




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

* [PATCH 17/26] qed: add missing coroutine_fn annotations
  2022-04-15 13:18 [PATCH 00/19] block: fix coroutine_fn annotations Paolo Bonzini
                   ` (15 preceding siblings ...)
  2022-04-15 13:18 ` [PATCH 16/26] curl: " Paolo Bonzini
@ 2022-04-15 13:18 ` Paolo Bonzini
  2022-04-15 13:18 ` [PATCH 18/26] quorum: " Paolo Bonzini
                   ` (9 subsequent siblings)
  26 siblings, 0 replies; 46+ messages in thread
From: Paolo Bonzini @ 2022-04-15 13:18 UTC (permalink / raw)
  To: qemu-devel; +Cc: malureau, kwolf, hreitz, stefanha, qemu-block

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

diff --git a/block/qed.c b/block/qed.c
index f34d9a3ac1..208128d679 100644
--- a/block/qed.c
+++ b/block/qed.c
@@ -259,7 +259,7 @@ static CachedL2Table *qed_new_l2_table(BDRVQEDState *s)
     return l2_table;
 }
 
-static bool qed_plug_allocating_write_reqs(BDRVQEDState *s)
+static bool coroutine_fn qed_plug_allocating_write_reqs(BDRVQEDState *s)
 {
     qemu_co_mutex_lock(&s->table_lock);
 
@@ -278,7 +278,7 @@ static bool qed_plug_allocating_write_reqs(BDRVQEDState *s)
     return true;
 }
 
-static void qed_unplug_allocating_write_reqs(BDRVQEDState *s)
+static void coroutine_fn qed_unplug_allocating_write_reqs(BDRVQEDState *s)
 {
     qemu_co_mutex_lock(&s->table_lock);
     assert(s->allocating_write_reqs_plugged);
-- 
2.35.1




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

* [PATCH 18/26] quorum: add missing coroutine_fn annotations
  2022-04-15 13:18 [PATCH 00/19] block: fix coroutine_fn annotations Paolo Bonzini
                   ` (16 preceding siblings ...)
  2022-04-15 13:18 ` [PATCH 17/26] qed: " Paolo Bonzini
@ 2022-04-15 13:18 ` Paolo Bonzini
  2022-04-15 13:18 ` [PATCH 19/26] throttle: " Paolo Bonzini
                   ` (8 subsequent siblings)
  26 siblings, 0 replies; 46+ messages in thread
From: Paolo Bonzini @ 2022-04-15 13:18 UTC (permalink / raw)
  To: qemu-devel; +Cc: malureau, kwolf, hreitz, stefanha, qemu-block

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 block/quorum.c | 35 ++++++++++++++++++-----------------
 1 file changed, 18 insertions(+), 17 deletions(-)

diff --git a/block/quorum.c b/block/quorum.c
index f33f30d36b..5ff69d7443 100644
--- a/block/quorum.c
+++ b/block/quorum.c
@@ -161,11 +161,10 @@ static bool quorum_64bits_compare(QuorumVoteValue *a, QuorumVoteValue *b)
     return a->l == b->l;
 }
 
-static QuorumAIOCB *quorum_aio_get(BlockDriverState *bs,
-                                   QEMUIOVector *qiov,
-                                   uint64_t offset,
-                                   uint64_t bytes,
-                                   int flags)
+static QuorumAIOCB *coroutine_fn quorum_aio_get(BlockDriverState *bs,
+                                                QEMUIOVector *qiov,
+                                                uint64_t offset, uint64_t bytes,
+                                                int flags)
 {
     BDRVQuorumState *s = bs->opaque;
     QuorumAIOCB *acb = g_new(QuorumAIOCB, 1);
@@ -273,7 +272,7 @@ static void quorum_report_bad_versions(BDRVQuorumState *s,
     }
 }
 
-static void quorum_rewrite_entry(void *opaque)
+static void coroutine_fn quorum_rewrite_entry(void *opaque)
 {
     QuorumCo *co = opaque;
     QuorumAIOCB *acb = co->acb;
@@ -574,7 +573,7 @@ free_exit:
     quorum_free_vote_list(&acb->votes);
 }
 
-static void read_quorum_children_entry(void *opaque)
+static void coroutine_fn read_quorum_children_entry(void *opaque)
 {
     QuorumCo *co = opaque;
     QuorumAIOCB *acb = co->acb;
@@ -602,7 +601,7 @@ static void read_quorum_children_entry(void *opaque)
     }
 }
 
-static int read_quorum_children(QuorumAIOCB *acb)
+static int coroutine_fn read_quorum_children(QuorumAIOCB *acb)
 {
     BDRVQuorumState *s = acb->bs->opaque;
     int i;
@@ -643,7 +642,7 @@ static int read_quorum_children(QuorumAIOCB *acb)
     return acb->vote_ret;
 }
 
-static int read_fifo_child(QuorumAIOCB *acb)
+static int coroutine_fn read_fifo_child(QuorumAIOCB *acb)
 {
     BDRVQuorumState *s = acb->bs->opaque;
     int n, ret;
@@ -664,8 +663,9 @@ static int read_fifo_child(QuorumAIOCB *acb)
     return ret;
 }
 
-static int quorum_co_preadv(BlockDriverState *bs, int64_t offset, int64_t bytes,
-                            QEMUIOVector *qiov, BdrvRequestFlags flags)
+static int coroutine_fn quorum_co_preadv(BlockDriverState *bs,
+                                         int64_t offset, int64_t bytes,
+                                         QEMUIOVector *qiov, BdrvRequestFlags flags)
 {
     BDRVQuorumState *s = bs->opaque;
     QuorumAIOCB *acb = quorum_aio_get(bs, qiov, offset, bytes, flags);
@@ -684,7 +684,7 @@ static int quorum_co_preadv(BlockDriverState *bs, int64_t offset, int64_t bytes,
     return ret;
 }
 
-static void write_quorum_entry(void *opaque)
+static void coroutine_fn write_quorum_entry(void *opaque)
 {
     QuorumCo *co = opaque;
     QuorumAIOCB *acb = co->acb;
@@ -715,9 +715,9 @@ static void write_quorum_entry(void *opaque)
     }
 }
 
-static int quorum_co_pwritev(BlockDriverState *bs, int64_t offset,
-                             int64_t bytes, QEMUIOVector *qiov,
-                             BdrvRequestFlags flags)
+static int coroutine_fn quorum_co_pwritev(BlockDriverState *bs, int64_t offset,
+                                          int64_t bytes, QEMUIOVector *qiov,
+                                          BdrvRequestFlags flags)
 {
     BDRVQuorumState *s = bs->opaque;
     QuorumAIOCB *acb = quorum_aio_get(bs, qiov, offset, bytes, flags);
@@ -746,8 +746,9 @@ static int quorum_co_pwritev(BlockDriverState *bs, int64_t offset,
     return ret;
 }
 
-static int quorum_co_pwrite_zeroes(BlockDriverState *bs, int64_t offset,
-                                   int64_t bytes, BdrvRequestFlags flags)
+static int coroutine_fn quorum_co_pwrite_zeroes(BlockDriverState *bs,
+                                                int64_t offset, int64_t bytes,
+                                                BdrvRequestFlags flags)
 
 {
     return quorum_co_pwritev(bs, offset, bytes, NULL,
-- 
2.35.1




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

* [PATCH 19/26] throttle: add missing coroutine_fn annotations
  2022-04-15 13:18 [PATCH 00/19] block: fix coroutine_fn annotations Paolo Bonzini
                   ` (17 preceding siblings ...)
  2022-04-15 13:18 ` [PATCH 18/26] quorum: " Paolo Bonzini
@ 2022-04-15 13:18 ` Paolo Bonzini
  2022-04-15 13:18 ` [PATCH 20/26] vmdk: " Paolo Bonzini
                   ` (7 subsequent siblings)
  26 siblings, 0 replies; 46+ messages in thread
From: Paolo Bonzini @ 2022-04-15 13:18 UTC (permalink / raw)
  To: qemu-devel; +Cc: malureau, kwolf, hreitz, stefanha, qemu-block

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 block/throttle.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/block/throttle.c b/block/throttle.c
index 6e8d52fa24..ddd450593a 100644
--- a/block/throttle.c
+++ b/block/throttle.c
@@ -162,7 +162,7 @@ static int coroutine_fn throttle_co_pwritev_compressed(BlockDriverState *bs,
                                BDRV_REQ_WRITE_COMPRESSED);
 }
 
-static int throttle_co_flush(BlockDriverState *bs)
+static int coroutine_fn throttle_co_flush(BlockDriverState *bs)
 {
     return bdrv_co_flush(bs->file->bs);
 }
-- 
2.35.1




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

* [PATCH 20/26] vmdk: add missing coroutine_fn annotations
  2022-04-15 13:18 [PATCH 00/19] block: fix coroutine_fn annotations Paolo Bonzini
                   ` (18 preceding siblings ...)
  2022-04-15 13:18 ` [PATCH 19/26] throttle: " Paolo Bonzini
@ 2022-04-15 13:18 ` Paolo Bonzini
  2022-04-15 13:18 ` [PATCH 21/26] job: " Paolo Bonzini
                   ` (6 subsequent siblings)
  26 siblings, 0 replies; 46+ messages in thread
From: Paolo Bonzini @ 2022-04-15 13:18 UTC (permalink / raw)
  To: qemu-devel; +Cc: malureau, kwolf, hreitz, stefanha, qemu-block

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

diff --git a/block/vmdk.c b/block/vmdk.c
index 37c0946066..27d3732255 100644
--- a/block/vmdk.c
+++ b/block/vmdk.c
@@ -1741,10 +1741,10 @@ static int coroutine_fn vmdk_co_block_status(BlockDriverState *bs,
     return ret;
 }
 
-static int vmdk_write_extent(VmdkExtent *extent, int64_t cluster_offset,
-                            int64_t offset_in_cluster, QEMUIOVector *qiov,
-                            uint64_t qiov_offset, uint64_t n_bytes,
-                            uint64_t offset)
+static int coroutine_fn vmdk_write_extent(VmdkExtent *extent, int64_t cluster_offset,
+                                         int64_t offset_in_cluster, QEMUIOVector *qiov,
+					  uint64_t qiov_offset, uint64_t n_bytes,
+					  uint64_t offset)
 {
     int ret;
     VmdkGrainMarker *data = NULL;
@@ -1822,9 +1822,9 @@ static int vmdk_write_extent(VmdkExtent *extent, int64_t cluster_offset,
     return ret;
 }
 
-static int vmdk_read_extent(VmdkExtent *extent, int64_t cluster_offset,
-                            int64_t offset_in_cluster, QEMUIOVector *qiov,
-                            int bytes)
+static int coroutine_fn vmdk_read_extent(VmdkExtent *extent, int64_t cluster_offset,
+                                        int64_t offset_in_cluster, QEMUIOVector *qiov,
+					 int bytes)
 {
     int ret;
     int cluster_bytes, buf_bytes;
@@ -1971,9 +1971,9 @@ fail:
  *
  * Returns: error code with 0 for success.
  */
-static int vmdk_pwritev(BlockDriverState *bs, uint64_t offset,
-                       uint64_t bytes, QEMUIOVector *qiov,
-                       bool zeroed, bool zero_dry_run)
+static int coroutine_fn vmdk_pwritev(BlockDriverState *bs, uint64_t offset,
+				     uint64_t bytes, QEMUIOVector *qiov,
+				     bool zeroed, bool zero_dry_run)
 {
     BDRVVmdkState *s = bs->opaque;
     VmdkExtent *extent = NULL;
-- 
2.35.1




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

* [PATCH 21/26] job: add missing coroutine_fn annotations
  2022-04-15 13:18 [PATCH 00/19] block: fix coroutine_fn annotations Paolo Bonzini
                   ` (19 preceding siblings ...)
  2022-04-15 13:18 ` [PATCH 20/26] vmdk: " Paolo Bonzini
@ 2022-04-15 13:18 ` Paolo Bonzini
  2022-04-15 13:18 ` [PATCH 22/26] coroutine-lock: " Paolo Bonzini
                   ` (5 subsequent siblings)
  26 siblings, 0 replies; 46+ messages in thread
From: Paolo Bonzini @ 2022-04-15 13:18 UTC (permalink / raw)
  To: qemu-devel; +Cc: malureau, kwolf, hreitz, stefanha, qemu-block

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

diff --git a/include/qemu/job.h b/include/qemu/job.h
index c105b31076..397ac39608 100644
--- a/include/qemu/job.h
+++ b/include/qemu/job.h
@@ -436,7 +436,7 @@ void coroutine_fn job_pause_point(Job *job);
  *
  * Yield the job coroutine.
  */
-void job_yield(Job *job);
+void coroutine_fn job_yield(Job *job);
 
 /**
  * @job: The job that calls the function.
diff --git a/job.c b/job.c
index 075c6f3a20..20f0d8b2cd 100644
--- a/job.c
+++ b/job.c
@@ -525,7 +525,7 @@ void coroutine_fn job_pause_point(Job *job)
     }
 }
 
-void job_yield(Job *job)
+void coroutine_fn job_yield(Job *job)
 {
     assert(job->busy);
 
-- 
2.35.1




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

* [PATCH 22/26] coroutine-lock: add missing coroutine_fn annotations
  2022-04-15 13:18 [PATCH 00/19] block: fix coroutine_fn annotations Paolo Bonzini
                   ` (20 preceding siblings ...)
  2022-04-15 13:18 ` [PATCH 21/26] job: " Paolo Bonzini
@ 2022-04-15 13:18 ` Paolo Bonzini
  2022-04-15 13:18 ` [PATCH 23/26] raw-format: " Paolo Bonzini
                   ` (4 subsequent siblings)
  26 siblings, 0 replies; 46+ messages in thread
From: Paolo Bonzini @ 2022-04-15 13:18 UTC (permalink / raw)
  To: qemu-devel; +Cc: malureau, kwolf, hreitz, stefanha, qemu-block

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 util/qemu-coroutine-lock.c | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/util/qemu-coroutine-lock.c b/util/qemu-coroutine-lock.c
index 2669403839..ec55490b52 100644
--- a/util/qemu-coroutine-lock.c
+++ b/util/qemu-coroutine-lock.c
@@ -144,7 +144,7 @@ typedef struct CoWaitRecord {
     QSLIST_ENTRY(CoWaitRecord) next;
 } CoWaitRecord;
 
-static void push_waiter(CoMutex *mutex, CoWaitRecord *w)
+static void coroutine_fn push_waiter(CoMutex *mutex, CoWaitRecord *w)
 {
     w->co = qemu_coroutine_self();
     QSLIST_INSERT_HEAD_ATOMIC(&mutex->from_push, w, next);
@@ -341,7 +341,7 @@ void qemu_co_rwlock_init(CoRwlock *lock)
 }
 
 /* Releases the internal CoMutex.  */
-static void qemu_co_rwlock_maybe_wake_one(CoRwlock *lock)
+static void coroutine_fn qemu_co_rwlock_maybe_wake_one(CoRwlock *lock)
 {
     CoRwTicket *tkt = QSIMPLEQ_FIRST(&lock->tickets);
     Coroutine *co = NULL;
@@ -374,7 +374,7 @@ static void qemu_co_rwlock_maybe_wake_one(CoRwlock *lock)
     }
 }
 
-void qemu_co_rwlock_rdlock(CoRwlock *lock)
+void coroutine_fn qemu_co_rwlock_rdlock(CoRwlock *lock)
 {
     Coroutine *self = qemu_coroutine_self();
 
@@ -399,7 +399,7 @@ void qemu_co_rwlock_rdlock(CoRwlock *lock)
     self->locks_held++;
 }
 
-void qemu_co_rwlock_unlock(CoRwlock *lock)
+void coroutine_fn qemu_co_rwlock_unlock(CoRwlock *lock)
 {
     Coroutine *self = qemu_coroutine_self();
 
@@ -417,7 +417,7 @@ void qemu_co_rwlock_unlock(CoRwlock *lock)
     qemu_co_rwlock_maybe_wake_one(lock);
 }
 
-void qemu_co_rwlock_downgrade(CoRwlock *lock)
+void coroutine_fn qemu_co_rwlock_downgrade(CoRwlock *lock)
 {
     qemu_co_mutex_lock(&lock->mutex);
     assert(lock->owners == -1);
@@ -427,7 +427,7 @@ void qemu_co_rwlock_downgrade(CoRwlock *lock)
     qemu_co_rwlock_maybe_wake_one(lock);
 }
 
-void qemu_co_rwlock_wrlock(CoRwlock *lock)
+void coroutine_fn qemu_co_rwlock_wrlock(CoRwlock *lock)
 {
     Coroutine *self = qemu_coroutine_self();
 
@@ -447,7 +447,7 @@ void qemu_co_rwlock_wrlock(CoRwlock *lock)
     self->locks_held++;
 }
 
-void qemu_co_rwlock_upgrade(CoRwlock *lock)
+void coroutine_fn qemu_co_rwlock_upgrade(CoRwlock *lock)
 {
     qemu_co_mutex_lock(&lock->mutex);
     assert(lock->owners > 0);
-- 
2.35.1




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

* [PATCH 23/26] raw-format: add missing coroutine_fn annotations
  2022-04-15 13:18 [PATCH 00/19] block: fix coroutine_fn annotations Paolo Bonzini
                   ` (21 preceding siblings ...)
  2022-04-15 13:18 ` [PATCH 22/26] coroutine-lock: " Paolo Bonzini
@ 2022-04-15 13:18 ` Paolo Bonzini
  2022-04-15 13:18 ` [PATCH 24/26] 9p: " Paolo Bonzini
                   ` (3 subsequent siblings)
  26 siblings, 0 replies; 46+ messages in thread
From: Paolo Bonzini @ 2022-04-15 13:18 UTC (permalink / raw)
  To: qemu-devel; +Cc: malureau, kwolf, hreitz, stefanha, qemu-block

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 block/raw-format.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/block/raw-format.c b/block/raw-format.c
index 69fd650eaf..45440345b6 100644
--- a/block/raw-format.c
+++ b/block/raw-format.c
@@ -411,7 +411,7 @@ static void raw_lock_medium(BlockDriverState *bs, bool locked)
     bdrv_lock_medium(bs->file->bs, locked);
 }
 
-static int raw_co_ioctl(BlockDriverState *bs, unsigned long int req, void *buf)
+static int coroutine_fn raw_co_ioctl(BlockDriverState *bs, unsigned long int req, void *buf)
 {
     BDRVRawState *s = bs->opaque;
     if (s->offset || s->has_size) {
-- 
2.35.1




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

* [PATCH 24/26] 9p: add missing coroutine_fn annotations
  2022-04-15 13:18 [PATCH 00/19] block: fix coroutine_fn annotations Paolo Bonzini
                   ` (22 preceding siblings ...)
  2022-04-15 13:18 ` [PATCH 23/26] raw-format: " Paolo Bonzini
@ 2022-04-15 13:18 ` Paolo Bonzini
  2022-04-18 11:08   ` Christian Schoenebeck
  2022-04-15 13:18 ` [PATCH 25/26] migration: " Paolo Bonzini
                   ` (2 subsequent siblings)
  26 siblings, 1 reply; 46+ messages in thread
From: Paolo Bonzini @ 2022-04-15 13:18 UTC (permalink / raw)
  To: qemu-devel
  Cc: kwolf, qemu-block, Greg Kurz, malureau, hreitz, stefanha,
	Marc-André Lureau

From: Marc-André Lureau <marcandre.lureau@redhat.com>

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Acked-by: Greg Kurz <groug@kaod.org>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 hw/9pfs/9p.h | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/hw/9pfs/9p.h b/hw/9pfs/9p.h
index 994f952600..a523ac34a9 100644
--- a/hw/9pfs/9p.h
+++ b/hw/9pfs/9p.h
@@ -424,21 +424,24 @@ typedef struct V9fsGetlock
 extern int open_fd_hw;
 extern int total_open_fd;
 
-static inline void v9fs_path_write_lock(V9fsState *s)
+static inline void coroutine_fn
+v9fs_path_write_lock(V9fsState *s)
 {
     if (s->ctx.export_flags & V9FS_PATHNAME_FSCONTEXT) {
         qemu_co_rwlock_wrlock(&s->rename_lock);
     }
 }
 
-static inline void v9fs_path_read_lock(V9fsState *s)
+static inline void coroutine_fn
+v9fs_path_read_lock(V9fsState *s)
 {
     if (s->ctx.export_flags & V9FS_PATHNAME_FSCONTEXT) {
         qemu_co_rwlock_rdlock(&s->rename_lock);
     }
 }
 
-static inline void v9fs_path_unlock(V9fsState *s)
+static inline void coroutine_fn
+v9fs_path_unlock(V9fsState *s)
 {
     if (s->ctx.export_flags & V9FS_PATHNAME_FSCONTEXT) {
         qemu_co_rwlock_unlock(&s->rename_lock);
-- 
2.35.1




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

* [PATCH 25/26] migration: add missing coroutine_fn annotations
  2022-04-15 13:18 [PATCH 00/19] block: fix coroutine_fn annotations Paolo Bonzini
                   ` (23 preceding siblings ...)
  2022-04-15 13:18 ` [PATCH 24/26] 9p: " Paolo Bonzini
@ 2022-04-15 13:18 ` Paolo Bonzini
  2022-04-15 13:19 ` [PATCH 26/26] test-coroutine: " Paolo Bonzini
  2022-04-21 10:35 ` [PATCH 00/19] block: fix " Stefan Hajnoczi
  26 siblings, 0 replies; 46+ messages in thread
From: Paolo Bonzini @ 2022-04-15 13:18 UTC (permalink / raw)
  To: qemu-devel
  Cc: kwolf, qemu-block, Juan Quintela, malureau, hreitz, stefanha,
	Marc-André Lureau

From: Marc-André Lureau <marcandre.lureau@redhat.com>

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 migration/migration.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/migration/migration.c b/migration/migration.c
index 4dcb511bb6..23781f6277 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -553,7 +553,8 @@ static void process_incoming_migration_bh(void *opaque)
     migration_incoming_state_destroy();
 }
 
-static void process_incoming_migration_co(void *opaque)
+static void coroutine_fn
+process_incoming_migration_co(void *opaque)
 {
     MigrationIncomingState *mis = migration_incoming_get_current();
     PostcopyState ps;
-- 
2.35.1




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

* [PATCH 26/26] test-coroutine: add missing coroutine_fn annotations
  2022-04-15 13:18 [PATCH 00/19] block: fix coroutine_fn annotations Paolo Bonzini
                   ` (24 preceding siblings ...)
  2022-04-15 13:18 ` [PATCH 25/26] migration: " Paolo Bonzini
@ 2022-04-15 13:19 ` Paolo Bonzini
  2022-04-21 10:35 ` [PATCH 00/19] block: fix " Stefan Hajnoczi
  26 siblings, 0 replies; 46+ messages in thread
From: Paolo Bonzini @ 2022-04-15 13:19 UTC (permalink / raw)
  To: qemu-devel
  Cc: kwolf, qemu-block, malureau, hreitz, stefanha, Marc-André Lureau

From: Marc-André Lureau <marcandre.lureau@redhat.com>

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Message-Id: <20170704220346.29244-4-marcandre.lureau@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 tests/unit/test-coroutine.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tests/unit/test-coroutine.c b/tests/unit/test-coroutine.c
index aa77a3bcb3..e16b80c245 100644
--- a/tests/unit/test-coroutine.c
+++ b/tests/unit/test-coroutine.c
@@ -610,7 +610,7 @@ static void perf_baseline(void)
     g_test_message("Function call %u iterations: %f s", maxcycles, duration);
 }
 
-static __attribute__((noinline)) void perf_cost_func(void *opaque)
+static __attribute__((noinline)) void coroutine_fn perf_cost_func(void *opaque)
 {
     qemu_coroutine_yield();
 }
-- 
2.35.1



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

* Re: [PATCH 24/26] 9p: add missing coroutine_fn annotations
  2022-04-15 13:18 ` [PATCH 24/26] 9p: " Paolo Bonzini
@ 2022-04-18 11:08   ` Christian Schoenebeck
  0 siblings, 0 replies; 46+ messages in thread
From: Christian Schoenebeck @ 2022-04-18 11:08 UTC (permalink / raw)
  To: qemu-devel
  Cc: kwolf, qemu-block, Greg Kurz, malureau, hreitz, stefanha,
	Marc-André Lureau, Paolo Bonzini

On Freitag, 15. April 2022 15:18:58 CEST Paolo Bonzini wrote:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
> 
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> Acked-by: Greg Kurz <groug@kaod.org>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---

I would have expected more been missing, anyway ...

Reviewed-by: Christian Schoenebeck <qemu_oss@crudebyte.com>

Best regards,
Christian Schoenebeck

>  hw/9pfs/9p.h | 9 ++++++---
>  1 file changed, 6 insertions(+), 3 deletions(-)
> 
> diff --git a/hw/9pfs/9p.h b/hw/9pfs/9p.h
> index 994f952600..a523ac34a9 100644
> --- a/hw/9pfs/9p.h
> +++ b/hw/9pfs/9p.h
> @@ -424,21 +424,24 @@ typedef struct V9fsGetlock
>  extern int open_fd_hw;
>  extern int total_open_fd;
> 
> -static inline void v9fs_path_write_lock(V9fsState *s)
> +static inline void coroutine_fn
> +v9fs_path_write_lock(V9fsState *s)
>  {
>      if (s->ctx.export_flags & V9FS_PATHNAME_FSCONTEXT) {
>          qemu_co_rwlock_wrlock(&s->rename_lock);
>      }
>  }
> 
> -static inline void v9fs_path_read_lock(V9fsState *s)
> +static inline void coroutine_fn
> +v9fs_path_read_lock(V9fsState *s)
>  {
>      if (s->ctx.export_flags & V9FS_PATHNAME_FSCONTEXT) {
>          qemu_co_rwlock_rdlock(&s->rename_lock);
>      }
>  }
> 
> -static inline void v9fs_path_unlock(V9fsState *s)
> +static inline void coroutine_fn
> +v9fs_path_unlock(V9fsState *s)
>  {
>      if (s->ctx.export_flags & V9FS_PATHNAME_FSCONTEXT) {
>          qemu_co_rwlock_unlock(&s->rename_lock);




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

* Re: [PATCH 01/26] block: remove incorrect coroutine_fn annotations
  2022-04-15 13:18 ` [PATCH 01/26] block: remove incorrect " Paolo Bonzini
@ 2022-04-19 17:57   ` Eric Blake
  2022-04-21 10:21     ` Stefan Hajnoczi
  0 siblings, 1 reply; 46+ messages in thread
From: Eric Blake @ 2022-04-19 17:57 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: kwolf, hreitz, qemu-block, qemu-devel, stefanha

On Fri, Apr 15, 2022 at 03:18:35PM +0200, Paolo Bonzini wrote:
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>

Might be nice to document in the commit message why the annotation was
incorrect, so someone stumbling across this commit in a bisect but
otherwise unfamiliar with the rules of when to annotate doesn't get
lost.  If I understand right, the argument is more-or-less:

This function defers to the generated blk_do_pwritev_part, which is
safe to call outside coroutine context.

But although the commit message is weak, the change itself appears
correct from what I have observed with the annotation in other places.

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

> ---
>  block/block-backend.c | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/block/block-backend.c b/block/block-backend.c
> index e0e1aff4b1..fedf2eca83 100644
> --- a/block/block-backend.c
> +++ b/block/block-backend.c
> @@ -1391,10 +1391,10 @@ int coroutine_fn blk_co_pwritev(BlockBackend *blk, int64_t offset,
>      return blk_co_pwritev_part(blk, offset, bytes, qiov, 0, flags);
>  }
>  
> -static int coroutine_fn blk_pwritev_part(BlockBackend *blk, int64_t offset,
> -                                         int64_t bytes,
> -                                         QEMUIOVector *qiov, size_t qiov_offset,
> -                                         BdrvRequestFlags flags)
> +static int blk_pwritev_part(BlockBackend *blk, int64_t offset,
> +                            int64_t bytes,
> +                            QEMUIOVector *qiov, size_t qiov_offset,
> +                            BdrvRequestFlags flags)
>  {
>      int ret;
>  
> -- 
> 2.35.1
> 
> 
> 

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



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

* Re: [PATCH 02/26] qcow2: remove incorrect coroutine_fn annotations
  2022-04-15 13:18 ` [PATCH 02/26] qcow2: " Paolo Bonzini
@ 2022-04-19 18:07   ` Eric Blake
  2022-04-21 10:24     ` Stefan Hajnoczi
  0 siblings, 1 reply; 46+ messages in thread
From: Eric Blake @ 2022-04-19 18:07 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: kwolf, hreitz, qemu-block, qemu-devel, stefanha

On Fri, Apr 15, 2022 at 03:18:36PM +0200, Paolo Bonzini wrote:
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---

Again, a sentence on why this is correct would be helpful.

>  block/qcow2-refcount.c | 4 ++--
>  block/qcow2.h          | 4 ++--
>  2 files changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c
> index b91499410c..b6f90b2702 100644
> --- a/block/qcow2-refcount.c
> +++ b/block/qcow2-refcount.c
> @@ -1206,7 +1206,7 @@ void qcow2_free_any_cluster(BlockDriverState *bs, uint64_t l2_entry,
>      }
>  }
>  
> -int coroutine_fn qcow2_write_caches(BlockDriverState *bs)
> +int qcow2_write_caches(BlockDriverState *bs)
>  {
>      BDRVQcow2State *s = bs->opaque;
>      int ret;
> @@ -1226,7 +1226,7 @@ int coroutine_fn qcow2_write_caches(BlockDriverState *bs)
>      return 0;
>  }
>  
> -int coroutine_fn qcow2_flush_caches(BlockDriverState *bs)
> +int qcow2_flush_caches(BlockDriverState *bs)
>  {
>      int ret = qcow2_write_caches(bs);

Both of these eventually hit qcow2_cache_write, which is not marked
coroutine, so these should not be either.

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] 46+ messages in thread

* Re: [PATCH 03/26] nbd: remove incorrect coroutine_fn annotations
  2022-04-15 13:18 ` [PATCH 03/26] nbd: " Paolo Bonzini
@ 2022-04-19 18:08   ` Eric Blake
  2022-04-20 14:07     ` Paolo Bonzini
  0 siblings, 1 reply; 46+ messages in thread
From: Eric Blake @ 2022-04-19 18:08 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: kwolf, hreitz, qemu-block, qemu-devel, stefanha

On Fri, Apr 15, 2022 at 03:18:37PM +0200, Paolo Bonzini wrote:
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
>  include/block/nbd.h | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/include/block/nbd.h b/include/block/nbd.h
> index a98eb665da..5c3710fa52 100644
> --- a/include/block/nbd.h
> +++ b/include/block/nbd.h
> @@ -423,6 +423,6 @@ QIOChannel *coroutine_fn
>  nbd_co_establish_connection(NBDClientConnection *conn, NBDExportInfo *info,
>                              bool blocking, Error **errp);
>  
> -void coroutine_fn nbd_co_establish_connection_cancel(NBDClientConnection *conn);
> +void nbd_co_establish_connection_cancel(NBDClientConnection *conn);

Should we rename this function to drop _co_ while at it?

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



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

* Re: [PATCH 04/26] coroutine: remove incorrect coroutine_fn annotations
  2022-04-15 13:18 ` [PATCH 04/26] coroutine: " Paolo Bonzini
@ 2022-04-19 18:25   ` Eric Blake
  2022-04-21 10:26   ` Stefan Hajnoczi
  1 sibling, 0 replies; 46+ messages in thread
From: Eric Blake @ 2022-04-19 18:25 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: kwolf, hreitz, qemu-block, qemu-devel, stefanha

On Fri, Apr 15, 2022 at 03:18:38PM +0200, Paolo Bonzini wrote:
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>

Again, a short summary why it is correct is helpful.

> ---
>  include/qemu/coroutine.h | 2 +-
>  util/qemu-coroutine.c    | 2 +-
>  2 files changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/include/qemu/coroutine.h b/include/qemu/coroutine.h
> index 284571badb..2d9211faff 100644
> --- a/include/qemu/coroutine.h
> +++ b/include/qemu/coroutine.h
> @@ -92,7 +92,7 @@ void coroutine_fn qemu_coroutine_yield(void);
>  /**
>   * Get the AioContext of the given coroutine
>   */
> -AioContext *coroutine_fn qemu_coroutine_get_aio_context(Coroutine *co);
> +AioContext *qemu_coroutine_get_aio_context(Coroutine *co);

Here, the intent is that this function is safe to call even when not
in a coroutine, and the annotation is only needed when it is required
that the caller already be in a coroutine.

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] 46+ messages in thread

* Re: [PATCH 05/26] blkdebug: add missing coroutine_fn annotations
  2022-04-15 13:18 ` [PATCH 05/26] blkdebug: add missing " Paolo Bonzini
@ 2022-04-19 18:46   ` Eric Blake
  0 siblings, 0 replies; 46+ messages in thread
From: Eric Blake @ 2022-04-19 18:46 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: kwolf, hreitz, qemu-block, qemu-devel, stefanha

On Fri, Apr 15, 2022 at 03:18:39PM +0200, Paolo Bonzini wrote:
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
>  block/blkdebug.c | 14 +++++++-------
>  1 file changed, 7 insertions(+), 7 deletions(-)

Again, might be worth a comment, but adding an annotation seems easier
to understand than removing an incorrectly-applied one.

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] 46+ messages in thread

* Re: [PATCH 06/26] blkverify: add missing coroutine_fn annotations
  2022-04-15 13:18 ` [PATCH 06/26] blkverify: " Paolo Bonzini
@ 2022-04-19 18:47   ` Eric Blake
  0 siblings, 0 replies; 46+ messages in thread
From: Eric Blake @ 2022-04-19 18:47 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: kwolf, hreitz, qemu-block, qemu-devel, stefanha

On Fri, Apr 15, 2022 at 03:18:40PM +0200, Paolo Bonzini wrote:
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
>  block/blkverify.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)

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

> 
> diff --git a/block/blkverify.c b/block/blkverify.c
> index e4a37af3b2..020b1ae7b6 100644
> --- a/block/blkverify.c
> +++ b/block/blkverify.c
> @@ -258,7 +258,7 @@ blkverify_co_pwritev(BlockDriverState *bs, int64_t offset, int64_t bytes,
>      return blkverify_co_prwv(bs, &r, offset, bytes, qiov, qiov, flags, true);
>  }
>  
> -static int blkverify_co_flush(BlockDriverState *bs)
> +static int coroutine_fn blkverify_co_flush(BlockDriverState *bs)
>  {
>      BDRVBlkverifyState *s = bs->opaque;
>  
> -- 
> 2.35.1
> 
> 
> 

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



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

* Re: [PATCH 07/26] block: add missing coroutine_fn annotations
  2022-04-15 13:18 ` [PATCH 07/26] block: " Paolo Bonzini
@ 2022-04-19 18:50   ` Eric Blake
  2022-04-20 14:08     ` Paolo Bonzini
  0 siblings, 1 reply; 46+ messages in thread
From: Eric Blake @ 2022-04-19 18:50 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: kwolf, hreitz, qemu-block, qemu-devel, stefanha

On Fri, Apr 15, 2022 at 03:18:41PM +0200, Paolo Bonzini wrote:
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
>  block/block-backend.c | 18 +++++++++---------
>  block/io.c            | 24 ++++++++++++------------
>  2 files changed, 21 insertions(+), 21 deletions(-)
> 

> @@ -1580,8 +1580,8 @@ int blk_pread(BlockBackend *blk, int64_t offset, void *buf, int bytes)
>      return ret < 0 ? ret : bytes;
>  }
>  
> -int blk_pwrite(BlockBackend *blk, int64_t offset, const void *buf, int bytes,
> -               BdrvRequestFlags flags)
> +int coroutine_fn blk_pwrite(BlockBackend *blk, int64_t offset, const void *buf, int bytes,
> +                            BdrvRequestFlags flags)

Long line, worth rewrapping differently?

The functions with _co_ in the name are obvious, the others might be
worth a comment why it is okay.

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



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

* Re: [PATCH 08/26] file-posix: add missing coroutine_fn annotations
  2022-04-15 13:18 ` [PATCH 08/26] file-posix: " Paolo Bonzini
@ 2022-04-19 19:30   ` Eric Blake
  0 siblings, 0 replies; 46+ messages in thread
From: Eric Blake @ 2022-04-19 19:30 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: kwolf, hreitz, qemu-block, qemu-devel, stefanha

On Fri, Apr 15, 2022 at 03:18:42PM +0200, Paolo Bonzini wrote:
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
>  block/file-posix.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)

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

> 
> diff --git a/block/file-posix.c b/block/file-posix.c
> index bfd9b21111..cf7b5531c8 100644
> --- a/block/file-posix.c
> +++ b/block/file-posix.c
> @@ -2143,7 +2143,7 @@ static void raw_aio_unplug(BlockDriverState *bs)
>  #endif
>  }
>  
> -static int raw_co_flush_to_disk(BlockDriverState *bs)
> +static int coroutine_fn raw_co_flush_to_disk(BlockDriverState *bs)
>  {
>      BDRVRawState *s = bs->opaque;
>      RawPosixAIOData acb;
> -- 
> 2.35.1
> 
> 
> 

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



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

* Re: [PATCH 09/26] iscsi: add missing coroutine_fn annotations
  2022-04-15 13:18 ` [PATCH 09/26] iscsi: " Paolo Bonzini
@ 2022-04-19 19:43   ` Eric Blake
  0 siblings, 0 replies; 46+ messages in thread
From: Eric Blake @ 2022-04-19 19:43 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: kwolf, hreitz, qemu-block, qemu-devel, stefanha

On Fri, Apr 15, 2022 at 03:18:43PM +0200, Paolo Bonzini wrote:
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
>  block/iscsi.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)

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

> 
> diff --git a/block/iscsi.c b/block/iscsi.c
> index d707d0b354..b33eeec794 100644
> --- a/block/iscsi.c
> +++ b/block/iscsi.c
> @@ -290,7 +290,7 @@ iscsi_co_generic_cb(struct iscsi_context *iscsi, int status,
>      }
>  }
>  
> -static void iscsi_co_init_iscsitask(IscsiLun *iscsilun, struct IscsiTask *iTask)
> +static void coroutine_fn iscsi_co_init_iscsitask(IscsiLun *iscsilun, struct IscsiTask *iTask)
>  {
>      *iTask = (struct IscsiTask) {
>          .co         = qemu_coroutine_self(),
> -- 
> 2.35.1
> 
> 
> 

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



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

* Re: [PATCH 03/26] nbd: remove incorrect coroutine_fn annotations
  2022-04-19 18:08   ` Eric Blake
@ 2022-04-20 14:07     ` Paolo Bonzini
  0 siblings, 0 replies; 46+ messages in thread
From: Paolo Bonzini @ 2022-04-20 14:07 UTC (permalink / raw)
  To: Eric Blake; +Cc: kwolf, hreitz, stefanha, qemu-devel, qemu-block

On 4/19/22 20:08, Eric Blake wrote:
>>   
>> -void coroutine_fn nbd_co_establish_connection_cancel(NBDClientConnection *conn);
>> +void nbd_co_establish_connection_cancel(NBDClientConnection *conn);
> Should we rename this function to drop_co_  while at it?

Or perhaps rename it to nbd_cancel_co_establish_connection...

Paolo


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

* Re: [PATCH 07/26] block: add missing coroutine_fn annotations
  2022-04-19 18:50   ` Eric Blake
@ 2022-04-20 14:08     ` Paolo Bonzini
  0 siblings, 0 replies; 46+ messages in thread
From: Paolo Bonzini @ 2022-04-20 14:08 UTC (permalink / raw)
  To: Eric Blake; +Cc: kwolf, hreitz, stefanha, qemu-devel, qemu-block

On 4/19/22 20:50, Eric Blake wrote:
>> +int coroutine_fn blk_pwrite(BlockBackend *blk, int64_t offset, const void *buf, int bytes,
>> +                            BdrvRequestFlags flags)
> Long line, worth rewrapping differently?
> 
> The functions with_co_  in the name are obvious, the others might be
> worth a comment why it is okay.

Or perhaps should be renamed to have _co_ in the name.

Paolo


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

* Re: [PATCH 01/26] block: remove incorrect coroutine_fn annotations
  2022-04-19 17:57   ` Eric Blake
@ 2022-04-21 10:21     ` Stefan Hajnoczi
  0 siblings, 0 replies; 46+ messages in thread
From: Stefan Hajnoczi @ 2022-04-21 10:21 UTC (permalink / raw)
  To: Eric Blake; +Cc: kwolf, Paolo Bonzini, hreitz, qemu-devel, qemu-block

[-- Attachment #1: Type: text/plain, Size: 942 bytes --]

On Tue, Apr 19, 2022 at 12:57:54PM -0500, Eric Blake wrote:
> On Fri, Apr 15, 2022 at 03:18:35PM +0200, Paolo Bonzini wrote:
> > Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> 
> Might be nice to document in the commit message why the annotation was
> incorrect, so someone stumbling across this commit in a bisect but
> otherwise unfamiliar with the rules of when to annotate doesn't get
> lost.  If I understand right, the argument is more-or-less:
> 
> This function defers to the generated blk_do_pwritev_part, which is
> safe to call outside coroutine context.
> 
> But although the commit message is weak, the change itself appears
> correct from what I have observed with the annotation in other places.
> 
> Reviewed-by: Eric Blake <eblake@redhat.com>

Yes, please! I'm also wondering how to review a patch like this because
I can only infer the meaning and audit the code myself to check my guess.

Stefan

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

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

* Re: [PATCH 02/26] qcow2: remove incorrect coroutine_fn annotations
  2022-04-19 18:07   ` Eric Blake
@ 2022-04-21 10:24     ` Stefan Hajnoczi
  2022-04-27 12:36       ` Paolo Bonzini
  0 siblings, 1 reply; 46+ messages in thread
From: Stefan Hajnoczi @ 2022-04-21 10:24 UTC (permalink / raw)
  To: Eric Blake; +Cc: kwolf, Paolo Bonzini, hreitz, qemu-devel, qemu-block

[-- Attachment #1: Type: text/plain, Size: 1540 bytes --]

On Tue, Apr 19, 2022 at 01:07:19PM -0500, Eric Blake wrote:
> On Fri, Apr 15, 2022 at 03:18:36PM +0200, Paolo Bonzini wrote:
> > Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> > ---
> 
> Again, a sentence on why this is correct would be helpful.
> 
> >  block/qcow2-refcount.c | 4 ++--
> >  block/qcow2.h          | 4 ++--
> >  2 files changed, 4 insertions(+), 4 deletions(-)
> > 
> > diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c
> > index b91499410c..b6f90b2702 100644
> > --- a/block/qcow2-refcount.c
> > +++ b/block/qcow2-refcount.c
> > @@ -1206,7 +1206,7 @@ void qcow2_free_any_cluster(BlockDriverState *bs, uint64_t l2_entry,
> >      }
> >  }
> >  
> > -int coroutine_fn qcow2_write_caches(BlockDriverState *bs)
> > +int qcow2_write_caches(BlockDriverState *bs)
> >  {
> >      BDRVQcow2State *s = bs->opaque;
> >      int ret;
> > @@ -1226,7 +1226,7 @@ int coroutine_fn qcow2_write_caches(BlockDriverState *bs)
> >      return 0;
> >  }
> >  
> > -int coroutine_fn qcow2_flush_caches(BlockDriverState *bs)
> > +int qcow2_flush_caches(BlockDriverState *bs)
> >  {
> >      int ret = qcow2_write_caches(bs);
> 
> Both of these eventually hit qcow2_cache_write, which is not marked
> coroutine, so these should not be either.

coroutine_fn may call non-coroutine_fn, so this alone is not a reason
for removing it from qcow2_write_caches().

There must be a call chain where qcow2_write_caches() and
qcow2_flush_caches() are is invoked from outside coroutine_fn.

Stefan

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

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

* Re: [PATCH 04/26] coroutine: remove incorrect coroutine_fn annotations
  2022-04-15 13:18 ` [PATCH 04/26] coroutine: " Paolo Bonzini
  2022-04-19 18:25   ` Eric Blake
@ 2022-04-21 10:26   ` Stefan Hajnoczi
  1 sibling, 0 replies; 46+ messages in thread
From: Stefan Hajnoczi @ 2022-04-21 10:26 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: kwolf, marcandre.lureau, hreitz, qemu-devel, qemu-block

[-- Attachment #1: Type: text/plain, Size: 447 bytes --]

On Fri, Apr 15, 2022 at 03:18:38PM +0200, Paolo Bonzini wrote:
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
>  include/qemu/coroutine.h | 2 +-
>  util/qemu-coroutine.c    | 2 +-
>  2 files changed, 2 insertions(+), 2 deletions(-)

This one is easy to audit because the implementation of
qemu_coroutine_get_aio_context() definitely does not require running in
coroutine context. :)

Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

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

* Re: [PATCH 00/19] block: fix coroutine_fn annotations
  2022-04-15 13:18 [PATCH 00/19] block: fix coroutine_fn annotations Paolo Bonzini
                   ` (25 preceding siblings ...)
  2022-04-15 13:19 ` [PATCH 26/26] test-coroutine: " Paolo Bonzini
@ 2022-04-21 10:35 ` Stefan Hajnoczi
  26 siblings, 0 replies; 46+ messages in thread
From: Stefan Hajnoczi @ 2022-04-21 10:35 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: kwolf, marcandre.lureau, hreitz, qemu-devel, qemu-block

[-- Attachment #1: Type: text/plain, Size: 2083 bytes --]

On Fri, Apr 15, 2022 at 03:18:34PM +0200, Paolo Bonzini wrote:
> This is the initial result of reviving Marc-André's series at
> https://patchew.org/QEMU/20170704220346.29244-1-marcandre.lureau@redhat.com/.
> A lot of the patches are similar to the ones that Marc-André wrote,
> but due to the changes in the code it was easier to redo them.
> 
> For nbd, the patch is on top of "nbd: mark more coroutine_fns" that
> I sent a few days ago and that (AIUI) Eric has already queued; only
> one function was missing, much to my surprise.
> 
> Apart from this, I also identified the following functions that
> can be called both in coroutine context and outside:
> 
> - qmp_dispatch
> - schedule_next_request
> - nvme_get_free_req
> - bdrv_create
> - bdrv_remove_persistent_dirty_bitmap
> - bdrv_can_store_new_dirty_bitmap
> - bdrv_do_drained_begin
> - bdrv_do_drained_end
> - bdrv_drain_all_begin
> - qcow2_open
> - qcow2_has_zero_init
> - bdrv_qed_open
> - qio_channel_readv_full_all_eof
> - qio_channel_writev_full_all
> 
> besides, of course, everything that is generated by
> scripts/block-coroutine-wrapper.py.

This looks useful, thanks for bringing it back!

As Eric mentioned, the commits need justifications. The following cases
come to mind:

1. Add coroutine_fn because the function calls a function that is marked
   with coroutine_fn. This must be fixed because it can lead to crashes.

2. Remove coroutine_fn because the function does not call any functions
   marked with coroutine_fn. This is optional because it does not lead
   to crashes and maybe the author intended to be explicit that this
   function runs only in coroutine context even though it doesn't yield.

3. Variants of these cases but related to runtime qemu_in_coroutine()
   checks. Functions should not have coroutine_fn if they legitimately
   are called in both contexts. Any calls to coroutine_fn child
   functions must be conditional on qemu_in_coroutine() or something
   else that indicates whether we are running in coroutine context.

Stefan

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

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

* Re: [PATCH 10/26] nbd: add missing coroutine_fn annotations
  2022-04-15 13:18 ` [PATCH 10/26] nbd: " Paolo Bonzini
@ 2022-04-26 20:26   ` Eric Blake
  0 siblings, 0 replies; 46+ messages in thread
From: Eric Blake @ 2022-04-26 20:26 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: kwolf, hreitz, qemu-block, qemu-devel, stefanha

On Fri, Apr 15, 2022 at 03:18:44PM +0200, Paolo Bonzini wrote:
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
>  block/nbd.c | 10 +++++-----
>  1 file changed, 5 insertions(+), 5 deletions(-)

As elsewhere in this series, a non-empty commit body would be useful.

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

> 
> diff --git a/block/nbd.c b/block/nbd.c
> index 5af4deac3f..a4c8d661ad 100644
> --- a/block/nbd.c
> +++ b/block/nbd.c
> @@ -974,11 +974,11 @@ static void nbd_iter_request_error(NBDReplyChunkIter *iter, int ret)
>   * nbd_reply_chunk_iter_receive
>   * The pointer stored in @payload requires g_free() to free it.
>   */
> -static bool nbd_reply_chunk_iter_receive(BDRVNBDState *s,
> -                                         NBDReplyChunkIter *iter,
> -                                         uint64_t handle,
> -                                         QEMUIOVector *qiov, NBDReply *reply,
> -                                         void **payload)
> +static bool coroutine_fn nbd_reply_chunk_iter_receive(BDRVNBDState *s,
> +                                                      NBDReplyChunkIter *iter,
> +                                                      uint64_t handle,
> +                                                      QEMUIOVector *qiov, NBDReply *reply,

Perhaps worth rewrapping this line.

> +                                                      void **payload)
>  {
>      int ret, request_ret;
>      NBDReply local_reply;
> -- 
> 2.35.1
> 
> 
> 

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



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

* Re: [PATCH 02/26] qcow2: remove incorrect coroutine_fn annotations
  2022-04-21 10:24     ` Stefan Hajnoczi
@ 2022-04-27 12:36       ` Paolo Bonzini
  2022-04-27 14:18         ` Paolo Bonzini
  0 siblings, 1 reply; 46+ messages in thread
From: Paolo Bonzini @ 2022-04-27 12:36 UTC (permalink / raw)
  To: Stefan Hajnoczi, Eric Blake; +Cc: kwolf, hreitz, qemu-devel, qemu-block

On 4/21/22 12:24, Stefan Hajnoczi wrote:
>>> -int coroutine_fn qcow2_flush_caches(BlockDriverState *bs)
>>> +int qcow2_flush_caches(BlockDriverState *bs)
>>>   {
>>>       int ret = qcow2_write_caches(bs);
>>
>> Both of these eventually hit qcow2_cache_write, which is not marked
>> coroutine, so these should not be either.
> 
> coroutine_fn may call non-coroutine_fn, so this alone is not a reason
> for removing it from qcow2_write_caches().
> 
> There must be a call chain where qcow2_write_caches() and
> qcow2_flush_caches() are is invoked from outside coroutine_fn.

The main problematic caller is qcow2_inactivate(), which calls these 
functions via qcow2_mark_clean().  Another one is 
update_ext_header_and_dir(), called by 
qcow2_store_persistent_dirty_bitmaps(), called by qcow2_inactivate().

Converting inactivate to run in coroutine context would help.

Paolo


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

* Re: [PATCH 02/26] qcow2: remove incorrect coroutine_fn annotations
  2022-04-27 12:36       ` Paolo Bonzini
@ 2022-04-27 14:18         ` Paolo Bonzini
  0 siblings, 0 replies; 46+ messages in thread
From: Paolo Bonzini @ 2022-04-27 14:18 UTC (permalink / raw)
  To: Stefan Hajnoczi, Eric Blake; +Cc: kwolf, hreitz, qemu-devel, qemu-block

On 4/27/22 14:36, Paolo Bonzini wrote:
> On 4/21/22 12:24, Stefan Hajnoczi wrote:
>>>> -int coroutine_fn qcow2_flush_caches(BlockDriverState *bs)
>>>> +int qcow2_flush_caches(BlockDriverState *bs)
>>>>   {
>>>>       int ret = qcow2_write_caches(bs);
>>>
>>> Both of these eventually hit qcow2_cache_write, which is not marked
>>> coroutine, so these should not be either.
>>
>> coroutine_fn may call non-coroutine_fn, so this alone is not a reason
>> for removing it from qcow2_write_caches().
>>
>> There must be a call chain where qcow2_write_caches() and
>> qcow2_flush_caches() are is invoked from outside coroutine_fn.
> 
> The main problematic caller is qcow2_inactivate(), which calls these 
> functions via qcow2_mark_clean().  Another one is 
> update_ext_header_and_dir(), called by 
> qcow2_store_persistent_dirty_bitmaps(), called by qcow2_inactivate().
> 
> Converting inactivate to run in coroutine context would help.

Or maybe not so much because bdrv_close also calls the same paths.

Paolo



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

end of thread, other threads:[~2022-04-27 14:19 UTC | newest]

Thread overview: 46+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-04-15 13:18 [PATCH 00/19] block: fix coroutine_fn annotations Paolo Bonzini
2022-04-15 13:18 ` [PATCH 01/26] block: remove incorrect " Paolo Bonzini
2022-04-19 17:57   ` Eric Blake
2022-04-21 10:21     ` Stefan Hajnoczi
2022-04-15 13:18 ` [PATCH 02/26] qcow2: " Paolo Bonzini
2022-04-19 18:07   ` Eric Blake
2022-04-21 10:24     ` Stefan Hajnoczi
2022-04-27 12:36       ` Paolo Bonzini
2022-04-27 14:18         ` Paolo Bonzini
2022-04-15 13:18 ` [PATCH 03/26] nbd: " Paolo Bonzini
2022-04-19 18:08   ` Eric Blake
2022-04-20 14:07     ` Paolo Bonzini
2022-04-15 13:18 ` [PATCH 04/26] coroutine: " Paolo Bonzini
2022-04-19 18:25   ` Eric Blake
2022-04-21 10:26   ` Stefan Hajnoczi
2022-04-15 13:18 ` [PATCH 05/26] blkdebug: add missing " Paolo Bonzini
2022-04-19 18:46   ` Eric Blake
2022-04-15 13:18 ` [PATCH 06/26] blkverify: " Paolo Bonzini
2022-04-19 18:47   ` Eric Blake
2022-04-15 13:18 ` [PATCH 07/26] block: " Paolo Bonzini
2022-04-19 18:50   ` Eric Blake
2022-04-20 14:08     ` Paolo Bonzini
2022-04-15 13:18 ` [PATCH 08/26] file-posix: " Paolo Bonzini
2022-04-19 19:30   ` Eric Blake
2022-04-15 13:18 ` [PATCH 09/26] iscsi: " Paolo Bonzini
2022-04-19 19:43   ` Eric Blake
2022-04-15 13:18 ` [PATCH 10/26] nbd: " Paolo Bonzini
2022-04-26 20:26   ` Eric Blake
2022-04-15 13:18 ` [PATCH 11/26] nfs: " Paolo Bonzini
2022-04-15 13:18 ` [PATCH 12/26] nvme: " Paolo Bonzini
2022-04-15 13:18 ` [PATCH 13/26] parallels: " Paolo Bonzini
2022-04-15 13:18 ` [PATCH 14/26] qcow2: " Paolo Bonzini
2022-04-15 13:18 ` [PATCH 15/26] copy-before-write: " Paolo Bonzini
2022-04-15 13:18 ` [PATCH 16/26] curl: " Paolo Bonzini
2022-04-15 13:18 ` [PATCH 17/26] qed: " Paolo Bonzini
2022-04-15 13:18 ` [PATCH 18/26] quorum: " Paolo Bonzini
2022-04-15 13:18 ` [PATCH 19/26] throttle: " Paolo Bonzini
2022-04-15 13:18 ` [PATCH 20/26] vmdk: " Paolo Bonzini
2022-04-15 13:18 ` [PATCH 21/26] job: " Paolo Bonzini
2022-04-15 13:18 ` [PATCH 22/26] coroutine-lock: " Paolo Bonzini
2022-04-15 13:18 ` [PATCH 23/26] raw-format: " Paolo Bonzini
2022-04-15 13:18 ` [PATCH 24/26] 9p: " Paolo Bonzini
2022-04-18 11:08   ` Christian Schoenebeck
2022-04-15 13:18 ` [PATCH 25/26] migration: " Paolo Bonzini
2022-04-15 13:19 ` [PATCH 26/26] test-coroutine: " Paolo Bonzini
2022-04-21 10:35 ` [PATCH 00/19] block: fix " Stefan Hajnoczi

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.