Lines Matching refs:conn

74 void nbd_client_connection_enable_retry(NBDClientConnection *conn)  in nbd_client_connection_enable_retry()  argument
76 conn->do_retry = true; in nbd_client_connection_enable_retry()
86 NBDClientConnection *conn = g_new(NBDClientConnection, 1); in nbd_client_connection_new() local
89 *conn = (NBDClientConnection) { in nbd_client_connection_new()
102 qemu_mutex_init(&conn->mutex); in nbd_client_connection_new()
104 return conn; in nbd_client_connection_new()
107 static void nbd_client_connection_do_free(NBDClientConnection *conn) in nbd_client_connection_do_free() argument
109 if (conn->sioc) { in nbd_client_connection_do_free()
110 qio_channel_close(QIO_CHANNEL(conn->sioc), NULL); in nbd_client_connection_do_free()
111 object_unref(OBJECT(conn->sioc)); in nbd_client_connection_do_free()
113 error_free(conn->err); in nbd_client_connection_do_free()
114 qapi_free_SocketAddress(conn->saddr); in nbd_client_connection_do_free()
115 g_free(conn->tlshostname); in nbd_client_connection_do_free()
116 object_unref(OBJECT(conn->tlscreds)); in nbd_client_connection_do_free()
117 g_free(conn->initial_info.x_dirty_bitmap); in nbd_client_connection_do_free()
118 g_free(conn->initial_info.name); in nbd_client_connection_do_free()
119 g_free(conn); in nbd_client_connection_do_free()
173 NBDClientConnection *conn = opaque; in connect_thread_func() local
179 qemu_mutex_lock(&conn->mutex); in connect_thread_func()
180 while (!conn->detached) { in connect_thread_func()
183 assert(!conn->sioc); in connect_thread_func()
184 conn->sioc = qio_channel_socket_new(); in connect_thread_func()
186 qemu_mutex_unlock(&conn->mutex); in connect_thread_func()
188 conn->updated_info = conn->initial_info; in connect_thread_func()
190 ret = nbd_connect(conn->sioc, conn->saddr, in connect_thread_func()
191 conn->do_negotiation ? &conn->updated_info : NULL, in connect_thread_func()
192 conn->tlscreds, conn->tlshostname, in connect_thread_func()
193 &conn->ioc, &local_err); in connect_thread_func()
201 conn->updated_info.x_dirty_bitmap = NULL; in connect_thread_func()
202 conn->updated_info.name = NULL; in connect_thread_func()
204 qemu_mutex_lock(&conn->mutex); in connect_thread_func()
206 error_free(conn->err); in connect_thread_func()
207 conn->err = NULL; in connect_thread_func()
208 error_propagate(&conn->err, local_err); in connect_thread_func()
211 object_unref(OBJECT(conn->sioc)); in connect_thread_func()
212 conn->sioc = NULL; in connect_thread_func()
213 if (conn->do_retry && !conn->detached) { in connect_thread_func()
215 qemu_mutex_unlock(&conn->mutex); in connect_thread_func()
222 qemu_mutex_lock(&conn->mutex); in connect_thread_func()
232 assert(conn->running); in connect_thread_func()
233 conn->running = false; in connect_thread_func()
234 if (conn->wait_co) { in connect_thread_func()
235 aio_co_wake(conn->wait_co); in connect_thread_func()
236 conn->wait_co = NULL; in connect_thread_func()
238 do_free = conn->detached; in connect_thread_func()
240 qemu_mutex_unlock(&conn->mutex); in connect_thread_func()
243 nbd_client_connection_do_free(conn); in connect_thread_func()
249 void nbd_client_connection_release(NBDClientConnection *conn) in nbd_client_connection_release() argument
253 if (!conn) { in nbd_client_connection_release()
257 WITH_QEMU_LOCK_GUARD(&conn->mutex) { in nbd_client_connection_release()
258 assert(!conn->detached); in nbd_client_connection_release()
259 if (conn->running) { in nbd_client_connection_release()
260 conn->detached = true; in nbd_client_connection_release()
264 if (conn->sioc) { in nbd_client_connection_release()
265 qio_channel_shutdown(QIO_CHANNEL(conn->sioc), in nbd_client_connection_release()
271 nbd_client_connection_do_free(conn); in nbd_client_connection_release()
292 nbd_co_establish_connection(NBDClientConnection *conn, NBDExportInfo *info, in nbd_co_establish_connection() argument
297 if (conn->do_negotiation) { in nbd_co_establish_connection()
301 WITH_QEMU_LOCK_GUARD(&conn->mutex) { in nbd_co_establish_connection()
306 assert(!conn->wait_co); in nbd_co_establish_connection()
308 if (!conn->running) { in nbd_co_establish_connection()
309 if (conn->sioc) { in nbd_co_establish_connection()
311 if (conn->do_negotiation) { in nbd_co_establish_connection()
312 memcpy(info, &conn->updated_info, sizeof(*info)); in nbd_co_establish_connection()
313 if (conn->ioc) { in nbd_co_establish_connection()
315 object_unref(OBJECT(conn->sioc)); in nbd_co_establish_connection()
316 conn->sioc = NULL; in nbd_co_establish_connection()
318 return g_steal_pointer(&conn->ioc); in nbd_co_establish_connection()
322 assert(!conn->ioc); in nbd_co_establish_connection()
324 return QIO_CHANNEL(g_steal_pointer(&conn->sioc)); in nbd_co_establish_connection()
327 conn->running = true; in nbd_co_establish_connection()
329 connect_thread_func, conn, QEMU_THREAD_DETACHED); in nbd_co_establish_connection()
333 if (conn->err) { in nbd_co_establish_connection()
334 error_propagate(errp, error_copy(conn->err)); in nbd_co_establish_connection()
342 conn->wait_co = qemu_coroutine_self(); in nbd_co_establish_connection()
351 WITH_QEMU_LOCK_GUARD(&conn->mutex) { in nbd_co_establish_connection()
352 if (conn->running) { in nbd_co_establish_connection()
359 if (conn->err) { in nbd_co_establish_connection()
360 error_propagate(errp, error_copy(conn->err)); in nbd_co_establish_connection()
376 assert(!conn->err != !conn->sioc); in nbd_co_establish_connection()
378 if (conn->err) { in nbd_co_establish_connection()
379 error_propagate(errp, error_copy(conn->err)); in nbd_co_establish_connection()
383 if (conn->do_negotiation) { in nbd_co_establish_connection()
384 memcpy(info, &conn->updated_info, sizeof(*info)); in nbd_co_establish_connection()
385 if (conn->ioc) { in nbd_co_establish_connection()
387 object_unref(OBJECT(conn->sioc)); in nbd_co_establish_connection()
388 conn->sioc = NULL; in nbd_co_establish_connection()
390 return g_steal_pointer(&conn->ioc); in nbd_co_establish_connection()
394 assert(!conn->ioc); in nbd_co_establish_connection()
396 return QIO_CHANNEL(g_steal_pointer(&conn->sioc)); in nbd_co_establish_connection()
411 void nbd_co_establish_connection_cancel(NBDClientConnection *conn) in nbd_co_establish_connection_cancel() argument
415 WITH_QEMU_LOCK_GUARD(&conn->mutex) { in nbd_co_establish_connection_cancel()
416 wait_co = g_steal_pointer(&conn->wait_co); in nbd_co_establish_connection_cancel()