mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-02 23:33:54 -06:00
nbd/client-connection: return only one io channel
block/nbd doesn't need underlying sioc channel anymore. So, we can update nbd/client-connection interface to return only one top-most io channel, which is more straight forward. Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> Reviewed-by: Eric Blake <eblake@redhat.com> Message-Id: <20210610100802.5888-27-vsementsov@virtuozzo.com> [eblake: squash in Vladimir's fixes for uninit usage caught by clang] Signed-off-by: Eric Blake <eblake@redhat.com>
This commit is contained in:
parent
95a078ea3e
commit
43cb34dede
3 changed files with 33 additions and 22 deletions
|
@ -272,15 +272,14 @@ void nbd_client_connection_release(NBDClientConnection *conn)
|
|||
* nbd_receive_export_list() would be zero (see description of NBDExportInfo in
|
||||
* include/block/nbd.h).
|
||||
*/
|
||||
QIOChannelSocket *coroutine_fn
|
||||
QIOChannel *coroutine_fn
|
||||
nbd_co_establish_connection(NBDClientConnection *conn, NBDExportInfo *info,
|
||||
QIOChannel **ioc, Error **errp)
|
||||
Error **errp)
|
||||
{
|
||||
QemuThread thread;
|
||||
|
||||
if (conn->do_negotiation) {
|
||||
assert(info);
|
||||
assert(ioc);
|
||||
}
|
||||
|
||||
WITH_QEMU_LOCK_GUARD(&conn->mutex) {
|
||||
|
@ -294,10 +293,19 @@ nbd_co_establish_connection(NBDClientConnection *conn, NBDExportInfo *info,
|
|||
if (conn->sioc) {
|
||||
/* Previous attempt finally succeeded in background */
|
||||
if (conn->do_negotiation) {
|
||||
*ioc = g_steal_pointer(&conn->ioc);
|
||||
memcpy(info, &conn->updated_info, sizeof(*info));
|
||||
if (conn->ioc) {
|
||||
/* TLS channel now has own reference to parent */
|
||||
object_unref(OBJECT(conn->sioc));
|
||||
conn->sioc = NULL;
|
||||
|
||||
return g_steal_pointer(&conn->ioc);
|
||||
}
|
||||
}
|
||||
return g_steal_pointer(&conn->sioc);
|
||||
|
||||
assert(!conn->ioc);
|
||||
|
||||
return QIO_CHANNEL(g_steal_pointer(&conn->sioc));
|
||||
}
|
||||
|
||||
conn->running = true;
|
||||
|
@ -329,11 +337,23 @@ nbd_co_establish_connection(NBDClientConnection *conn, NBDExportInfo *info,
|
|||
} else {
|
||||
error_propagate(errp, conn->err);
|
||||
conn->err = NULL;
|
||||
if (conn->sioc && conn->do_negotiation) {
|
||||
*ioc = g_steal_pointer(&conn->ioc);
|
||||
memcpy(info, &conn->updated_info, sizeof(*info));
|
||||
if (!conn->sioc) {
|
||||
return NULL;
|
||||
}
|
||||
return g_steal_pointer(&conn->sioc);
|
||||
if (conn->do_negotiation) {
|
||||
memcpy(info, &conn->updated_info, sizeof(*info));
|
||||
if (conn->ioc) {
|
||||
/* TLS channel now has own reference to parent */
|
||||
object_unref(OBJECT(conn->sioc));
|
||||
conn->sioc = NULL;
|
||||
|
||||
return g_steal_pointer(&conn->ioc);
|
||||
}
|
||||
}
|
||||
|
||||
assert(!conn->ioc);
|
||||
|
||||
return QIO_CHANNEL(g_steal_pointer(&conn->sioc));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue