qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Kevin Wolf <kwolf@redhat.com>
To: qemu-block@nongnu.org
Cc: kwolf@redhat.com, richard.henderson@linaro.org, qemu-devel@nongnu.org
Subject: [PULL 14/19] ssh: Run restart_coroutine in current AioContext
Date: Tue, 18 Nov 2025 18:02:51 +0100	[thread overview]
Message-ID: <20251118170256.272087-15-kwolf@redhat.com> (raw)
In-Reply-To: <20251118170256.272087-1-kwolf@redhat.com>

From: Hanna Czenczek <hreitz@redhat.com>

restart_coroutine() is attached as an FD handler just to wake the
current coroutine after yielding.  It makes most sense to attach it to
the current (request) AioContext instead of the BDS main context.  This
way, the coroutine can be entered directly from the BH instead of having
yet another indirection through AioContext.co_schedule_bh.

Signed-off-by: Hanna Czenczek <hreitz@redhat.com>
Message-ID: <20251110154854.151484-15-hreitz@redhat.com>
Reviewed-by: Kevin Wolf <kwolf@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
 block/ssh.c | 22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/block/ssh.c b/block/ssh.c
index 70fe7cf86e..bdec94e9e9 100644
--- a/block/ssh.c
+++ b/block/ssh.c
@@ -1010,19 +1010,18 @@ static int ssh_has_zero_init(BlockDriverState *bs)
 }
 
 typedef struct BDRVSSHRestart {
-    BlockDriverState *bs;
+    BDRVSSHState *s;
     Coroutine *co;
 } BDRVSSHRestart;
 
 static void restart_coroutine(void *opaque)
 {
     BDRVSSHRestart *restart = opaque;
-    BlockDriverState *bs = restart->bs;
-    BDRVSSHState *s = bs->opaque;
-    AioContext *ctx = bdrv_get_aio_context(bs);
+    BDRVSSHState *s = restart->s;
 
     trace_ssh_restart_coroutine(restart->co);
-    aio_set_fd_handler(ctx, s->sock, NULL, NULL, NULL, NULL, NULL);
+    aio_set_fd_handler(qemu_get_current_aio_context(), s->sock,
+                       NULL, NULL, NULL, NULL, NULL);
 
     aio_co_wake(restart->co);
 }
@@ -1031,12 +1030,13 @@ static void restart_coroutine(void *opaque)
  * handlers are set up so that we'll be rescheduled when there is an
  * interesting event on the socket.
  */
-static coroutine_fn void co_yield(BDRVSSHState *s, BlockDriverState *bs)
+static coroutine_fn void co_yield(BDRVSSHState *s)
 {
     int r;
     IOHandler *rd_handler = NULL, *wr_handler = NULL;
+    AioContext *ctx = qemu_get_current_aio_context();
     BDRVSSHRestart restart = {
-        .bs = bs,
+        .s = s,
         .co = qemu_coroutine_self()
     };
 
@@ -1051,7 +1051,7 @@ static coroutine_fn void co_yield(BDRVSSHState *s, BlockDriverState *bs)
 
     trace_ssh_co_yield(s->sock, rd_handler, wr_handler);
 
-    aio_set_fd_handler(bdrv_get_aio_context(bs), s->sock,
+    aio_set_fd_handler(ctx, s->sock,
                        rd_handler, wr_handler, NULL, NULL, &restart);
     qemu_coroutine_yield();
     trace_ssh_co_yield_back(s->sock);
@@ -1093,7 +1093,7 @@ static coroutine_fn int ssh_read(BDRVSSHState *s, BlockDriverState *bs,
         trace_ssh_read_return(r, sftp_get_error(s->sftp));
 
         if (r == SSH_AGAIN) {
-            co_yield(s, bs);
+            co_yield(s);
             goto again;
         }
         if (r == SSH_EOF || (r == 0 && sftp_get_error(s->sftp) == SSH_FX_EOF)) {
@@ -1168,7 +1168,7 @@ static coroutine_fn int ssh_write(BDRVSSHState *s, BlockDriverState *bs,
         trace_ssh_write_return(r, sftp_get_error(s->sftp));
 
         if (r == SSH_AGAIN) {
-            co_yield(s, bs);
+            co_yield(s);
             goto again;
         }
         if (r < 0) {
@@ -1233,7 +1233,7 @@ static coroutine_fn int ssh_flush(BDRVSSHState *s, BlockDriverState *bs)
  again:
     r = sftp_fsync(s->sftp_handle);
     if (r == SSH_AGAIN) {
-        co_yield(s, bs);
+        co_yield(s);
         goto again;
     }
     if (r < 0) {
-- 
2.51.1



  parent reply	other threads:[~2025-11-18 17:07 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-11-18 17:02 [PULL 00/19] Block layer patches Kevin Wolf
2025-11-18 17:02 ` [PULL 01/19] block: Note on aio_co_wake use if not yet yielding Kevin Wolf
2025-11-18 17:02 ` [PULL 02/19] rbd: Run co BH CB in the coroutine’s AioContext Kevin Wolf
2025-11-18 17:02 ` [PULL 03/19] iscsi: " Kevin Wolf
2025-11-18 17:02 ` [PULL 04/19] nfs: " Kevin Wolf
2025-11-18 17:02 ` [PULL 05/19] curl: Fix coroutine waking Kevin Wolf
2025-11-18 17:02 ` [PULL 06/19] gluster: Do not move coroutine into BDS context Kevin Wolf
2025-11-18 17:02 ` [PULL 07/19] nvme: Kick and check completions in " Kevin Wolf
2025-11-18 17:02 ` [PULL 08/19] nvme: Fix coroutine waking Kevin Wolf
2025-11-18 17:02 ` [PULL 09/19] nvme: Note in which AioContext some functions run Kevin Wolf
2025-11-18 17:02 ` [PULL 10/19] block/io: Take reqs_lock for tracked_requests Kevin Wolf
2025-11-18 17:02 ` [PULL 11/19] qcow2: Re-initialize lock in invalidate_cache Kevin Wolf
2025-11-18 17:02 ` [PULL 12/19] qcow2: Fix cache_clean_timer Kevin Wolf
2025-11-18 17:02 ` [PULL 13/19] qcow2: Schedule cache-clean-timer in realtime Kevin Wolf
2025-11-18 17:02 ` Kevin Wolf [this message]
2025-11-18 17:02 ` [PULL 15/19] blkreplay: Run BH in coroutine’s AioContext Kevin Wolf
2025-11-18 17:02 ` [PULL 16/19] block: Note in which AioContext AIO CBs are called Kevin Wolf
2025-11-18 17:02 ` [PULL 17/19] iscsi: Create AIO BH in original AioContext Kevin Wolf
2025-11-18 17:02 ` [PULL 18/19] null-aio: Run CB " Kevin Wolf
2025-11-18 17:02 ` [PULL 19/19] win32-aio: Run CB in original context Kevin Wolf
2025-11-19  9:44 ` [PULL 00/19] Block layer patches Richard Henderson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20251118170256.272087-15-kwolf@redhat.com \
    --to=kwolf@redhat.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=richard.henderson@linaro.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).