All of lore.kernel.org
 help / color / mirror / Atom feed
From: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
To: qemu-block@nongnu.org
Cc: qemu-devel@nongnu.org, richard.henderson@linaro.org,
	peter.maydell@linaro.org, vsementsov@virtuozzo.com,
	eblake@redhat.com, Hanna Reitz <hreitz@redhat.com>
Subject: [PULL 1/7] block/nbd: Delete reconnect delay timer when done
Date: Wed,  9 Feb 2022 15:02:52 +0100	[thread overview]
Message-ID: <20220209140258.364649-2-vsementsov@virtuozzo.com> (raw)
In-Reply-To: <20220209140258.364649-1-vsementsov@virtuozzo.com>

From: Hanna Reitz <hreitz@redhat.com>

We start the reconnect delay timer to cancel the reconnection attempt
after a while.  Once nbd_co_do_establish_connection() has returned, this
attempt is over, and we no longer need the timer.

Delete it before returning from nbd_reconnect_attempt(), so that it does
not persist beyond the I/O request that was paused for reconnecting; we
do not want it to fire in a drained section, because all sort of things
can happen in such a section (e.g. the AioContext might be changed, and
we do not want the timer to fire in the wrong context; or the BDS might
even be deleted, and so the timer CB would access already-freed data).

Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Signed-off-by: Hanna Reitz <hreitz@redhat.com>
---
 block/nbd.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/block/nbd.c b/block/nbd.c
index 63dbfa807d..16cd7fef77 100644
--- a/block/nbd.c
+++ b/block/nbd.c
@@ -381,6 +381,13 @@ static coroutine_fn void nbd_reconnect_attempt(BDRVNBDState *s)
     }
 
     nbd_co_do_establish_connection(s->bs, NULL);
+
+    /*
+     * The reconnect attempt is done (maybe successfully, maybe not), so
+     * we no longer need this timer.  Delete it so it will not outlive
+     * this I/O request (so draining removes all timers).
+     */
+    reconnect_delay_timer_del(s);
 }
 
 static coroutine_fn int nbd_receive_replies(BDRVNBDState *s, uint64_t handle)
-- 
2.31.1



  reply	other threads:[~2022-02-09 14:29 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-02-09 14:02 [PULL 0/7] nbd: handle AioContext change correctly Vladimir Sementsov-Ogievskiy
2022-02-09 14:02 ` Vladimir Sementsov-Ogievskiy [this message]
2022-02-09 14:02 ` [PULL 2/7] block/nbd: Delete open timer when done Vladimir Sementsov-Ogievskiy
2022-02-09 14:02 ` [PULL 3/7] block/nbd: Assert there are no timers when closed Vladimir Sementsov-Ogievskiy
2022-02-09 14:02 ` [PULL 4/7] iotests.py: Add QemuStorageDaemon class Vladimir Sementsov-Ogievskiy
2022-02-09 14:02 ` [PULL 5/7] iotests/281: Test lingering timers Vladimir Sementsov-Ogievskiy
2022-02-09 14:02 ` [PULL 6/7] block/nbd: Move s->ioc on AioContext change Vladimir Sementsov-Ogievskiy
2022-02-09 14:02 ` [PULL 7/7] iotests/281: Let NBD connection yield in iothread Vladimir Sementsov-Ogievskiy
2022-02-11 12:52 ` [PULL 0/7] nbd: handle AioContext change correctly Peter Maydell
2022-02-11 13:04   ` Vladimir Sementsov-Ogievskiy
2022-02-12 13:13     ` Christian Schoenebeck

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=20220209140258.364649-2-vsementsov@virtuozzo.com \
    --to=vsementsov@virtuozzo.com \
    --cc=eblake@redhat.com \
    --cc=hreitz@redhat.com \
    --cc=peter.maydell@linaro.org \
    --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 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.