[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v2 04/10] block/nbd: simplify waking of nbd_co_establish_conn
From: |
Roman Kagan |
Subject: |
Re: [PATCH v2 04/10] block/nbd: simplify waking of nbd_co_establish_connection() |
Date: |
Thu, 8 Apr 2021 19:10:46 +0300 |
On Thu, Apr 08, 2021 at 05:08:21PM +0300, Vladimir Sementsov-Ogievskiy wrote:
> Instead of connect_bh, bh_ctx and wait_connect fields we can live with
> only one link to waiting coroutine, protected by mutex.
>
> So new logic is:
>
> nbd_co_establish_connection() sets wait_co under mutex, release the
> mutex and do yield(). Note, that wait_co may be scheduled by thread
> immediately after unlocking the mutex. Still, in main thread (or
> iothread) we'll not reach the code for entering the coroutine until the
> yield() so we are safe.
>
> Both connect_thread_func() and nbd_co_establish_connection_cancel() do
> the following to handle wait_co:
>
> Under mutex, if thr->wait_co is not NULL, call aio_co_wake() (which
> never tries to acquire aio context since previous commit, so we are
> safe to do it under thr->mutex) and set thr->wait_co to NULL.
> This way we protect ourselves of scheduling it twice.
>
> Also this commit make nbd_co_establish_connection() less connected to
> bs (we have generic pointer to the coroutine, not use s->connection_co
> directly). So, we are on the way of splitting connection API out of
> nbd.c (which is overcomplicated now).
>
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> ---
> block/nbd.c | 49 +++++++++----------------------------------------
> 1 file changed, 9 insertions(+), 40 deletions(-)
Reviewed-by: Roman Kagan <rvkagan@yandex-team.ru>
- [PATCH v2 00/10] block/nbd: move connection code to separate file, Vladimir Sementsov-Ogievskiy, 2021/04/08
- [PATCH v2 04/10] block/nbd: simplify waking of nbd_co_establish_connection(), Vladimir Sementsov-Ogievskiy, 2021/04/08
- Re: [PATCH v2 04/10] block/nbd: simplify waking of nbd_co_establish_connection(),
Roman Kagan <=
- [PATCH v2 01/10] block/nbd: introduce NBDConnectThread reference counter, Vladimir Sementsov-Ogievskiy, 2021/04/08
- [PATCH v2 08/10] block/nbd: rename NBDConnectThread to NBDClientConnection, Vladimir Sementsov-Ogievskiy, 2021/04/08
- [PATCH v2 05/10] block/nbd: drop thr->state, Vladimir Sementsov-Ogievskiy, 2021/04/08
- [PATCH v2 02/10] block/nbd: BDRVNBDState: drop unused connect_err and connect_status, Vladimir Sementsov-Ogievskiy, 2021/04/08
- [PATCH v2 07/10] block/nbd: make nbd_co_establish_connection_cancel() bs-independent, Vladimir Sementsov-Ogievskiy, 2021/04/08