From nobody Sat May 18 19:24:37 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=web.de ARC-Seal: i=1; a=rsa-sha256; t=1603910926; cv=none; d=zohomail.com; s=zohoarc; b=XBPd5EPEoLsbO9NH/p+QZvV6NGBDqxT1Xm9t960cwH92O0PIyr2tK080e+ffKq49CDNwtEgbHt2olAZPHd1IzF/JU7At/0Tzj0F+HCktBzR+K2Qhf+v3rvggnI+iPkfAlMR8WcR+032RWlwDjU22xBV3gKJdjOarpjilHf+n5sY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1603910926; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=jfREiDg1/u5xIBMA7QbqzCdfRxx86ZI5O863lW5xUJ4=; b=Y8PqvV+rkXKR47vtkqqMp2UWj/BrsZGg0HO0VMlcTCoiyihTot8AcgN93OUCGjPYB2qdK3YJ8+2Sx2YBid9+/EkQmzN46fhsRpP6o24Mg8cHP8C0+BFBpmV0jDEJ6wbhxm4ZX98ZMP1TaUSzha7xr+Cc6efxIpk9Nv23B+rOj/w= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1603910926938226.3086580057951; Wed, 28 Oct 2020 11:48:46 -0700 (PDT) Received: from localhost ([::1]:43950 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kXqV3-0001yJ-EB for importer@patchew.org; Wed, 28 Oct 2020 14:48:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53818) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kXqRu-0008Uk-Ai; Wed, 28 Oct 2020 14:45:31 -0400 Received: from mout.web.de ([212.227.15.4]:32945) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kXqRr-0003GW-Vm; Wed, 28 Oct 2020 14:45:30 -0400 Received: from luklap ([94.134.180.124]) by smtp.web.de (mrweb004 [213.165.67.108]) with ESMTPSA (Nemesis) id 0M7VZv-1kD8Qd0NlP-00xLhS; Wed, 28 Oct 2020 19:45:16 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1603910716; bh=fdur8Yj1cjXPAAI5Zx1mBgregQ57TEBXXQs5Z9cK20w=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=UpYwvFzbjGdKzd9qPw5p82O26NoeDDi7RX3O3N0LBj8G05/lSXhMREYL3oZJoEjHJ SEFkOVp458RdHIrouSX9ddKLnA2co6h1oS/fd5sIGtIvjg4bwKlVU96/e8uGGerwMW U3e9S1EKdRj4FO4JxF5CEDLSBkVLrGZCWztK1pWY= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Date: Wed, 28 Oct 2020 19:45:14 +0100 From: Lukas Straub To: qemu-devel Subject: [PATCH v9 1/8] Introduce yank feature Message-ID: <7b3b182b6ab1a859a1e9fb4ebfa5ce0a7a441e10.1603909658.git.lukasstraub2@web.de> In-Reply-To: References: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="Sig_/.nqSp6hLWSBzro6pKyYqko0"; protocol="application/pgp-signature"; micalg=pgp-sha512 X-Provags-ID: V03:K1:vViYQkV2dRTE9Y0guTGqsI5711tApXAuxht6Zii1eKLFCzMXcXm U6D7lNcuOQiiyEqu9YOAUXQLp2wATJhUQybsHmkTYzLTYn362go7m4RzNsddEGIvqD7psqW qPfZDCBgPtzdiOItlTwO9BCH3gqUkNDi5lwt24RBOJ7O8MPyaPrNzPKDlI1o2LszRO27SKy pxNR7rt7N1kCOADTMOprQ== X-UI-Out-Filterresults: notjunk:1;V03:K0:zXRA6gTk16k=:ATl3/vuUu7Y2DAvovGZ5hs mN+33shnF0WN6CFMWf/gQH9acHrsfcb5ACMKuxwJ8Am6elB+VHErwf9ylz3nyMGJCnr1WULWY WNoUoU2ACrQCpJa2E+n73dKiQt0hHitNLNvp96e5+j5oSZg5Pw6TR//dDeG63mQVJl5Enirkf Gc1ddsJMSqkTrmG4nWramrcXGhjMrfQTjlAb1ZilKT3SaA4zNESVNgiMR9fDkgM33f8ssRD4e TYYdyg18UkSh1XQNRUuV8v01ZoHaGWZaffir3OxI8DYy/ocZwMFHZ+J+6iRqfaF8rwzNqeph+ PGRQ4U4Bs1DxqNqGvkkIkcqbz1zBlG6JSmUhFVmXEFoUEMIsSMk7RHjLOg2lZXLVUOb4AHzlZ NVl9CCP5rOY/jcOz3NTLOn86hGLBIRSA3G1bZO6s7e/FrHH0KdSQ/5a5BHUK8zl8L8e/7P7+s mchhOo7WhL/il1kPxtM5qXgV0PpzjoTNCkydI27YEZ6E6YOLee7a8iYX7wNX0QNxKOTPpTPdq x37sndCNt81F7juHrdA0xNGU5udftwBcIdGpH25pgNq37GLB8afxUj7wCKfN4P8Mamsa5otc0 I1Uxm3NOx2rB3hnJQdsiX8/k3IC8/69kT+as3yoz6cqnkeNqaFtoqn83fcpDV9Ss0ZqaKdbd+ zlSdmBaiDlgHGxLrmuIcmaxn6YkQfQfdGj4QfKANXbVfj/wnhTi6+P5nh5l95zd8MTsLr8FpK E3mCxKO2tIVZ7VjnDQS4jOMwIhsE8o6I7bXjCHx4VEjU8pLch3Z+VPUovXPYcUfoJJhcUpJWZ 7V1RqXJh+KleWzlUm/lH5E7IX3+fZu+XN4TpUDs9kNjAqIXp0IhVrMIX7glE8HMNqnA4tLjMp fRNBc5mZAJPsXK/98Bcw== Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=212.227.15.4; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-detected-operating-system: by eggs.gnu.org: First seen = 2020/10/28 14:45:25 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , "Daniel P. =?UTF-8?B?QmVycmFuZ8Op?=" , qemu-block , Juan Quintela , Markus Armbruster , "Dr. David Alan Gilbert" , Max Reitz , Paolo Bonzini , =?UTF-8?B?TWFyYy1BbmRy?= =?UTF-8?B?w6k=?= Lureau Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-Zoho-Virus-Status: 1 X-ZohoMail-DKIM: fail (Header signature does not verify) --Sig_/.nqSp6hLWSBzro6pKyYqko0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" The yank feature allows to recover from hanging qemu by "yanking" at various parts. Other qemu systems can register themselves and multiple yank functions. Then all yank functions for selected instances can be called by the 'yank' out-of-band qmp command. Available instances can be queried by a 'query-yank' oob command. Signed-off-by: Lukas Straub Acked-by: Stefan Hajnoczi --- include/qemu/yank.h | 95 ++++++++++++++++++++ qapi/misc.json | 106 ++++++++++++++++++++++ util/meson.build | 1 + util/yank.c | 213 ++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 415 insertions(+) create mode 100644 include/qemu/yank.h create mode 100644 util/yank.c diff --git a/include/qemu/yank.h b/include/qemu/yank.h new file mode 100644 index 0000000000..89755e62af --- /dev/null +++ b/include/qemu/yank.h @@ -0,0 +1,95 @@ +/* + * QEMU yank feature + * + * Copyright (c) Lukas Straub + * + * This work is licensed under the terms of the GNU GPL, version 2 or late= r. + * See the COPYING file in the top-level directory. + */ + +#ifndef YANK_H +#define YANK_H + +#include "qapi/qapi-types-misc.h" + +typedef void (YankFn)(void *opaque); + +/** + * yank_register_instance: Register a new instance. + * + * This registers a new instance for yanking. Must be called before any ya= nk + * function is registered for this instance. + * + * This function is thread-safe. + * + * @instance: The instance. + * @errp: Error object. + */ +void yank_register_instance(const YankInstance *instance, Error **errp); + +/** + * yank_unregister_instance: Unregister a instance. + * + * This unregisters a instance. Must be called only after every yank funct= ion + * of the instance has been unregistered. + * + * This function is thread-safe. + * + * @instance: The instance. + */ +void yank_unregister_instance(const YankInstance *instance); + +/** + * yank_register_function: Register a yank function + * + * This registers a yank function. All limitations of qmp oob commands app= ly + * to the yank function as well. See docs/devel/qapi-code-gen.txt under + * "An OOB-capable command handler must satisfy the following conditions". + * + * This function is thread-safe. + * + * @instance: The instance. + * @func: The yank function. + * @opaque: Will be passed to the yank function. + */ +void yank_register_function(const YankInstance *instance, + YankFn *func, + void *opaque); + +/** + * yank_unregister_function: Unregister a yank function + * + * This unregisters a yank function. + * + * This function is thread-safe. + * + * @instance: The instance. + * @func: func that was passed to yank_register_function. + * @opaque: opaque that was passed to yank_register_function. + */ +void yank_unregister_function(const YankInstance *instance, + YankFn *func, + void *opaque); + +/** + * yank_generic_iochannel: Generic yank function for iochannel + * + * This is a generic yank function which will call qio_channel_shutdown on= the + * provided QIOChannel. + * + * @opaque: QIOChannel to shutdown + */ +void yank_generic_iochannel(void *opaque); + +#define BLOCKDEV_YANK_INSTANCE(the_node_name) (&(YankInstance) { \ + .type =3D YANK_INSTANCE_TYPE_BLOCKDEV, \ + .u.blockdev.node_name =3D (the_node_name) }) + +#define CHARDEV_YANK_INSTANCE(the_id) (&(YankInstance) { \ + .type =3D YANK_INSTANCE_TYPE_CHARDEV, \ + .u.chardev.id =3D (the_id) }) + +#define MIGRATION_YANK_INSTANCE (&(YankInstance) { \ + .type =3D YANK_INSTANCE_TYPE_MIGRATION }) + +#endif diff --git a/qapi/misc.json b/qapi/misc.json index 40df513856..3b7de02a4d 100644 --- a/qapi/misc.json +++ b/qapi/misc.json @@ -568,3 +568,109 @@ 'data': { '*option': 'str' }, 'returns': ['CommandLineOptionInfo'], 'allow-preconfig': true } + +## +# @YankInstanceType: +# +# An enumeration of yank instance types. See "YankInstance" for more +# information. +# +# Since: 5.2 +## +{ 'enum': 'YankInstanceType', + 'data': [ 'blockdev', 'chardev', 'migration' ] } + +## +# @YankInstanceBlockdev: +# +# Specifies which blockdev to yank. See "YankInstance" for more informatio= n. +# +# @node-name: the blockdev's node-name +# +# Since: 5.2 +## +{ 'struct': 'YankInstanceBlockdev', + 'data': { 'node-name': 'str' } } + +## +# @YankInstanceChardev: +# +# Specifies which chardev to yank. See "YankInstance" for more information. +# +# @id: the chardev's ID +# +# Since: 5.2 +## +{ 'struct': 'YankInstanceChardev', + 'data': { 'id': 'str' } } + +## +# @YankInstance: +# +# A yank instance can be yanked with the "yank" qmp command to recover fro= m a +# hanging qemu. +# +# Currently implemented yank instances: +# -nbd block device: +# Yanking it will shutdown the connection to the nbd server without +# attempting to reconnect. +# -socket chardev: +# Yanking it will shutdown the connected socket. +# -migration: +# Yanking it will shutdown all migration connections. +# +# Since: 5.2 +## +{ 'union': 'YankInstance', + 'base': { 'type': 'YankInstanceType' }, + 'discriminator': 'type', + 'data': { + 'blockdev': 'YankInstanceBlockdev', + 'chardev': 'YankInstanceChardev' } } + +## +# @yank: +# +# Recover from hanging qemu by yanking the specified instances. See +# "YankInstance" for more information. +# +# Takes a list of @YankInstance as argument. +# +# Returns: nothing. +# +# Example: +# +# -> { "execute": "yank", +# "arguments": { +# "instances": [ +# { "type": "block-node", +# "node-name": "nbd0" } +# ] } } +# <- { "return": {} } +# +# Since: 5.2 +## +{ 'command': 'yank', + 'data': { 'instances': ['YankInstance'] }, + 'allow-oob': true } + +## +# @query-yank: +# +# Query yank instances. See "YankInstance" for more information. +# +# Returns: list of @YankInstance +# +# Example: +# +# -> { "execute": "query-yank" } +# <- { "return": [ +# { "type": "block-node", +# "node-name": "nbd0" } +# ] } +# +# Since: 5.2 +## +{ 'command': 'query-yank', + 'returns': ['YankInstance'], + 'allow-oob': true } diff --git a/util/meson.build b/util/meson.build index c5159ad79d..dbda9d9123 100644 --- a/util/meson.build +++ b/util/meson.build @@ -50,6 +50,7 @@ endif if have_system util_ss.add(when: 'CONFIG_GIO', if_true: [files('dbus.c'), gio]) + util_ss.add(files('yank.c')) endif if have_block diff --git a/util/yank.c b/util/yank.c new file mode 100644 index 0000000000..0b3a816706 --- /dev/null +++ b/util/yank.c @@ -0,0 +1,213 @@ +/* + * QEMU yank feature + * + * Copyright (c) Lukas Straub + * + * This work is licensed under the terms of the GNU GPL, version 2 or late= r. + * See the COPYING file in the top-level directory. + */ + +#include "qemu/osdep.h" +#include "qapi/error.h" +#include "qemu/thread.h" +#include "qemu/queue.h" +#include "qapi/qapi-commands-misc.h" +#include "qapi/qapi-visit-misc.h" +#include "qapi/clone-visitor.h" +#include "io/channel.h" +#include "qemu/yank.h" + +struct YankFuncAndParam { + YankFn *func; + void *opaque; + QLIST_ENTRY(YankFuncAndParam) next; +}; + +struct YankInstanceEntry { + YankInstance *instance; + QLIST_HEAD(, YankFuncAndParam) yankfns; + QLIST_ENTRY(YankInstanceEntry) next; +}; + +typedef struct YankFuncAndParam YankFuncAndParam; +typedef struct YankInstanceEntry YankInstanceEntry; + +/* + * This lock protects the yank_instance_list below. + */ +static QemuMutex yank_lock; + +static QLIST_HEAD(, YankInstanceEntry) yank_instance_list + =3D QLIST_HEAD_INITIALIZER(yank_instance_list); + +static int yank_compare_instances(const YankInstance *a, const YankInstanc= e *b) +{ + if (a->type !=3D b->type) { + return 0; + } + + switch (a->type) { + case YANK_INSTANCE_TYPE_BLOCKDEV: + return !strcmp(a->u.blockdev.node_name, b->u.blockdev.node_name); + break; + + case YANK_INSTANCE_TYPE_CHARDEV: + return !strcmp(a->u.chardev.id, b->u.chardev.id); + break; + + case YANK_INSTANCE_TYPE_MIGRATION: + return 1; + break; + + default: + abort(); + } +} + +static YankInstanceEntry *yank_find_entry(const YankInstance *instance) +{ + YankInstanceEntry *entry; + + QLIST_FOREACH(entry, &yank_instance_list, next) { + if (yank_compare_instances(entry->instance, instance)) { + return entry; + } + } + return NULL; +} + +void yank_register_instance(const YankInstance *instance, Error **errp) +{ + YankInstanceEntry *entry; + + qemu_mutex_lock(&yank_lock); + + if (yank_find_entry(instance)) { + error_setg(errp, "duplicate yank instance"); + qemu_mutex_unlock(&yank_lock); + return; + } + + entry =3D g_slice_new(YankInstanceEntry); + entry->instance =3D QAPI_CLONE(YankInstance, instance); + QLIST_INIT(&entry->yankfns); + QLIST_INSERT_HEAD(&yank_instance_list, entry, next); + + qemu_mutex_unlock(&yank_lock); +} + +void yank_unregister_instance(const YankInstance *instance) +{ + YankInstanceEntry *entry; + + qemu_mutex_lock(&yank_lock); + entry =3D yank_find_entry(instance); + assert(entry); + + assert(QLIST_EMPTY(&entry->yankfns)); + QLIST_REMOVE(entry, next); + qapi_free_YankInstance(entry->instance); + g_slice_free(YankInstanceEntry, entry); + + qemu_mutex_unlock(&yank_lock); +} + +void yank_register_function(const YankInstance *instance, + YankFn *func, + void *opaque) +{ + YankInstanceEntry *entry; + YankFuncAndParam *func_entry; + + qemu_mutex_lock(&yank_lock); + entry =3D yank_find_entry(instance); + assert(entry); + + func_entry =3D g_slice_new(YankFuncAndParam); + func_entry->func =3D func; + func_entry->opaque =3D opaque; + + QLIST_INSERT_HEAD(&entry->yankfns, func_entry, next); + qemu_mutex_unlock(&yank_lock); +} + +void yank_unregister_function(const YankInstance *instance, + YankFn *func, + void *opaque) +{ + YankInstanceEntry *entry; + YankFuncAndParam *func_entry; + + qemu_mutex_lock(&yank_lock); + entry =3D yank_find_entry(instance); + assert(entry); + + QLIST_FOREACH(func_entry, &entry->yankfns, next) { + if (func_entry->func =3D=3D func && func_entry->opaque =3D=3D opaq= ue) { + QLIST_REMOVE(func_entry, next); + g_slice_free(YankFuncAndParam, func_entry); + qemu_mutex_unlock(&yank_lock); + return; + } + } + + abort(); +} + +void yank_generic_iochannel(void *opaque) +{ + QIOChannel *ioc =3D QIO_CHANNEL(opaque); + + qio_channel_shutdown(ioc, QIO_CHANNEL_SHUTDOWN_BOTH, NULL); +} + +void qmp_yank(YankInstanceList *instances, + Error **errp) +{ + YankInstanceList *tail; + YankInstanceEntry *entry; + YankFuncAndParam *func_entry; + + qemu_mutex_lock(&yank_lock); + for (tail =3D instances; tail; tail =3D tail->next) { + entry =3D yank_find_entry(tail->value); + if (!entry) { + error_set(errp, ERROR_CLASS_DEVICE_NOT_FOUND, "Instance not fo= und"); + qemu_mutex_unlock(&yank_lock); + return; + } + } + for (tail =3D instances; tail; tail =3D tail->next) { + entry =3D yank_find_entry(tail->value); + assert(entry); + QLIST_FOREACH(func_entry, &entry->yankfns, next) { + func_entry->func(func_entry->opaque); + } + } + qemu_mutex_unlock(&yank_lock); +} + +YankInstanceList *qmp_query_yank(Error **errp) +{ + YankInstanceEntry *entry; + YankInstanceList *ret; + + ret =3D NULL; + + qemu_mutex_lock(&yank_lock); + QLIST_FOREACH(entry, &yank_instance_list, next) { + YankInstanceList *new_entry; + new_entry =3D g_new0(YankInstanceList, 1); + new_entry->value =3D QAPI_CLONE(YankInstance, entry->instance); + new_entry->next =3D ret; + ret =3D new_entry; + } + qemu_mutex_unlock(&yank_lock); + + return ret; +} + +static void __attribute__((__constructor__)) yank_init(void) +{ + qemu_mutex_init(&yank_lock); +} -- 2.20.1 --Sig_/.nqSp6hLWSBzro6pKyYqko0 Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQIzBAEBCgAdFiEEg/qxWKDZuPtyYo+kNasLKJxdslgFAl+ZvDoACgkQNasLKJxd slhKgQ//Ww3chWS+GmCH2DoarT5bKpjNyrqlIBlXzh7QGcUsXbi4vE3PMmKcgirM CtWnUYzJ/DxM+j1eurx8l5riuEY35TDuHKpn5EZtpcqTxtaVkbYPRWDFUvcFvWep pSgBhuP9WjMH6VkatJ3fdd6GRQx6Io4kVLsrB/ej1BRTOB+i1MD8QkbTVu+b4Iv4 pnGC3/f8grHWk+vvhYzLOd6fTt3tIfE+OJ+0JOUfhyN3JfK/jdqysc9toIBZbRf/ 7AKxooukR0NjHmZKap1uC8IhAfFVHI+NiRVzBP1fD6ZrNK9wxE7xvz+mD4hVK7ZB SmOcrhtdlMXx9EOQ0R9/eQ8hdLw3gtoYq9kg+ZpHb37yMIZOVRUii4pjEQcgLKcX emJB/RrBT8rU8y+mKSJ9MQ5yw1xTi9gr5XeI//rFa0U3lgexJZBpUeUxkWQA9Gk4 VZZQ8ZzhKlqnka0T+3FLbzeaURQ7ywbXzyh8OqXyQYLiqPzP3sgBdxrn32pD2wdb hmg2NlEbC2dNxXMHAolEwAxPtXJ6D/7uxQyJGrQnOt9jGy9PLgugU5aXP10GrRpE F9h9R0Ix9mChJ0X3JKY0JZ6pyh7H2AHCEDzA2LlrLycixubMrG6dbdoaHjjYcquX 4+O3eD0ONEL4W6kBSrjw+WnqCYbkNIR/kwXQtDvPSWzE3zAqotw= =UYAQ -----END PGP SIGNATURE----- --Sig_/.nqSp6hLWSBzro6pKyYqko0-- From nobody Sat May 18 19:24:37 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=web.de ARC-Seal: i=1; a=rsa-sha256; t=1603910933; cv=none; d=zohomail.com; s=zohoarc; b=ejIO326CSo+d1CQwZ47WcfiSHAtRNJ43KcX/WBxI40kHJtH6tgxC32LYkkqkYeLf8Xc81EH0fPYJiUs3ci9NcTGpUim+18N8gU3j4NFAjQID26frcxilc0fGQOWSfxprWNTWgvBlRfzOHndmla/NvXUuPJGk9CVzVV3E6Wi/28Q= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1603910933; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=VJyB7KV24lXj8AkpVO7HtHsu5jyNPs2BwS0wSmseeLc=; b=RJaaSC9efv8v1SAR5i/5C8uIiyKV0jreQUC820mplxW2F7taRnaTNkSwQOO4Vx2a9Ruf/WJrr9kbEL/ZTlrjbgqfdgt7YSRtFevzGf7hlR58A1bL7GQU5F07p4xw1g4KlNYRwxE0KUeoEDPTNTv9Mwe1/Z5c3uwNEqdYW3N6K8E= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1603910933619279.1424325640329; Wed, 28 Oct 2020 11:48:53 -0700 (PDT) Received: from localhost ([::1]:44680 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kXqVA-0002Hg-Bk for importer@patchew.org; Wed, 28 Oct 2020 14:48:52 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53808) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kXqRs-0008TG-LV; Wed, 28 Oct 2020 14:45:28 -0400 Received: from mout.web.de ([217.72.192.78]:48141) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kXqRq-0003GL-3N; Wed, 28 Oct 2020 14:45:28 -0400 Received: from luklap ([94.134.180.124]) by smtp.web.de (mrweb102 [213.165.67.124]) with ESMTPSA (Nemesis) id 0MHGed-1kcTIJ3695-00E3JC; Wed, 28 Oct 2020 19:45:20 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1603910721; bh=wqDIHQ1tkVo7xVG/ViJwH0XSYWCPngSBGedj/9BT3W4=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=LTeOHYvtpYGR4Fmkdbq1RebLgr9ZB1sOP2j690SJJjRjDZFkDZoS2ieGbfupXWLl6 z4V+7wzXKjN0zgCIqZ64DnQZmPp9CmgyLekwzJAfnXpPVZ0MUhOJ2sokU17UeA/+Po MXkjeAMWP/Fau06UQ/zoKWYkxfUl3siT1914vr/A= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Date: Wed, 28 Oct 2020 19:45:19 +0100 From: Lukas Straub To: qemu-devel Subject: [PATCH v9 2/8] block/nbd.c: Add yank feature Message-ID: In-Reply-To: References: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="Sig_/D6xxW8+EUuAB2H58wKDBDbT"; protocol="application/pgp-signature"; micalg=pgp-sha512 X-Provags-ID: V03:K1:elvFPfceyypMYote1X9alYJtA9Ek1qY4n+7N/pxZsyKNUNZ9QBg dlhUokrdemC8SXrrwxnv7yQCqbSFtYD7iD0LdS3ZWhpvcXIIToY+TWS04MLI6jDcebE8FTL Si+/+u6uL4i5IFIzKTbMgI0Cmr8A4mOZel06IE20RDGMbqDzsX2BfGRk+YIA/4/jl6UDO0z b/GvN1ov0w0aJIvT0Xd9w== X-UI-Out-Filterresults: notjunk:1;V03:K0:is/dUFRW3vs=:jv1N9n2rjF5hqU6HKyO/oT d3S5QCWBHwEfTPrMxNwLWddqAVt7n3ghwrTZe6z+FXFSxLuLSsz9jyVQzpPXv4eG43GQS0ZsI 7xgbeSzszI7bBiwcBoiF3biv6HyUSH0yy3KS0O3JBE4VXLuLjEBuCkrnMSXJP3RkOBmbKjrEf j3mBrAPI4EDdiOtEfUYVgjK8f0c7G2Fp1UtXxPl9qCE4uAbLyeWQ9TzcZsm+Jnt0c4HjSvB5E uTZpEtQ+weN0gkRu/MaBXm9C2dyxxTApVtIp+w+nzzBBY4ECCxRJ/H91bUhTX96J1/I13ZWFQ g1NVcosbsOgwHhDiJi1P/xtP/7fvdohS0kdf+4dzWSfW0sxwi0TcZiLiM6fZ/nthjym3T/uis vq38AAFJJQrCOvGVe+8zrpYGKRcS64AVEJrLE6uo8R17QQRPCoCzBqZskNVxtqBp9C/ecNeMw L+CZh4fAqYBZc04Xy+jCkdFY8eT3EYdE6nPHgooUWE6npmTRx4QLvK7TK33N/+Wq+vAk7eGDO KG8IMigPq5hp8LOSaYVhsOvjkMPgRuTGjoVzJx4AKzzQqdNOmawb+QuyGvA13WphRLZuzWLsb 1uVNA5BYRCJ/lW2zqV6hKPHNhEpvtGUpdRGpFVHDkLtay55mt1brn/n3KgGeIHweXJmv4I7uJ MshhMOtPvQK4T3i1i6Zid/ChHb+FtnFfBYYQdDBifA7AkqgY2uH2jPumYQkLBIUP4we9RFX+D e9nY/JSFoWm/zDaZySbYlVDSftBDRulRlvB5T0KNguWmdP+EgRKqKD2x+3SAe30x/dpeJiBNq XQIVS8SQmf529WO+ONER7Fvb4lpwdQV21ZSZghuAyHjou+l4QOB6LlwTL7NxbNJBg5qvlnasY pAFPlzKa01gW6Z9Vm71g== Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=217.72.192.78; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-detected-operating-system: by eggs.gnu.org: First seen = 2020/10/28 13:12:59 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , "Daniel P. =?UTF-8?B?QmVycmFuZ8Op?=" , qemu-block , Juan Quintela , Markus Armbruster , "Dr. David Alan Gilbert" , Max Reitz , Paolo Bonzini , =?UTF-8?B?TWFyYy1BbmRy?= =?UTF-8?B?w6k=?= Lureau Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-Zoho-Virus-Status: 1 X-ZohoMail-DKIM: fail (Header signature does not verify) --Sig_/D6xxW8+EUuAB2H58wKDBDbT Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Register a yank function which shuts down the socket and sets s->state =3D NBD_CLIENT_QUIT. This is the same behaviour as if an error occured. Signed-off-by: Lukas Straub Acked-by: Stefan Hajnoczi --- block/nbd.c | 154 +++++++++++++++++++++++++++++++--------------------- 1 file changed, 93 insertions(+), 61 deletions(-) diff --git a/block/nbd.c b/block/nbd.c index 4548046cd7..d66c84ee40 100644 --- a/block/nbd.c +++ b/block/nbd.c @@ -35,6 +35,7 @@ #include "qemu/option.h" #include "qemu/cutils.h" #include "qemu/main-loop.h" +#include "qemu/atomic.h" #include "qapi/qapi-visit-sockets.h" #include "qapi/qmp/qstring.h" @@ -44,6 +45,8 @@ #include "block/nbd.h" #include "block/block_int.h" +#include "qemu/yank.h" + #define EN_OPTSTR ":exportname=3D" #define MAX_NBD_REQUESTS 16 @@ -140,14 +143,13 @@ typedef struct BDRVNBDState { NBDConnectThread *connect_thread; } BDRVNBDState; -static QIOChannelSocket *nbd_establish_connection(SocketAddress *saddr, - Error **errp); -static QIOChannelSocket *nbd_co_establish_connection(BlockDriverState *bs, - Error **errp); +static int nbd_establish_connection(BlockDriverState *bs, SocketAddress *s= addr, + Error **errp); +static int nbd_co_establish_connection(BlockDriverState *bs, Error **errp); static void nbd_co_establish_connection_cancel(BlockDriverState *bs, bool detach); -static int nbd_client_handshake(BlockDriverState *bs, QIOChannelSocket *si= oc, - Error **errp); +static int nbd_client_handshake(BlockDriverState *bs, Error **errp); +static void nbd_yank(void *opaque); static void nbd_clear_bdrvstate(BDRVNBDState *s) { @@ -165,12 +167,12 @@ static void nbd_clear_bdrvstate(BDRVNBDState *s) static void nbd_channel_error(BDRVNBDState *s, int ret) { if (ret =3D=3D -EIO) { - if (s->state =3D=3D NBD_CLIENT_CONNECTED) { + if (qatomic_load_acquire(&s->state) =3D=3D NBD_CLIENT_CONNECTED) { s->state =3D s->reconnect_delay ? NBD_CLIENT_CONNECTING_WAIT : NBD_CLIENT_CONNECTING_NOWAIT; } } else { - if (s->state =3D=3D NBD_CLIENT_CONNECTED) { + if (qatomic_load_acquire(&s->state) =3D=3D NBD_CLIENT_CONNECTED) { qio_channel_shutdown(s->ioc, QIO_CHANNEL_SHUTDOWN_BOTH, NULL); } s->state =3D NBD_CLIENT_QUIT; @@ -203,7 +205,7 @@ static void reconnect_delay_timer_cb(void *opaque) { BDRVNBDState *s =3D opaque; - if (s->state =3D=3D NBD_CLIENT_CONNECTING_WAIT) { + if (qatomic_load_acquire(&s->state) =3D=3D NBD_CLIENT_CONNECTING_WAIT)= { s->state =3D NBD_CLIENT_CONNECTING_NOWAIT; while (qemu_co_enter_next(&s->free_sema, NULL)) { /* Resume all queued requests */ @@ -215,7 +217,7 @@ static void reconnect_delay_timer_cb(void *opaque) static void reconnect_delay_timer_init(BDRVNBDState *s, uint64_t expire_ti= me_ns) { - if (s->state !=3D NBD_CLIENT_CONNECTING_WAIT) { + if (qatomic_load_acquire(&s->state) !=3D NBD_CLIENT_CONNECTING_WAIT) { return; } @@ -260,7 +262,7 @@ static void nbd_client_attach_aio_context(BlockDriverSt= ate *bs, * s->connection_co is either yielded from nbd_receive_reply or from * nbd_co_reconnect_loop() */ - if (s->state =3D=3D NBD_CLIENT_CONNECTED) { + if (qatomic_load_acquire(&s->state) =3D=3D NBD_CLIENT_CONNECTED) { qio_channel_attach_aio_context(QIO_CHANNEL(s->ioc), new_context); } @@ -286,7 +288,7 @@ static void coroutine_fn nbd_client_co_drain_begin(Bloc= kDriverState *bs) reconnect_delay_timer_del(s); - if (s->state =3D=3D NBD_CLIENT_CONNECTING_WAIT) { + if (qatomic_load_acquire(&s->state) =3D=3D NBD_CLIENT_CONNECTING_WAIT)= { s->state =3D NBD_CLIENT_CONNECTING_NOWAIT; qemu_co_queue_restart_all(&s->free_sema); } @@ -337,13 +339,14 @@ static void nbd_teardown_connection(BlockDriverState = *bs) static bool nbd_client_connecting(BDRVNBDState *s) { - return s->state =3D=3D NBD_CLIENT_CONNECTING_WAIT || - s->state =3D=3D NBD_CLIENT_CONNECTING_NOWAIT; + NBDClientState state =3D qatomic_load_acquire(&s->state); + return state =3D=3D NBD_CLIENT_CONNECTING_WAIT || + state =3D=3D NBD_CLIENT_CONNECTING_NOWAIT; } static bool nbd_client_connecting_wait(BDRVNBDState *s) { - return s->state =3D=3D NBD_CLIENT_CONNECTING_WAIT; + return qatomic_load_acquire(&s->state) =3D=3D NBD_CLIENT_CONNECTING_WA= IT; } static void connect_bh(void *opaque) @@ -423,12 +426,12 @@ static void *connect_thread_func(void *opaque) return NULL; } -static QIOChannelSocket *coroutine_fn +static int coroutine_fn nbd_co_establish_connection(BlockDriverState *bs, Error **errp) { + int ret; QemuThread thread; BDRVNBDState *s =3D bs->opaque; - QIOChannelSocket *res; NBDConnectThread *thr =3D s->connect_thread; qemu_mutex_lock(&thr->mutex); @@ -445,10 +448,12 @@ nbd_co_establish_connection(BlockDriverState *bs, Err= or **errp) case CONNECT_THREAD_SUCCESS: /* Previous attempt finally succeeded in background */ thr->state =3D CONNECT_THREAD_NONE; - res =3D thr->sioc; + s->sioc =3D thr->sioc; thr->sioc =3D NULL; + yank_register_function(BLOCKDEV_YANK_INSTANCE(bs->node_name), + nbd_yank, bs); qemu_mutex_unlock(&thr->mutex); - return res; + return 0; case CONNECT_THREAD_RUNNING: /* Already running, will wait */ break; @@ -480,8 +485,13 @@ nbd_co_establish_connection(BlockDriverState *bs, Erro= r **errp) thr->state =3D CONNECT_THREAD_NONE; error_propagate(errp, thr->err); thr->err =3D NULL; - res =3D thr->sioc; + s->sioc =3D thr->sioc; thr->sioc =3D NULL; + if (s->sioc) { + yank_register_function(BLOCKDEV_YANK_INSTANCE(bs->node_name), + nbd_yank, bs); + } + ret =3D (s->sioc ? 0 : -1); break; case CONNECT_THREAD_RUNNING: case CONNECT_THREAD_RUNNING_DETACHED: @@ -490,7 +500,7 @@ nbd_co_establish_connection(BlockDriverState *bs, Error= **errp) * failed. Still connect thread is executing in background, and its * result may be used for next connection attempt. */ - res =3D NULL; + ret =3D -1; error_setg(errp, "Connection attempt cancelled by other operation"= ); break; @@ -507,7 +517,7 @@ nbd_co_establish_connection(BlockDriverState *bs, Error= **errp) qemu_mutex_unlock(&thr->mutex); - return res; + return ret; } /* @@ -560,7 +570,6 @@ static coroutine_fn void nbd_reconnect_attempt(BDRVNBDS= tate *s) { int ret; Error *local_err =3D NULL; - QIOChannelSocket *sioc; if (!nbd_client_connecting(s)) { return; @@ -593,21 +602,22 @@ static coroutine_fn void nbd_reconnect_attempt(BDRVNB= DState *s) /* Finalize previous connection if any */ if (s->ioc) { qio_channel_detach_aio_context(QIO_CHANNEL(s->ioc)); + yank_unregister_function(BLOCKDEV_YANK_INSTANCE(s->bs->node_name), + nbd_yank, s->bs); object_unref(OBJECT(s->sioc)); s->sioc =3D NULL; object_unref(OBJECT(s->ioc)); s->ioc =3D NULL; } - sioc =3D nbd_co_establish_connection(s->bs, &local_err); - if (!sioc) { + if (nbd_co_establish_connection(s->bs, &local_err) < 0) { ret =3D -ECONNREFUSED; goto out; } bdrv_dec_in_flight(s->bs); - ret =3D nbd_client_handshake(s->bs, sioc, &local_err); + ret =3D nbd_client_handshake(s->bs, &local_err); if (s->drained) { s->wait_drained_end =3D true; @@ -639,7 +649,7 @@ static coroutine_fn void nbd_co_reconnect_loop(BDRVNBDS= tate *s) uint64_t timeout =3D 1 * NANOSECONDS_PER_SECOND; uint64_t max_timeout =3D 16 * NANOSECONDS_PER_SECOND; - if (s->state =3D=3D NBD_CLIENT_CONNECTING_WAIT) { + if (qatomic_load_acquire(&s->state) =3D=3D NBD_CLIENT_CONNECTING_WAIT)= { reconnect_delay_timer_init(s, qemu_clock_get_ns(QEMU_CLOCK_REALTIM= E) + s->reconnect_delay * NANOSECONDS_PER_SE= COND); } @@ -682,7 +692,7 @@ static coroutine_fn void nbd_connection_entry(void *opa= que) int ret =3D 0; Error *local_err =3D NULL; - while (s->state !=3D NBD_CLIENT_QUIT) { + while (qatomic_load_acquire(&s->state) !=3D NBD_CLIENT_QUIT) { /* * The NBD client can only really be considered idle when it has * yielded from qio_channel_readv_all_eof(), waiting for data. Thi= s is @@ -697,7 +707,7 @@ static coroutine_fn void nbd_connection_entry(void *opa= que) nbd_co_reconnect_loop(s); } - if (s->state !=3D NBD_CLIENT_CONNECTED) { + if (qatomic_load_acquire(&s->state) !=3D NBD_CLIENT_CONNECTED) { continue; } @@ -752,6 +762,8 @@ static coroutine_fn void nbd_connection_entry(void *opa= que) s->connection_co =3D NULL; if (s->ioc) { qio_channel_detach_aio_context(QIO_CHANNEL(s->ioc)); + yank_unregister_function(BLOCKDEV_YANK_INSTANCE(s->bs->node_name), + nbd_yank, s->bs); object_unref(OBJECT(s->sioc)); s->sioc =3D NULL; object_unref(OBJECT(s->ioc)); @@ -776,7 +788,7 @@ static int nbd_co_send_request(BlockDriverState *bs, qemu_co_queue_wait(&s->free_sema, &s->send_mutex); } - if (s->state !=3D NBD_CLIENT_CONNECTED) { + if (qatomic_load_acquire(&s->state) !=3D NBD_CLIENT_CONNECTED) { rc =3D -EIO; goto err; } @@ -803,7 +815,8 @@ static int nbd_co_send_request(BlockDriverState *bs, if (qiov) { qio_channel_set_cork(s->ioc, true); rc =3D nbd_send_request(s->ioc, request); - if (rc >=3D 0 && s->state =3D=3D NBD_CLIENT_CONNECTED) { + if (qatomic_load_acquire(&s->state) =3D=3D NBD_CLIENT_CONNECTED && + rc >=3D 0) { if (qio_channel_writev_all(s->ioc, qiov->iov, qiov->niov, NULL) < 0) { rc =3D -EIO; @@ -1118,7 +1131,7 @@ static coroutine_fn int nbd_co_do_receive_one_chunk( s->requests[i].receiving =3D true; qemu_coroutine_yield(); s->requests[i].receiving =3D false; - if (s->state !=3D NBD_CLIENT_CONNECTED) { + if (qatomic_load_acquire(&s->state) !=3D NBD_CLIENT_CONNECTED) { error_setg(errp, "Connection closed"); return -EIO; } @@ -1277,7 +1290,7 @@ static bool nbd_reply_chunk_iter_receive(BDRVNBDState= *s, NBDReply local_reply; NBDStructuredReplyChunk *chunk; Error *local_err =3D NULL; - if (s->state !=3D NBD_CLIENT_CONNECTED) { + if (qatomic_load_acquire(&s->state) !=3D NBD_CLIENT_CONNECTED) { error_setg(&local_err, "Connection closed"); nbd_iter_channel_error(iter, -EIO, &local_err); goto break_loop; @@ -1302,7 +1315,8 @@ static bool nbd_reply_chunk_iter_receive(BDRVNBDState= *s, } /* Do not execute the body of NBD_FOREACH_REPLY_CHUNK for simple reply= . */ - if (nbd_reply_is_simple(reply) || s->state !=3D NBD_CLIENT_CONNECTED) { + if (nbd_reply_is_simple(reply) || + qatomic_load_acquire(&s->state) !=3D NBD_CLIENT_CONNECTED) { goto break_loop; } @@ -1734,6 +1748,15 @@ static int nbd_client_reopen_prepare(BDRVReopenState= *state, return 0; } +static void nbd_yank(void *opaque) +{ + BlockDriverState *bs =3D opaque; + BDRVNBDState *s =3D (BDRVNBDState *)bs->opaque; + + qatomic_store_release(&s->state, NBD_CLIENT_QUIT); + qio_channel_shutdown(QIO_CHANNEL(s->sioc), QIO_CHANNEL_SHUTDOWN_BOTH, = NULL); +} + static void nbd_client_close(BlockDriverState *bs) { BDRVNBDState *s =3D (BDRVNBDState *)bs->opaque; @@ -1746,52 +1769,53 @@ static void nbd_client_close(BlockDriverState *bs) nbd_teardown_connection(bs); } -static QIOChannelSocket *nbd_establish_connection(SocketAddress *saddr, - Error **errp) +static int nbd_establish_connection(BlockDriverState *bs, + SocketAddress *saddr, + Error **errp) { ERRP_GUARD(); - QIOChannelSocket *sioc; + BDRVNBDState *s =3D (BDRVNBDState *)bs->opaque; - sioc =3D qio_channel_socket_new(); - qio_channel_set_name(QIO_CHANNEL(sioc), "nbd-client"); + s->sioc =3D qio_channel_socket_new(); + qio_channel_set_name(QIO_CHANNEL(s->sioc), "nbd-client"); - qio_channel_socket_connect_sync(sioc, saddr, errp); + qio_channel_socket_connect_sync(s->sioc, saddr, errp); if (*errp) { - object_unref(OBJECT(sioc)); - return NULL; + object_unref(OBJECT(s->sioc)); + s->sioc =3D NULL; + return -1; } - qio_channel_set_delay(QIO_CHANNEL(sioc), false); + yank_register_function(BLOCKDEV_YANK_INSTANCE(bs->node_name), nbd_yank= , bs); + qio_channel_set_delay(QIO_CHANNEL(s->sioc), false); - return sioc; + return 0; } -/* nbd_client_handshake takes ownership on sioc. On failure it is unref'ed= . */ -static int nbd_client_handshake(BlockDriverState *bs, QIOChannelSocket *si= oc, - Error **errp) +/* nbd_client_handshake takes ownership on s->sioc. On failure it's unref'= ed. */ +static int nbd_client_handshake(BlockDriverState *bs, Error **errp) { BDRVNBDState *s =3D (BDRVNBDState *)bs->opaque; AioContext *aio_context =3D bdrv_get_aio_context(bs); int ret; trace_nbd_client_handshake(s->export); - - s->sioc =3D sioc; - - qio_channel_set_blocking(QIO_CHANNEL(sioc), false, NULL); - qio_channel_attach_aio_context(QIO_CHANNEL(sioc), aio_context); + qio_channel_set_blocking(QIO_CHANNEL(s->sioc), false, NULL); + qio_channel_attach_aio_context(QIO_CHANNEL(s->sioc), aio_context); s->info.request_sizes =3D true; s->info.structured_reply =3D true; s->info.base_allocation =3D true; s->info.x_dirty_bitmap =3D g_strdup(s->x_dirty_bitmap); s->info.name =3D g_strdup(s->export ?: ""); - ret =3D nbd_receive_negotiate(aio_context, QIO_CHANNEL(sioc), s->tlscr= eds, + ret =3D nbd_receive_negotiate(aio_context, QIO_CHANNEL(s->sioc), s->tl= screds, s->hostname, &s->ioc, &s->info, errp); g_free(s->info.x_dirty_bitmap); g_free(s->info.name); if (ret < 0) { - object_unref(OBJECT(sioc)); + yank_unregister_function(BLOCKDEV_YANK_INSTANCE(bs->node_name), + nbd_yank, bs); + object_unref(OBJECT(s->sioc)); s->sioc =3D NULL; return ret; } @@ -1819,7 +1843,7 @@ static int nbd_client_handshake(BlockDriverState *bs,= QIOChannelSocket *sioc, } if (!s->ioc) { - s->ioc =3D QIO_CHANNEL(sioc); + s->ioc =3D QIO_CHANNEL(s->sioc); object_ref(OBJECT(s->ioc)); } @@ -1835,9 +1859,11 @@ static int nbd_client_handshake(BlockDriverState *bs= , QIOChannelSocket *sioc, { NBDRequest request =3D { .type =3D NBD_CMD_DISC }; - nbd_send_request(s->ioc ?: QIO_CHANNEL(sioc), &request); + nbd_send_request(s->ioc ?: QIO_CHANNEL(s->sioc), &request); - object_unref(OBJECT(sioc)); + yank_unregister_function(BLOCKDEV_YANK_INSTANCE(bs->node_name), + nbd_yank, bs); + object_unref(OBJECT(s->sioc)); s->sioc =3D NULL; return ret; @@ -2229,7 +2255,6 @@ static int nbd_open(BlockDriverState *bs, QDict *opti= ons, int flags, { int ret; BDRVNBDState *s =3D (BDRVNBDState *)bs->opaque; - QIOChannelSocket *sioc; ret =3D nbd_process_options(bs, options, errp); if (ret < 0) { @@ -2240,17 +2265,23 @@ static int nbd_open(BlockDriverState *bs, QDict *op= tions, int flags, qemu_co_mutex_init(&s->send_mutex); qemu_co_queue_init(&s->free_sema); + yank_register_instance(BLOCKDEV_YANK_INSTANCE(bs->node_name), errp); + if (*errp) { + return -EEXIST; + } + /* * establish TCP connection, return error if it fails * TODO: Configurable retry-until-timeout behaviour. */ - sioc =3D nbd_establish_connection(s->saddr, errp); - if (!sioc) { + if (nbd_establish_connection(bs, s->saddr, errp) < 0) { + yank_unregister_instance(BLOCKDEV_YANK_INSTANCE(bs->node_name)); return -ECONNREFUSED; } - ret =3D nbd_client_handshake(bs, sioc, errp); + ret =3D nbd_client_handshake(bs, errp); if (ret < 0) { + yank_unregister_instance(BLOCKDEV_YANK_INSTANCE(bs->node_name)); nbd_clear_bdrvstate(s); return ret; } @@ -2310,6 +2341,7 @@ static void nbd_close(BlockDriverState *bs) BDRVNBDState *s =3D bs->opaque; nbd_client_close(bs); + yank_unregister_instance(BLOCKDEV_YANK_INSTANCE(bs->node_name)); nbd_clear_bdrvstate(s); } -- 2.20.1 --Sig_/D6xxW8+EUuAB2H58wKDBDbT Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQIzBAEBCgAdFiEEg/qxWKDZuPtyYo+kNasLKJxdslgFAl+ZvD8ACgkQNasLKJxd slg4SRAArrNBmnTV+4F5V4Z+FwIJnFqUYaQhYYa3RtpDCnbVYRIKw4GUUKPgW1Dy 4rVXzqgk5yYJHd8tTthWpT2977fILXmBmALYwKIGHNZy3ITDnCYgHl0NVQxtEuKR YfCJ9R6FvvV+wjROXvYystVPi9+368HBXGWytBsNZyNfNPP5/E1kYyKy2bxNM83o mKlTpThVBmILU0pizvB58XM7qO/XLpMprr+LgGmI+H27mYI0vqAI21HuwWVgnjHp rDVZG1jHDnYJhGMjkiJkwRdXVrEDTINIKYrgJCbH/MY+NND1dS7mDVkpwyR52wp6 aCGMfl/69Q95w0hHwfm1hHMrmRMneL5i3QU6SQ8OyM5/sC8ieCOWNFAq/yhk/Qy9 E6eSwgiaP3AzCv81jCUEwxrU4n0yk4Yt6IjSvumUzs0crircUX6LNIjl0ClAxrLD Q/AMOhFX2HA18nEn7JQnaAuU/LqG3HIC7KZwntbtS/YOrqA7g+SjnEOIHzYPizIW 0rJLrUZTcdzsPSq8fp5RhZBysijVG/DDuYwcuJBWczKVhgHfkcAnzgOXfNBIUiAq rp0RXxV0IKVWeVNf8XspWWlzCSiBncIFloKap9dqPlybN4DS/YmFS0BlEnprAksd izA+uVCtTmvoLe2viPlhN5cYf9jQ5M6zv6qqXUxrUzjytZBgB0o= =tu+/ -----END PGP SIGNATURE----- --Sig_/D6xxW8+EUuAB2H58wKDBDbT-- From nobody Sat May 18 19:24:37 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=web.de ARC-Seal: i=1; a=rsa-sha256; t=1603911079; cv=none; d=zohomail.com; s=zohoarc; b=CNqVqwp1yYI7QFE3CWXBq5Z5UNulYW/USWXxjQtGk5DhV6lqsG0pVa8okWBbTEx/UOdElxpKxq0OR0cPXQunwAMUxH5bavvHx8s+rpOflQw54n0X4Hl+TQy5mcIdAnA3MDZpvlvRVxZ6msIQe+R1a6YS2IsFviVPSMmtZHcso08= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1603911079; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=sc7EMltWALQRK/Vsf0KbjBUXR610gpuUztPK0+G2cqE=; b=BYy5qCQmMYBTUMY/KZvPcOG34qdpI3YoBFTCMsFxwotcZtvxeIWJsw/MX8BkguAunqec0IsaDLp3JKu5DV4UbKdCmAQ5/cOToeUPYKHyY9AOzZcFEWkbgDMzvconjd0tikaHqDSXP3DriaIqnI+iloILyLGba9qdRs9v8mlWp6A= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1603911079873923.0617742894734; Wed, 28 Oct 2020 11:51:19 -0700 (PDT) Received: from localhost ([::1]:52070 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kXqXW-0005Nf-QE for importer@patchew.org; Wed, 28 Oct 2020 14:51:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53856) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kXqRz-0000A4-Ab; Wed, 28 Oct 2020 14:45:35 -0400 Received: from mout.web.de ([212.227.15.14]:36211) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kXqRx-0003H2-1K; Wed, 28 Oct 2020 14:45:34 -0400 Received: from luklap ([94.134.180.124]) by smtp.web.de (mrweb003 [213.165.67.108]) with ESMTPSA (Nemesis) id 0MPHFI-1kTQbW3gMi-004VPN; Wed, 28 Oct 2020 19:45:26 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1603910727; bh=wTPWPv0O9og9MhcjtUCWN563ETwPiVJdFxQBrN5ctTY=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=I9qDsrFDli5s9FQmdMTgwsCi51MWSgANimoQ3hTWvrtgas/77WE4DFVZ1Ik4Dr23+ AS7dMBZT9S4NpBujzhZoX66s85f1udDHc55Hkn2vB0zjWhB80x7NL3ADWpYr7f4176 7chcIVezaDXlUyTuXvo5AQsGOqCdtGF3ye2FrI9o= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Date: Wed, 28 Oct 2020 19:45:25 +0100 From: Lukas Straub To: qemu-devel Subject: [PATCH v9 3/8] chardev/char-socket.c: Add yank feature Message-ID: <36cd86dc7ee9ce7a95562e5ba4d990db176f9cfd.1603909658.git.lukasstraub2@web.de> In-Reply-To: References: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="Sig_/52YmmXZ_s4O488_Ozaz.paR"; protocol="application/pgp-signature"; micalg=pgp-sha512 X-Provags-ID: V03:K1:zVAgFhZg9M4yaT6Cr8sp5Lri29Wm582jv4nBZr5JA6xQyG+stzs ZOO6Y948qqMG84gBpKpsNtBkEHkVfPblyM5B3QZfQItiRCaKNS2/qv7T66gvMHFAL+7n5vI 7O5nOoJXshY+GzTThq2ASn3nbg80/TPpxEMv5yhB5mgNdXjEJDGrLJt/JLVQyXcKkWTqdMa wqTVSgiToOBlh9pw1Y6sQ== X-UI-Out-Filterresults: notjunk:1;V03:K0:iCKUJAZipsk=:2WBoTBDDHSGad6N/qWe6EY y8RCWTMlMvdk7YXXJYbfbEAougDl0OmxjsGk6HLCJvUTK8jJJIP3GWWSujRLDZtQmSYZuT89u r/vWH6oVr0lHI9zoPLaKMTVlc/izDZL7/dKSORAs7GADaNfQ14V3tjihJKqRefPPV1KTU0cxd nEqsrwvI1DH5L3sbe/3pazC7QVZqQhiqkmSD7NpNhisvbfmp0E6DlMnS94Gyp+9BccGeg/8Ho U9MUF+U3xhuii+k9B/vdZBC63zOo1C9MInxb5ewm1CpURiHiYQitrmKYGzshbSxKdmPlYBWgA xzlOCDbYOTtf1VsnHwKEqTJaeVSY/DISxTJl3dDuH1cYFkSIo+bg5aQvK39iUa62GF1p4LdTg zvhjPZAzgRzE1hQYK6av0tyRlmpe0GcBIO45DCW1+gBJvIJjl7KbM+Vq6R9DnjyOGm4Wega5l MkOf6uyGE3KrBryU17YZZBGH/Blo1Vxe4SsJ7z4zIIyrSJm2kAQeqUZ7ofPldOIWUbkLeUvBP 7gkQJgfPZ3Tfs8sJk7kOhDuG573pPtynZ/6DVzELnPHtiq8nhKJwknBHrz3pQsU8kP3Ok3jWn 8AInwwlkuVEYf16sL/SvCFyHNU19wmqwzFl1lNJohHnolwIR6FcASgQyUXM2OGsIE7YW6APQS SvMWgpnRcOx5xASk+4GNprUTisZAX8axJ2btp1ywdzs06S/HyMl/AJ8fA/V6TKfDb7ZGLXqRH XLL8L3YQ8Qaqf4xUt8i1HzqcNGboleEo5gsSSY1KnNORc7kj6JKIkoCGoHYfyKJcl0kUG+mv9 X3rTUFzJfM/UEXQeEc0bRgGOIrDJTMwN1zYmcjOHI4VPUpVJThWu2o2jDrsoGBPxV/Va500PP jkwIWxlVyCGV3Jwxsivg== Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=212.227.15.14; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-detected-operating-system: by eggs.gnu.org: First seen = 2020/10/28 14:45:31 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , "Daniel P. =?UTF-8?B?QmVycmFuZ8Op?=" , qemu-block , Juan Quintela , Markus Armbruster , "Dr. David Alan Gilbert" , Max Reitz , Paolo Bonzini , =?UTF-8?B?TWFyYy1BbmRy?= =?UTF-8?B?w6k=?= Lureau Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-Zoho-Virus-Status: 1 X-ZohoMail-DKIM: fail (Header signature does not verify) --Sig_/52YmmXZ_s4O488_Ozaz.paR Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Register a yank function to shutdown the socket on yank. Signed-off-by: Lukas Straub Acked-by: Stefan Hajnoczi --- chardev/char-socket.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/chardev/char-socket.c b/chardev/char-socket.c index 95e45812d5..5947cbe8bb 100644 --- a/chardev/char-socket.c +++ b/chardev/char-socket.c @@ -34,6 +34,7 @@ #include "qapi/error.h" #include "qapi/clone-visitor.h" #include "qapi/qapi-visit-sockets.h" +#include "qemu/yank.h" #include "chardev/char-io.h" #include "qom/object.h" @@ -70,6 +71,7 @@ struct SocketChardev { size_t read_msgfds_num; int *write_msgfds; size_t write_msgfds_num; + bool registered_yank; SocketAddress *addr; bool is_listen; @@ -415,6 +417,12 @@ static void tcp_chr_free_connection(Chardev *chr) tcp_set_msgfds(chr, NULL, 0); remove_fd_in_watch(chr); + if (s->state =3D=3D TCP_CHARDEV_STATE_CONNECTING + || s->state =3D=3D TCP_CHARDEV_STATE_CONNECTED) { + yank_unregister_function(CHARDEV_YANK_INSTANCE(chr->label), + yank_generic_iochannel, + QIO_CHANNEL(s->sioc)); + } object_unref(OBJECT(s->sioc)); s->sioc =3D NULL; object_unref(OBJECT(s->ioc)); @@ -918,6 +926,9 @@ static int tcp_chr_add_client(Chardev *chr, int fd) } tcp_chr_change_state(s, TCP_CHARDEV_STATE_CONNECTING); tcp_chr_set_client_ioc_name(chr, sioc); + yank_register_function(CHARDEV_YANK_INSTANCE(chr->label), + yank_generic_iochannel, + QIO_CHANNEL(sioc)); ret =3D tcp_chr_new_client(chr, sioc); object_unref(OBJECT(sioc)); return ret; @@ -932,6 +943,9 @@ static void tcp_chr_accept(QIONetListener *listener, tcp_chr_change_state(s, TCP_CHARDEV_STATE_CONNECTING); tcp_chr_set_client_ioc_name(chr, cioc); + yank_register_function(CHARDEV_YANK_INSTANCE(chr->label), + yank_generic_iochannel, + QIO_CHANNEL(cioc)); tcp_chr_new_client(chr, cioc); } @@ -947,6 +961,9 @@ static int tcp_chr_connect_client_sync(Chardev *chr, Er= ror **errp) object_unref(OBJECT(sioc)); return -1; } + yank_register_function(CHARDEV_YANK_INSTANCE(chr->label), + yank_generic_iochannel, + QIO_CHANNEL(sioc)); tcp_chr_new_client(chr, sioc); object_unref(OBJECT(sioc)); return 0; @@ -962,6 +979,9 @@ static void tcp_chr_accept_server_sync(Chardev *chr) tcp_chr_change_state(s, TCP_CHARDEV_STATE_CONNECTING); sioc =3D qio_net_listener_wait_client(s->listener); tcp_chr_set_client_ioc_name(chr, sioc); + yank_register_function(CHARDEV_YANK_INSTANCE(chr->label), + yank_generic_iochannel, + QIO_CHANNEL(sioc)); tcp_chr_new_client(chr, sioc); object_unref(OBJECT(sioc)); } @@ -1072,6 +1092,9 @@ static void char_socket_finalize(Object *obj) object_unref(OBJECT(s->tls_creds)); } g_free(s->tls_authz); + if (s->registered_yank) { + yank_unregister_instance(CHARDEV_YANK_INSTANCE(chr->label)); + } qemu_chr_be_event(chr, CHR_EVENT_CLOSED); } @@ -1087,6 +1110,9 @@ static void qemu_chr_socket_connected(QIOTask *task, = void *opaque) if (qio_task_propagate_error(task, &err)) { tcp_chr_change_state(s, TCP_CHARDEV_STATE_DISCONNECTED); + yank_unregister_function(CHARDEV_YANK_INSTANCE(chr->label), + yank_generic_iochannel, + QIO_CHANNEL(sioc)); check_report_connect_error(chr, err); goto cleanup; } @@ -1120,6 +1146,9 @@ static void tcp_chr_connect_client_async(Chardev *chr) tcp_chr_change_state(s, TCP_CHARDEV_STATE_CONNECTING); sioc =3D qio_channel_socket_new(); tcp_chr_set_client_ioc_name(chr, sioc); + yank_register_function(CHARDEV_YANK_INSTANCE(chr->label), + yank_generic_iochannel, + QIO_CHANNEL(sioc)); /* * Normally code would use the qio_channel_socket_connect_async * method which uses a QIOTask + qio_task_set_error internally @@ -1362,6 +1391,12 @@ static void qmp_chardev_open_socket(Chardev *chr, qemu_chr_set_feature(chr, QEMU_CHAR_FEATURE_FD_PASS); } + yank_register_instance(CHARDEV_YANK_INSTANCE(chr->label), errp); + if (*errp) { + return; + } + s->registered_yank =3D true; + /* be isn't opened until we get a connection */ *be_opened =3D false; -- 2.20.1 --Sig_/52YmmXZ_s4O488_Ozaz.paR Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQIzBAEBCgAdFiEEg/qxWKDZuPtyYo+kNasLKJxdslgFAl+ZvEUACgkQNasLKJxd slhGCA/5AeV1MBa7x3hqkM+kqYv0lYCWeP6TsQr95JjGiwJFJgLsvLBAdMV9zde8 1Kuyyz0xWoc99258J3UT63A7OH1DI9/DK5tbrHQylWRTB7cFlqqdLfn4VI8J1Irg gqPiB7Qd+BRZEvZLOBYziZrE37JGyZpyLvUxh01ypqtN4m+803X1OqX0BQxDgpNz vE5ZFWgjsXHNjzBPaKGueFrf8GAx8xWZFu5Smf/m/9byetxX28YlBTklBr9WLJhE RvjiFC9u44z3/YBiNiKPjzbAfFWrbWbHLF3S3UsD/8+ij32aTeTt2EJy8yypPmif z0bIFJa6BQc+Ago/kk3BxWaeEzW4GMldzvrz4p/FKX0dHy7Fsen+RWzWvUZwurj6 Bkh4NJZVO5IJ6mPGdEk6DdDOLDBg2YAAl9vXQNFhkwxEAlFLMbs9JobOzExREb+k Q3yHGIMz4YLe6iJ496vnh3o6aVZLjG7ganFDinbum9OUua7SmDP53+thOUrgmRwb XMUx2p9Z6jVHOMlxdSdYvlpYwfHeGIhqYDFyHY7Dwy81LEUcbPVj0A3UfZPcqSQ5 3/O8uS361pa9tsGBTeyieDe7qfBUO6WZuu4Ccp5TcImUd/9UJJTgte7xT0JbVjIf ql1W+1poZneiEUk4QujFrYVa9en8ov8zREOfUW2P4BKoP15Qt30= =D7Pd -----END PGP SIGNATURE----- --Sig_/52YmmXZ_s4O488_Ozaz.paR-- From nobody Sat May 18 19:24:37 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=web.de ARC-Seal: i=1; a=rsa-sha256; t=1603911122; cv=none; d=zohomail.com; s=zohoarc; b=FGWdFQmLYpDsoblLcuCCU7z9oTpF8xgweCzorYeNyHNyAv3tF3AKojltAQowjR7ynsXQvJKeItWirLL0x+LXSMnJKMcQChvT7s+atOBDFt5N77M901M3vk4rz29SeMF9tvj5U9WRK53KrnmFdhRAQpIUM0kSOir/KbiugiW8T0A= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1603911122; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=h5FIs/XR4s94D/vu/3TLLC/WkzKZqyZCDMQ5lMX1tSM=; b=Kp/eidRPqOPyqAv7dEU8Rgwf1LF+Qx20D9FxHZqUn+UygZziKl8cQRAYtCrkiF2MXRLaKTnovYamsJhZcHhx78BBqd5nzAGs2aBtdQ0RbDDOjsvShyIlegiBVmj4K+9bK/+opaK5NQaaIZvYv+ni9+whYh8cpGP4PcAEHpK+6bk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1603911122874964.9778560478178; Wed, 28 Oct 2020 11:52:02 -0700 (PDT) Received: from localhost ([::1]:53536 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kXqYD-000602-QE for importer@patchew.org; Wed, 28 Oct 2020 14:52:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53902) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kXqS5-0000FW-5X; Wed, 28 Oct 2020 14:45:41 -0400 Received: from mout.web.de ([217.72.192.78]:38387) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kXqS1-0003HR-29; Wed, 28 Oct 2020 14:45:39 -0400 Received: from luklap ([94.134.180.124]) by smtp.web.de (mrweb105 [213.165.67.124]) with ESMTPSA (Nemesis) id 1MhWor-1juN6O1gWp-00eTPp; Wed, 28 Oct 2020 19:45:31 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1603910731; bh=KFqCmUWN7PYq3vUbkZ3VQqIF71Pb83ts5WFS/wlRdQg=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=snsUX35vsvJtMOSBvNGqQblJCieDiwkkjTcYhsPtpAg5qwIIEC4bsu9WmqN2sm++Z tH6rV3CNuWH9k9caAHksN9xTVskRNrLJcDXXX50s4334aLrypPzjEPlhfMLNcYORwl 0j9TuL0aFFl1u69FVClpqo5gAVNcoWffq8GfmVhc= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Date: Wed, 28 Oct 2020 19:45:30 +0100 From: Lukas Straub To: qemu-devel Subject: [PATCH v9 4/8] migration: Add yank feature Message-ID: In-Reply-To: References: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="Sig_/a+KSomPcRAk6K6ZvZ6Sbjdo"; protocol="application/pgp-signature"; micalg=pgp-sha512 X-Provags-ID: V03:K1:kPn4PjvNOhU26H94/Fe2nT0Ae+wWgNOS92slpp0eBVzVaGa5UBM 7tAbP6sWRlQRAmSL6Eq2evdUddX4SQrGHXvzt9W2WdefZJcdgCoQ48Qgw+xNFmzY4IeGmXV bIs/CvvID0yLovuLcc2KLc5+mxQ+JAa+MpXiX9kFxboShLZ1oH3Wj9UDskZktWnt2QXbdnI iQfulxUJHr10eImH8V0PA== X-UI-Out-Filterresults: notjunk:1;V03:K0:8ROqpSdbiGE=:K1ipue7wH7qybb7hvpAqmi rmQvtOJ1mzSo6zEJ8ZvEtQ9S6PxVdu9r+b3tx+KeDiTjr6TbljPwxgTT0v6twYlOzRCKrdTv5 nUgDS2AjrlYdMdk7fmJydmI5euXez7c+uQiQ8eqCQYt5TMDF9Gqd4fR8ZiNY0V+D+Nwb5FDeT kx/Qhb0/4j1vjxgvLh5kN/Cc59lkFDRCOB2JNRBH5VnjJjoJMWqwFjC2RQxURNWMt1a6S3t7d +LLSq/Y4eDKB4o0OORATT+bfmTpB8CVCdC8KliEiVKVWpdJXf4ZHuhOBiRkWiGDilWqEI05w1 lrwsZJmiHgbJK1SMN7geweI7sauJuoaf1XNLIMiH0p3i6BR70lUI75uSMbg5KKBLKTFN/qh3G XbAqC62dwl5A3iM91j61IX4fFByrFCrr7Ep/Yht3lF1iPdLjF0p+NYLdMvgXDdSiR8xDRwdmn ni8GvVVcsXw66L08y4XMHnOxPu2s8VBrOhldMAALsT+leJL7zl889x6o2v4O2VWHR+VD6baKb upoxxcvLCZLBv4E2dIZ3wOTSgkxT1bXL6kC8H0/MlzzkUT++fc37wdbWgH60eDnKgpJQc7yEQ 4TXgzRUIqVhVHthpZgzINuDY+dUe/OaEq/m5dswiQHsDDj4xfai1xPXGWGt0zjFzYsEsKL6Q3 +rMv/SEC/B3zZX1x5FpOWJKYVqYEQVP26dEklDY4XoPSNbOWEYgUuA8ABaUxhlcJRs2+OYMti 0in4pjRmMXA/mz6MCU2Jb2/WRwirVifjAOejGI7GHPek6hUT3qMyHtyMZ1co/vVpP+qrHghXZ Ae+SKRe4Uv3MnA0NirGwz0AY25F2FXd7MtaiqrWaZLrV3bKQv6JhRdbgMk7TB4SXKXoqW4ZEs aoBsPP5zlAht22NbY9mA== Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=217.72.192.78; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-detected-operating-system: by eggs.gnu.org: First seen = 2020/10/28 13:12:59 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , "Daniel P. =?UTF-8?B?QmVycmFuZ8Op?=" , qemu-block , Juan Quintela , Markus Armbruster , "Dr. David Alan Gilbert" , Max Reitz , Paolo Bonzini , =?UTF-8?B?TWFyYy1BbmRy?= =?UTF-8?B?w6k=?= Lureau Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-Zoho-Virus-Status: 1 X-ZohoMail-DKIM: fail (Header signature does not verify) --Sig_/a+KSomPcRAk6K6ZvZ6Sbjdo Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Register yank functions on sockets to shut them down. Signed-off-by: Lukas Straub Acked-by: Stefan Hajnoczi Acked-by: Dr. David Alan Gilbert --- migration/channel.c | 13 +++++++++++++ migration/migration.c | 25 +++++++++++++++++++++++++ migration/multifd.c | 10 ++++++++++ migration/qemu-file-channel.c | 7 +++++++ migration/savevm.c | 6 ++++++ 5 files changed, 61 insertions(+) diff --git a/migration/channel.c b/migration/channel.c index 8a783baa0b..35fe234e9c 100644 --- a/migration/channel.c +++ b/migration/channel.c @@ -18,6 +18,8 @@ #include "trace.h" #include "qapi/error.h" #include "io/channel-tls.h" +#include "io/channel-socket.h" +#include "qemu/yank.h" /** * @migration_channel_process_incoming - Create new incoming migration cha= nnel @@ -35,6 +37,11 @@ void migration_channel_process_incoming(QIOChannel *ioc) trace_migration_set_incoming_channel( ioc, object_get_typename(OBJECT(ioc))); + if (object_dynamic_cast(OBJECT(ioc), TYPE_QIO_CHANNEL_SOCKET)) { + yank_register_function(MIGRATION_YANK_INSTANCE, yank_generic_iocha= nnel, + QIO_CHANNEL(ioc)); + } + if (s->parameters.tls_creds && *s->parameters.tls_creds && !object_dynamic_cast(OBJECT(ioc), @@ -67,6 +74,12 @@ void migration_channel_connect(MigrationState *s, ioc, object_get_typename(OBJECT(ioc)), hostname, error); if (!error) { + if (object_dynamic_cast(OBJECT(ioc), TYPE_QIO_CHANNEL_SOCKET)) { + yank_register_function(MIGRATION_YANK_INSTANCE, + yank_generic_iochannel, + QIO_CHANNEL(ioc)); + } + if (s->parameters.tls_creds && *s->parameters.tls_creds && !object_dynamic_cast(OBJECT(ioc), diff --git a/migration/migration.c b/migration/migration.c index 0575ecb379..e2c1123a90 100644 --- a/migration/migration.c +++ b/migration/migration.c @@ -56,6 +56,7 @@ #include "net/announce.h" #include "qemu/queue.h" #include "multifd.h" +#include "qemu/yank.h" #define MAX_THROTTLE (128 << 20) /* Migration transfer speed throttl= ing */ @@ -244,6 +245,8 @@ void migration_incoming_state_destroy(void) qapi_free_SocketAddressList(mis->socket_address_list); mis->socket_address_list =3D NULL; } + + yank_unregister_instance(MIGRATION_YANK_INSTANCE); } static void migrate_generate_event(int new_state) @@ -390,8 +393,14 @@ void qemu_start_incoming_migration(const char *uri, Er= ror **errp) { const char *p =3D NULL; + yank_register_instance(MIGRATION_YANK_INSTANCE, errp); + if (*errp) { + return; + } + qapi_event_send_migration(MIGRATION_STATUS_SETUP); if (!strcmp(uri, "defer")) { + yank_unregister_instance(MIGRATION_YANK_INSTANCE); deferred_incoming_migration(errp); } else if (strstart(uri, "tcp:", &p) || strstart(uri, "unix:", NULL) || @@ -406,6 +415,7 @@ void qemu_start_incoming_migration(const char *uri, Err= or **errp) } else if (strstart(uri, "fd:", &p)) { fd_start_incoming_migration(p, errp); } else { + yank_unregister_instance(MIGRATION_YANK_INSTANCE); error_setg(errp, "unknown migration protocol: %s", uri); } } @@ -1698,6 +1708,7 @@ static void migrate_fd_cleanup(MigrationState *s) } notifier_list_notify(&migration_state_notifiers, s); block_cleanup_parameters(s); + yank_unregister_instance(MIGRATION_YANK_INSTANCE); } static void migrate_fd_cleanup_schedule(MigrationState *s) @@ -1972,6 +1983,7 @@ void qmp_migrate_recover(const char *uri, Error **err= p) * only re-setup the migration stream and poke existing migration * to continue using that newly established channel. */ + yank_unregister_instance(MIGRATION_YANK_INSTANCE); qemu_start_incoming_migration(uri, errp); } @@ -2109,6 +2121,13 @@ void qmp_migrate(const char *uri, bool has_blk, bool= blk, return; } + if (!(has_resume && resume)) { + yank_register_instance(MIGRATION_YANK_INSTANCE, errp); + if (*errp) { + return; + } + } + if (strstart(uri, "tcp:", &p) || strstart(uri, "unix:", NULL) || strstart(uri, "vsock:", NULL)) { @@ -2122,6 +2141,9 @@ void qmp_migrate(const char *uri, bool has_blk, bool = blk, } else if (strstart(uri, "fd:", &p)) { fd_start_outgoing_migration(s, p, &local_err); } else { + if (!(has_resume && resume)) { + yank_unregister_instance(MIGRATION_YANK_INSTANCE); + } error_setg(errp, QERR_INVALID_PARAMETER_VALUE, "uri", "a valid migration protocol"); migrate_set_state(&s->state, MIGRATION_STATUS_SETUP, @@ -2131,6 +2153,9 @@ void qmp_migrate(const char *uri, bool has_blk, bool = blk, } if (local_err) { + if (!(has_resume && resume)) { + yank_unregister_instance(MIGRATION_YANK_INSTANCE); + } migrate_fd_error(s, local_err); error_propagate(errp, local_err); return; diff --git a/migration/multifd.c b/migration/multifd.c index 68b171fb61..620b55f5d9 100644 --- a/migration/multifd.c +++ b/migration/multifd.c @@ -25,6 +25,9 @@ #include "trace.h" #include "multifd.h" +#include "qemu/yank.h" +#include "io/channel-socket.h" + /* Multiple fd's */ #define MULTIFD_MAGIC 0x11223344U @@ -962,6 +965,13 @@ int multifd_load_cleanup(Error **errp) for (i =3D 0; i < migrate_multifd_channels(); i++) { MultiFDRecvParams *p =3D &multifd_recv_state->params[i]; + if (object_dynamic_cast(OBJECT(p->c), TYPE_QIO_CHANNEL_SOCKET) + && OBJECT(p->c)->ref =3D=3D 1) { + yank_unregister_function(MIGRATION_YANK_INSTANCE, + yank_generic_iochannel, + QIO_CHANNEL(p->c)); + } + object_unref(OBJECT(p->c)); p->c =3D NULL; qemu_mutex_destroy(&p->mutex); diff --git a/migration/qemu-file-channel.c b/migration/qemu-file-channel.c index d2ce32f4b9..afc3a7f642 100644 --- a/migration/qemu-file-channel.c +++ b/migration/qemu-file-channel.c @@ -27,6 +27,7 @@ #include "qemu-file.h" #include "io/channel-socket.h" #include "qemu/iov.h" +#include "qemu/yank.h" static ssize_t channel_writev_buffer(void *opaque, @@ -104,6 +105,12 @@ static int channel_close(void *opaque, Error **errp) int ret; QIOChannel *ioc =3D QIO_CHANNEL(opaque); ret =3D qio_channel_close(ioc, errp); + if (object_dynamic_cast(OBJECT(ioc), TYPE_QIO_CHANNEL_SOCKET) + && OBJECT(ioc)->ref =3D=3D 1) { + yank_unregister_function(MIGRATION_YANK_INSTANCE, + yank_generic_iochannel, + QIO_CHANNEL(ioc)); + } object_unref(OBJECT(ioc)); return ret; } diff --git a/migration/savevm.c b/migration/savevm.c index ff33e210eb..33da4692c4 100644 --- a/migration/savevm.c +++ b/migration/savevm.c @@ -62,6 +62,7 @@ #include "migration/colo.h" #include "qemu/bitmap.h" #include "net/announce.h" +#include "qemu/yank.h" const unsigned int postcopy_ram_discard_version =3D 0; @@ -2940,6 +2941,11 @@ int load_snapshot(const char *name, Error **errp) qemu_system_reset(SHUTDOWN_CAUSE_NONE); mis->from_src_file =3D f; + yank_register_instance(MIGRATION_YANK_INSTANCE, errp); + if (*errp) { + ret =3D -EINVAL; + goto err_drain; + } aio_context_acquire(aio_context); ret =3D qemu_loadvm_state(f); migration_incoming_state_destroy(); -- 2.20.1 --Sig_/a+KSomPcRAk6K6ZvZ6Sbjdo Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQIzBAEBCgAdFiEEg/qxWKDZuPtyYo+kNasLKJxdslgFAl+ZvEoACgkQNasLKJxd slhk+xAAneW19MdYSD0v8+BvO61xrZC7o6HNPYw6mwOJd2GiJmrksHUDkdyaxC9q 0hRzIP9c4pMUKnrkcslMgJWqf1RD1RaVbv4Rf7Z3nvi+5is9ImoQ3e1FvRKgbCNX 8MyNHWw32DbfXeoZpeiGgsD2OOk7I0Vt3+cf0uhFQbzreOjraZxDQp4jWJRDBWoY oYPM/XeWS3W8Mo/AsguDLrLKOZzRevELVI80OXNl1ghnbPJNgldGC9c3dsKhJ162 RztCEagd4z23pLErZvpNdFvqPLfpwkqYF0gMwZlMuGl8H8osjrF2iB2qijUfi+Nk 6u3SQXPyTTFezbZBr0nEf0RcGTw4Keeb/i3abH/Q4GQ5Ku9Q3HcQDG2UsSHcgljr skb4pAHg7gkrYFhahtJ2WXJVNKyFC2DE9sRQlCH3EPzukgC5dKX6hDwFL874vyVq xQwyrHnZsQ0JNWDmHPcqDTeQpnfbPc6rnKIfYoGTU0SGHn8+asxBDtdcz03wgxT7 2pxAszk/O+WMLDfjwt2gFP6z3yGT3HrstpWhiZnLxOt1rFoZ5F7HL/51KDsS4HcO p2+nzgZhDkjnvpcv4kwBFx7KKRtcSzc1fEeGa6VYKtaBhJldgVE64GTjkbFo5//g JxrHO7q/XyhJsVHqTEYyOQPmiJMPzPVvXbxVlXGJbWKMhknUAqg= =3yqq -----END PGP SIGNATURE----- --Sig_/a+KSomPcRAk6K6ZvZ6Sbjdo-- From nobody Sat May 18 19:24:37 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=web.de ARC-Seal: i=1; a=rsa-sha256; t=1603911205; cv=none; d=zohomail.com; s=zohoarc; b=EO0nnVQHymCtBnnpNBM9IA92Dm0rukmqtsqsgtmRkdjeH4yM+ed1nt+pw06MjlFybyVYiEr8FnyJTw6JCEs27r1gjsmBdYsw1rPxgqGWa8lFEW/04Bf5CU2kyUPeldD7vC5MTIuBR/ReJQkJwIi/qJwrTj2ZpJg6wTPVHc12e1s= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1603911205; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=3gmVwa7m+2ae86cR9tnfk9yS9os2povFmTbN0RZ4g1E=; b=OWDQZvbNNP6oC8Zzqs8mGsDk/3dkS4V615VIn+SHuzRn2vHpVmdxSRAlEY9e31kz3vdSJU9QnH1W9jCHpG+IuEc/YFITylDixPLbfpD209QVtuXuKF9IBhx4sv0jcmzteehrK7PKN4Lfu0fkrZ9BHVG4xPm27irkDB/1kfkI5v8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1603911205690252.8011674139849; Wed, 28 Oct 2020 11:53:25 -0700 (PDT) Received: from localhost ([::1]:57856 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kXqZY-0007oA-GP for importer@patchew.org; Wed, 28 Oct 2020 14:53:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53930) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kXqSB-0000Nl-2X; Wed, 28 Oct 2020 14:45:48 -0400 Received: from mout.web.de ([212.227.15.3]:52951) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kXqS9-0003J5-3e; Wed, 28 Oct 2020 14:45:46 -0400 Received: from luklap ([94.134.180.124]) by smtp.web.de (mrweb005 [213.165.67.108]) with ESMTPSA (Nemesis) id 1N30dV-1kNYXk2fHx-013CLW; Wed, 28 Oct 2020 19:45:37 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1603910738; bh=qNFWTek6fmYyiC+xP39ERwe9G5RcmmLQxbh3EAxvyro=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=IenQ4dtDSWZWnD8zG9PNFzHHvyl9ivENGW/rIVSIhKGnvSXHHZRAt7e6l8rFT1SUW 9RvQnJUk+kEy3NhNeCu0zeTVmnyZoLfIKN8IKsZeTURCuuj90+gHcBt22uuHyRrATX FlOd2Xp0lJDiqTb/Jcln+NFo836CGfV19Y/idMgc= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Date: Wed, 28 Oct 2020 19:45:36 +0100 From: Lukas Straub To: qemu-devel Subject: [PATCH v9 5/8] io/channel-tls.c: make qio_channel_tls_shutdown thread-safe Message-ID: <22072bf9d36a8e8ce6d9b1c9312c15538d7f7e3c.1603909658.git.lukasstraub2@web.de> In-Reply-To: References: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="Sig_/jXqwX78+Dou2aIueyJo_vus"; protocol="application/pgp-signature"; micalg=pgp-sha512 X-Provags-ID: V03:K1:n3Mt/H3g1zAQ9GPZ4k+NAcgqGvcUEZ7zGQwPqQzXRICU3F0HRoB YSfy7EraT5pYsmeuTzll+4aOlQsZl18bZTH61d+XlRPaja4jFlbwBVnG14LY3P6a34lPpig PiuDUmQB8Q10sO9YKKriw4lYl1MtLLDd7b/ggslCD440Cf4PfGbL2ikpiqiYigVtlto3R8S hsbPjdcHq0RrK77NYDc8Q== X-UI-Out-Filterresults: notjunk:1;V03:K0:K6t2iyMazNg=:UXT4Kk7WgFyN4bTFiB4Mdz sF2SvFXFfcj0VRJ4gIPaWkad8ADeePCktRkcAYikoMgj6PW7iZsXW1KWH/yNNa73R4vN5niJp 7kxHUci9YWnNKo5g2XSmuWMLhO1xMthZru5aXQA7/2oJdJj4+2Hsd5lHamT+pPm9o7z7Tr8tC EFoT6Yky+InfBJbqb4CazdclHfY2CG99FmZ2Mm7S0Qw16l7DSm6mJOmuK8Or99nUqR/9ygPqY bvF5CgRhRqV4TfTM1XHQfYBTBRuHxhNdtt6afDmuW4f/YiP8lXKWT5/RNX/nnsMPaN7xaIC4B ks2M8+vgUsTlArXPJfIRlA2t7CbZJJVUw1q+ZKQT2aO+clZ5JT6Vk8YQufuva8u/ngEOvNFnJ WbOBcyL+PC73F0TDo5/+R3grjs/i8+fEplI8KY9Biy6qx9sJZILM4qywTfLUPvNOQD0q8BYak PKqU4RT2kP+FYkvIgcbu2vR10ZX0DGdeJI1K07RabVeX/5KqL3rtK5QjqlKVTAADrkCekhdhv mTogAsrWyay8rm/f6TjXMYNlCrlfHjq1cBaKTRCLMT0Z95H3vr29/Ah8ZmR2V5S/wbJeuMO7W 5KEvFrZRfpxn275/3C3gPLCzkS5T3Jv4Z4cY8CepjXSXTS2QMlS+QjwGlLOjTU2Iv9Jz9wFon Eo3bamquQO0xVDl94LlFf/UoAYAbo7Krr8M0t3nZWAcOHGXtgUV3fhNYzAAY4okGutfAwGwIQ JLBB27bWYxsC1/nl6vr/2Y29W5lDQR6b7XtqiL60IQxIIwkMIKuvYbJonPvOFg4ZoQYYHdEiO /Kgy/hSxZhQ4UH+1/XhNJac8ogGihYsms6mbuDtSuoLUBFv8OcQ/zdgbfd7Bth92fdVvKnrUy EZFFqgGoMw0tZt897+Ww== Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=212.227.15.3; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-detected-operating-system: by eggs.gnu.org: First seen = 2020/10/28 14:45:41 X-ACL-Warn: Detected OS = Linux 3.11 and newer [fuzzy] X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , "Daniel P. =?UTF-8?B?QmVycmFuZ8Op?=" , qemu-block , Juan Quintela , Markus Armbruster , "Dr. David Alan Gilbert" , Max Reitz , Paolo Bonzini , =?UTF-8?B?TWFyYy1BbmRy?= =?UTF-8?B?w6k=?= Lureau Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-Zoho-Virus-Status: 1 X-ZohoMail-DKIM: fail (Header signature does not verify) --Sig_/jXqwX78+Dou2aIueyJo_vus Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Make qio_channel_tls_shutdown thread-safe by using atomics when accessing tioc->shutdown. Signed-off-by: Lukas Straub Acked-by: Stefan Hajnoczi Reviewed-by: Daniel P. Berrang=C3=A9 --- io/channel-tls.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/io/channel-tls.c b/io/channel-tls.c index 7ec8ceff2f..10d0bf59aa 100644 --- a/io/channel-tls.c +++ b/io/channel-tls.c @@ -23,6 +23,7 @@ #include "qemu/module.h" #include "io/channel-tls.h" #include "trace.h" +#include "qemu/atomic.h" static ssize_t qio_channel_tls_write_handler(const char *buf, @@ -277,7 +278,8 @@ static ssize_t qio_channel_tls_readv(QIOChannel *ioc, return QIO_CHANNEL_ERR_BLOCK; } } else if (errno =3D=3D ECONNABORTED && - (tioc->shutdown & QIO_CHANNEL_SHUTDOWN_READ)) { + (qatomic_load_acquire(&tioc->shutdown) & + QIO_CHANNEL_SHUTDOWN_READ)) { return 0; } @@ -361,7 +363,7 @@ static int qio_channel_tls_shutdown(QIOChannel *ioc, { QIOChannelTLS *tioc =3D QIO_CHANNEL_TLS(ioc); - tioc->shutdown |=3D how; + qatomic_or(&tioc->shutdown, how); return qio_channel_shutdown(tioc->master, how, errp); } -- 2.20.1 --Sig_/jXqwX78+Dou2aIueyJo_vus Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQIzBAEBCgAdFiEEg/qxWKDZuPtyYo+kNasLKJxdslgFAl+ZvFAACgkQNasLKJxd slgvSQ//UA+9kpLZWuN1ZbOjMabwm+r6FQMhxb8ww+AtCIim486ClEuto45JZA3+ fCejeddtDSkDkzXUkjKCnJeXs8SANXSc48aAl1MsqsF0xYcbFNqtAcvxn8jiz6b8 NjARbDQrUolr3Y3vir6QSAUn0BDoN+wP64iaJ1D5PBk7h11DKKKgvytbrB9Ia1il 9ATULx04MW0TFfXgy5L/ew9tsuIprXC3zuNmbCKuM6GXlrjIJM8X6dQEWsRtb7Lp pAnTvmmWkWYjvTfQ67opEwsR/JvyV/w/DdMH1Tlkcyccpdd6U6olPCofQ9UmIYDV /gZkO53i7M0SmQvD3KWopm/fqMac0fVtAEMDHmILNyFCM82ko757pSSID1jhsCkK qgbH1qSWBjVZEuHfUEdCVXVc2oAGL0CJYe6BGuWQCjC5PNRjUNtCrY6j8tVwoZgY 6ApBWnPoAC3gfwPdOFR7SD1dOOgREmuCHskah6f/eeEXgzBuJE/se3NPFFzgeMpT aYhFTbZPcLKxgsZV4TP84MJNZ2e1yF8PzMibK7sdc7chNUJ5hG+f9KuZ6/MgBYZD thujMxGVTMcJ491B5hx1HbO9aF9VdBpXVmkwkRGnP1U9s8OEBgqFdq1bCVUY1mLY j55RkQn40OHpkjYBEu2cfZeeCWj+hy4NiCyL/0p3tQ97B+3H/wk= =UFh+ -----END PGP SIGNATURE----- --Sig_/jXqwX78+Dou2aIueyJo_vus-- From nobody Sat May 18 19:24:37 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=web.de ARC-Seal: i=1; a=rsa-sha256; t=1603911114; cv=none; d=zohomail.com; s=zohoarc; b=c4jK6OZVHssJKWgS+R6OTpwvjDc2ZWJxjjatH8oERofVkqS2Cm2boNKcNtwE7QUj9M20EjwWww24xMoGcgmQN11HF3KnCybSRdOAY3aVdCJ/XzjbfXBw81J57xtB9d487IKbV2C1iiRuxgqAcayDLVcTMO5+RRkEs/kIWSOFkx0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1603911114; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=Q9cObm7kMdFLF3F88Pdlb/F2P2IVv9trZA706gcGkKw=; b=RQkKU+tUTWYlmV32juF+K2Q3h4WVXvY656AeqPXInWD6aMLeDUohiyoYEc7/yqSwA/J6SqUFJIBKDINeuQcJAnnS2hHgsD78j95TfPp1BjiuDvghX5zdXmSed0j6i+Xz3qsnGYFEFWGSEAdhYhrzeS6HOqKdtKqHgeV8ii9yR20= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1603911114406779.8826196277846; Wed, 28 Oct 2020 11:51:54 -0700 (PDT) Received: from localhost ([::1]:53430 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kXqY4-0005w6-T1 for importer@patchew.org; Wed, 28 Oct 2020 14:51:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53972) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kXqSC-0000Oa-Rz; Wed, 28 Oct 2020 14:45:49 -0400 Received: from mout.web.de ([217.72.192.78]:36183) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kXqSB-0003JH-0U; Wed, 28 Oct 2020 14:45:48 -0400 Received: from luklap ([94.134.180.124]) by smtp.web.de (mrweb102 [213.165.67.124]) with ESMTPSA (Nemesis) id 0LlWGZ-1jzssU05xf-00bILd; Wed, 28 Oct 2020 19:45:41 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1603910741; bh=iohBE2TsRUHqlaHAZq3nAbb6MbYyYQk71IzJEZLd1Ag=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=il8Tjkz2a0hFfBrpQDmrh6/6+wfRRVRZRz6jdFjqckTdczqjQEZ825FuCAk+npQtv h2veRZx2Ek2n8xtVEzflXzcPNvRV/1H6RpnHDkIaCstVvVOevb9PTB5/4ScoX6SrsD dDShMYhmkCMheUurNzWp0BAODoNBNAd8E/H1hJ/w= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Date: Wed, 28 Oct 2020 19:45:39 +0100 From: Lukas Straub To: qemu-devel Subject: [PATCH v9 6/8] io: Document qmp oob suitability of qio_channel_shutdown and io_shutdown Message-ID: <10e56f6d30fca6dcb75c0be8ed605bbbe2b0fec7.1603909658.git.lukasstraub2@web.de> In-Reply-To: References: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="Sig_/sLb18prFuGqp30VaG6BeDue"; protocol="application/pgp-signature"; micalg=pgp-sha512 X-Provags-ID: V03:K1:Ds90NGIY5RZLKXGb9z0vHscFNsktlAKePLSk1mem/xVbZkl98Lg JXsilk42eQlEF44Y85OK1aPq2ISLW9RMYo3lZ7SDkFlqt/orjBTBEy8NJuIXI/fc4IYVCmg 5XcCURhzzHJiwq5cfy8RorX3P3kC6QS206zqN/dO3iAj5CGcIe/9xthk9EP0H0jE/eLUk3D KEILFCwxJSItZGQRcT/hA== X-UI-Out-Filterresults: notjunk:1;V03:K0:CC4KGKQ7peY=:fFoliSV4iffELOMD6EwQ1k 6oiIoUbumlg8l5EznCeRc+a4M0o3s6qziAkDgHfCxs2qKqupScPsXcmgTMl6oiiRa6Vsu6XvC 2Ozz5qaINk06DgCMwgWAlPgcOE/4DYUeC5M/5omRHK8cgBD6nAiMFMHMGEk4f2bcYmCtd1JHS MH3WArFMb5cYC7BhEiunaVte9nCSiMDtzt/4J+2P3UCaMr0PoLmbP0ctmjrsmx/2Xbundxkkc uNndVCTwvygvv9FdRsq031OZa63kWFKNIeRQG75YXJAaoBDUx5dfHAmWKrSQayrw7/R98kUdf nIMEhKsTydqikdD4XlC8KtbsT0uJUvFSWGp4u2K3twaMJMW7TthgIiclbRIyrzn5p5loJCjvF KVlXDGRRnjUzyXZW0hsITLeIhJ92bl0HxbioXvIyyd+3sVZoCaQMPaKmnDGjOD9mFnWB5v7C6 lPoI+ygjPAUH064WoePyOQ7W+MZ/eLKUtsWQtyCZtqZZJm9E1piRnGfamrG/QrHEHboqn+jO1 cmIS8/NzWLzIgVjQTOlWdz0NYkZiViEMdoRM7tvntmVKdK3bY4yHUMhPTwIjsMEqakVhDtXLy dvbX0oK4BwMEh+HxLXsXBexDv1CVsi0EMBWwv5D4uJd9pcqu4kS/9+XopyhK4ISh/V/YzlkfI elyO79RK9TSp9chw5GB3dyZ6IirJrpN7D0UyBq0aOz3zTP4wi10/MkCGZlmYP6sXXx6t+xr7K iSbAUxg6qwsQtx5toqESlEJb5g+xy72zh3dGQKrtKSFF+3KOPkMEkRez9EG9/MXnEuqm44Boq GwARq3YBXR6PLJkYTY8YuPlj89zBKHlqWJiHGGMMLFe0bPhL4ld1xEOMu9WCwE6AYP+XYUiQg tCX3s7Mh6mQs6i8u/djA== Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=217.72.192.78; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-detected-operating-system: by eggs.gnu.org: First seen = 2020/10/28 13:12:59 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , "Daniel P. =?UTF-8?B?QmVycmFuZ8Op?=" , qemu-block , Juan Quintela , Markus Armbruster , "Dr. David Alan Gilbert" , Max Reitz , Paolo Bonzini , =?UTF-8?B?TWFyYy1BbmRy?= =?UTF-8?B?w6k=?= Lureau Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-Zoho-Virus-Status: 1 X-ZohoMail-DKIM: fail (Header signature does not verify) --Sig_/sLb18prFuGqp30VaG6BeDue Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Migration and yank code assume that qio_channel_shutdown is thread -safe and can be called from qmp oob handler. Document this after checking the code. Signed-off-by: Lukas Straub Acked-by: Stefan Hajnoczi Reviewed-by: Daniel P. Berrang=C3=A9 --- include/io/channel.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/include/io/channel.h b/include/io/channel.h index 3c04f0edda..e0b9fc615d 100644 --- a/include/io/channel.h +++ b/include/io/channel.h @@ -92,7 +92,8 @@ struct QIOChannel { * provide additional optional features. * * Consult the corresponding public API docs for a description - * of the semantics of each callback + * of the semantics of each callback. io_shutdown in particular + * must be thread-safe, terminate quickly and must not block. */ struct QIOChannelClass { ObjectClass parent; @@ -510,6 +511,8 @@ int qio_channel_close(QIOChannel *ioc, * QIO_CHANNEL_FEATURE_SHUTDOWN prior to calling * this method. * + * This function is thread-safe, terminates quickly and does not block. + * * Returns: 0 on success, -1 on error */ int qio_channel_shutdown(QIOChannel *ioc, -- 2.20.1 --Sig_/sLb18prFuGqp30VaG6BeDue Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQIzBAEBCgAdFiEEg/qxWKDZuPtyYo+kNasLKJxdslgFAl+ZvFMACgkQNasLKJxd slgfnBAAm4EzJtCrG+SexTdcCJzKOCZTfaBNe2IR6jtDN5kFVykaRkSavwDy9xWP HZaH+yADFC/t77WbOWTTNNvgBtlLNzVdFDRwMuampSRjo2uCQHntJDllYA2FQysD cFL0vC+LKCvrPbMgi3+EED7mMTQLIVQ8JnGcnchQSJ4PCSxu1cFtOvUgAjT6fNPM LIMiav3YHS3YG0tJiWq3LGt9UdKtIvfYcDVPQRGkYs1zoqIBwQwGFzTi+l888LdC +hAk9mra/+V5ERb5TufpaJZh5oF4Ev4LcDD3bT5PsXG48UKjMqFzXbhfELRvl/r3 INBPdm9+Z2zjh+vnxFkukBWNHTxpE+s8QP1RgLQVYUeQmC5dIzZyis7pjwpovon+ Glv601ib5Q/Dw0eYO/TJWmmWbr1u0Ir/UWGuv9hVpWXnuEiiERgjAxHodfVNwLLc FlC9Ztpo+gKZnhkhtvDURotTMT6XbbO1hb2PW4y9wkiq1GGzFEmT8U1S5VPLBFXO 7vneOBCZcRvV3SkcwK8WQ2Fb8hGrpXZLaUtArmHW87XdS0W3JvJWJz2qlIJHpIlH ToueV4S+V1HSLJDJprM+Etc92NOP101TIHolOyZvhfZBmN5qvqnCBl72ct6tq2q6 KUqByO6dqCX9MOW+I5Ja0PkJ3msScOE8ZejrT5bmd0uP7IKeQtA= =1VfW -----END PGP SIGNATURE----- --Sig_/sLb18prFuGqp30VaG6BeDue-- From nobody Sat May 18 19:24:37 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=web.de ARC-Seal: i=1; a=rsa-sha256; t=1603911270; cv=none; d=zohomail.com; s=zohoarc; b=Edt7PYaDgk29w8bE0dYB1h//KWelEuK/QRfoe5zhJSZ++j+4IFNqxc+xSdPNkLq04e4Xsaq7pIPXbouD6z+wOxkWe7MsQZe6q9VXZ88WE0J+T+rDh8oCgRcDQnP++YduJnfNPt28UMuGzBxsYSqADX0ajr/3CUZyS8lGeKnsgTc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1603911270; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=TEOTvZ6vmNmtm1XmryrmocojKh9C86ExYbG0SMm/iuA=; b=Qf7RrV01UwU49RRDz7PZrcOzl9zBx3mne+8LNtaJlDUHuskX8hHPMaDJH6aB7La0nLRoG52AAUiIarqE4b+FZjUXcwRcP4TZS5G9g7b9NoAA8E/HV9pNPyN7WGeL3hjdwWIjz/hhZ76bZnDJ+5CMSF1IAGTavpeWqZ+UB7SQA2Q= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1603911270732207.09414210880675; Wed, 28 Oct 2020 11:54:30 -0700 (PDT) Received: from localhost ([::1]:60596 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kXqab-0000V3-Cg for importer@patchew.org; Wed, 28 Oct 2020 14:54:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54010) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kXqSI-0000Sg-3f; Wed, 28 Oct 2020 14:45:54 -0400 Received: from mout.web.de ([212.227.15.4]:47949) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kXqSD-0003Jd-Bm; Wed, 28 Oct 2020 14:45:53 -0400 Received: from luklap ([94.134.180.124]) by smtp.web.de (mrweb006 [213.165.67.108]) with ESMTPSA (Nemesis) id 1MDvDU-1khhpE27PA-00A23a; Wed, 28 Oct 2020 19:45:44 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1603910744; bh=TEOTvZ6vmNmtm1XmryrmocojKh9C86ExYbG0SMm/iuA=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=roq6LE5oP/IslMRArn6PHZB8+4lHO7vlaazzIKCylwQnWUumh1HpHL0/oCKc8kf1y f0JytcTTiSmQ0srUw37RqcwYsQ8K/tJqBRifgiwaaHnan9zD71oiVdIH0HdlKCLEwI PRJeVlXCnyKSnUblxIadYkVC9/nTtMPoEZH/vUVg= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Date: Wed, 28 Oct 2020 19:45:43 +0100 From: Lukas Straub To: qemu-devel Subject: [PATCH v9 7/8] MAINTAINERS: Add myself as maintainer for yank feature Message-ID: <29e967825e52fc799c175a60fc2cc1bcca2c5d86.1603909658.git.lukasstraub2@web.de> In-Reply-To: References: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="Sig_/h7Sq.z+Xuqq6PIFkhjWER3K"; protocol="application/pgp-signature"; micalg=pgp-sha512 X-Provags-ID: V03:K1:1WhGu7wZySWGDRBAu4mjBcb80h9TMJ6JWF6TZ9KYIPisTyGbvcf yqJuZxNJn2WnYnwdgRjvydzI34lFu8IMbCAyMauZasdFKlhVW3BiXqR8yrPXrCc51UTnfDP ZOzJPPbYEcJqnTGnU94LKgnzaNOzMbUVrxRm5Nt2rej+MWEjjfv/MxwWYT+h5e28Ou9u09J Ua9z4Xy1vE89pQAELMaog== X-UI-Out-Filterresults: notjunk:1;V03:K0:M68FpzMEjEc=:7nLDDUKDF4xtFA9kPOlI77 RuDc7t5PZhBYTXgddM6Pt2dtsXOi4i2X+LJ4DClgRD4/ATX1BdHFY9m1fimYP6zdSTa/zL0HO W7iC5KSF7PcesUBoA5dvHpwAiD5e1lR73SSSjKO25HWd5/Eo92TWaIL3sLkYUd7uMfpxImv+2 69vpfW1ec7HfSXN3+P+Ht6B1eEKQXvV1uoCMH71CE0Si5k+7A95Qa84+4aYjjhk/dHAllJhby JgdjWjfk9IQuhBg6I0VrpcR2/tnMrvhw2hE1iyvSifB3ZM9kzUCNqvZAjfpyRwwYlG893ypJd OKPAOeH/7c/+DoT5l2O8bk0gfEdgXRpbX2q+Kcq5v1yMq+eIN9mokQO74ApYtyluiMIJCjVrW sY6xbPLIfXo/fthP7cOdkKn5Dzrf7cZF/amMgbZmGykuFpytn72hxNxXsQphT+XFxjgnmQQtr TC96xm9trGVGmprWVEdScLdET4mGqIO6VwvHINkO2Oofm7CmLVXwRHsJPHNI9+x+Ii29fxvS0 I3z9prCkKJr2zCdKHahMrNXUOYYH1EW53EfPgGsOY3A8Y2Bi6FO3jBjQ6H4xA3vJ869ILbDqO YM2+vkU1ZWI38RGi+juAvAfy36kNWDMouW7HdtE6AllXLNayMF/VWWNQbz+PbpLcqm8WUqXQU dUhROJJyLdv+yE0Y48PmbAeFHKOl54vHtOBQRf6qYHVliZBEcjqfR+ZF53gI82kD1DkhPtTKe D2t7ZQn5Rj0uvc70Nug6lO58vBj7XMkfmg5ph8kA13MX/wNjtwl0HlDdZ+EXjccDw6xe+XKMw mGnFwmOE1Vk/PcmRSFpW6i2jzLGvhtk6dyyPM264LtykEQ5L9cjTYcHnQluMYysQ2NzJR4pbB tpG/zabqYJCfZH6atKQQ== Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=212.227.15.4; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-detected-operating-system: by eggs.gnu.org: First seen = 2020/10/28 14:45:25 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , "Daniel P. =?UTF-8?B?QmVycmFuZ8Op?=" , qemu-block , Juan Quintela , Markus Armbruster , "Dr. David Alan Gilbert" , Max Reitz , Paolo Bonzini , =?UTF-8?B?TWFyYy1BbmRy?= =?UTF-8?B?w6k=?= Lureau Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-Zoho-Virus-Status: 1 X-ZohoMail-DKIM: fail (Header signature does not verify) --Sig_/h7Sq.z+Xuqq6PIFkhjWER3K Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" I'll maintain this for now as the colo usecase is the first user of this functionality. Signed-off-by: Lukas Straub Acked-by: Stefan Hajnoczi Reviewed-by: Daniel P. Berrang=C3=A9 --- MAINTAINERS | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS index ef6f5c7399..5921e565df 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -2669,6 +2669,12 @@ F: util/uuid.c F: include/qemu/uuid.h F: tests/test-uuid.c +Yank feature +M: Lukas Straub +S: Odd fixes +F: util/yank.c +F: include/qemu/yank.h + COLO Framework M: zhanghailiang S: Maintained -- 2.20.1 --Sig_/h7Sq.z+Xuqq6PIFkhjWER3K Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQIzBAEBCgAdFiEEg/qxWKDZuPtyYo+kNasLKJxdslgFAl+ZvFcACgkQNasLKJxd slhldA//ePYssiifYGZqr4DxNgqm0c6mqS2OzLy91XcW0tgAbj4SrnIdDF49q7e0 F5hySQWEFPNAvYRi1ylUmKI/67Gd6++MD1HiY3Lp5abCM7sk1YiqyCWNtHYNcrqO qeSmV8lnHXC6aMajudgJewQrpJfjid6ey6A77PsI7BdtyyKzNIZZT7tna/LEBqat psvVRmkJC61BJa37eDWOCKHSjLgn0ic5OqhuLeQSiem2Pmn5ohYUBXypu1p6idQ1 PWkcDuqSOA4G3wOtmnNUhKDz0ZfQqZi/niAGYzfDSEqlGsHtvRLvWyHU/TX/7n6R tAez4oVc4OlCZ50FhBhErsfHbOh7h02AjJYO2GbUrZ5lXORHcZGRzp6qxkx7kzFA pgbFgYbcON5Yuq8PiGhQ52d2DMF1sSYqx5yb+6QT6X1qOzLTCRsfWwbVLbQdC0rm eM6LCilMkRq+T7NzcyBXEIRd1B5iKmIpnlA/8HmhDBiw/Znl3cqI1jmPlgEJOz1q rYVGgCB25JOhE0k0FuUTx7CTx5/KmVzyrZ//un7iZCKOjiYldxvGz0j/z6jXv55p VYQPAsYCUnRhd43WGOxfLI7BHcePYp7rEkzzD8r2kj+MDvLtI/6Icy+l40emYtsO Ww52sO8vn+3aQSkTpVSPAYbOgvOlEzhNreFtc2lXA1AT2oOPuOs= =WdGs -----END PGP SIGNATURE----- --Sig_/h7Sq.z+Xuqq6PIFkhjWER3K-- From nobody Sat May 18 19:24:37 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=web.de ARC-Seal: i=1; a=rsa-sha256; t=1603910957; cv=none; d=zohomail.com; s=zohoarc; b=iy/Nx0Zfu2D38mkYqxu5wQlfI/J920pN1GX0WHDsZPxno2SWw2QKij+KIlSwYUQB3j+JPkNml/s3SCKfv3/SZMXmiJ9pbUK+c4Pl0xn8JHyhoyrJtzM7nmM+HqbP0YbOnCtQa4fPa24ioGWtpA9gUH5Em9hXxqTvI14ZbCojObk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1603910957; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=h69lNiLpu08MM/kakGBOZwWQtjBBr6q5gr+0Xiev7T8=; b=ABKjtioxeh/Lzu8VmRVLWKvMC9Gt6apUGuQrFH1LMh34HnJF/wj4k0zNUnHTUkQQo05qhXVvk78aMdEuelopHqcctUOqXIlTUzB4yL358FaxYYtbh+kOKcLO+C07VQwo5Pv6OSb28W2ArNvm9eXNmKRGP5YWpbGrThSgbTzoBrc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1603910957968131.35655876140186; Wed, 28 Oct 2020 11:49:17 -0700 (PDT) Received: from localhost ([::1]:46148 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kXqVY-0002ru-R5 for importer@patchew.org; Wed, 28 Oct 2020 14:49:16 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54046) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kXqSL-0000VF-VS; Wed, 28 Oct 2020 14:45:59 -0400 Received: from mout.web.de ([217.72.192.78]:37931) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kXqSJ-0003NN-G6; Wed, 28 Oct 2020 14:45:57 -0400 Received: from luklap ([94.134.180.124]) by smtp.web.de (mrweb102 [213.165.67.124]) with ESMTPSA (Nemesis) id 0MHp8z-1kWSTR0FJt-003cSJ; Wed, 28 Oct 2020 19:45:48 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1603910748; bh=NEk33/VRdzWR3gA85uwpaaoNM5m0YixLtMaSx3M2VbQ=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=ajUjszchan9GfJsXF0r2nQjECDc3m7D2od3h4jmZeLKuItB3O3mHIKBVbLteXCwxR LDJzGInFRIEyECeD3EZoSuqDH7fP0GOvtZSD9qwwy8J/rZAc4cO4OpwXHsQGsWLF0Z 9KjJqj0FNYBL7btIQTt67wJPi+ZtW76E7wHXFpM0= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Date: Wed, 28 Oct 2020 19:45:46 +0100 From: Lukas Straub To: qemu-devel Subject: [PATCH v9 8/8] tests/test-char.c: Wait for the chardev to connect in char_socket_client_dupid_test Message-ID: <3428deda3f07bbaa1a0d98424416e144a9d57a6d.1603909658.git.lukasstraub2@web.de> In-Reply-To: References: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="Sig_/jyshal6RFUSLHw.fxdLtHKd"; protocol="application/pgp-signature"; micalg=pgp-sha512 X-Provags-ID: V03:K1:8baryHbG1vcAsU50iZfUVX2jYzoFCJo7pOjqgEHSldYVARocB74 YO61PESS/i7u/0H83F+Hybd8vFjJxSJStdIDXT6Y9C/VuPSW6AcNTcWD2H3xgFa2m5wS1wo +0PRutHqgkVDmoU2lPG8DBDqu/KXIX3bkYzqUy03dMMLuzMTD/ThnHrgjZVnEw7BF2Q5IOc c99ALh11I3tis2x0RrCYg== X-UI-Out-Filterresults: notjunk:1;V03:K0:UKK+M9vx+eI=:nGOfhypLhVdgRu51fKwQnf Zv5cgXj5bKLkoQ8cD5NDhzQwF/+MEw5F83xGvrjterdcT9Vgo306ABkxpzMJL5le5L9S+pHOX D72nYPjNa67isP0b9JhBx7knUy/S/Mw5KxQZpN++PfeVdd4WeaK5FGexPVA9B2nXeu05kqwKe wMqiORumHWrOadlbb6uhYTPCCyl9dW1TYfa5JXWrIrBwiLdMkJBhdzbB00TFWc5IaMeh77LLH Oj7t/kogiXmBjlMMMSzNAddpWCSc4trhLGgZuf7UleuKWhYDkjZYc6jsRBJWnu/GSCJfoHjRb GkAb44Xy0lTpPlX9GiYG8yIDLoRvGFZpdifCK6yIk93zfdOhKUYVA9i6CMntY666askcg+FgL Sz/zIbYCHq3K9yda8GqaB4Dq75fnafP1RUU8pbEEJ34kwx8y1tEuc4IUu5Zrg9zYMFoPjVZu5 LuuuHllOGztaxnTSSNC3xpxOsHEf/pbzGAhYnvUY9qStZYjmEtC95wDr/9pTPo+P1bx0sj+r8 xiGMgjHRom0vG72BYYCxOrukEJigtqTccfjaZ22lC8XdFSLUZPL2UlfDYiSNJAumfjpHz6477 z69IwVUpL+hPrDzBYF5mm5bu55rZpSCoQDQ4ybqXuEWFJKdXTtwkcaot5AQLR4mhlvGIp2oGZ xgApCxlGv1TI78RfCWHiubNEUuQLaXdV0qLE/2Ed1SpS73fioSyA/kCB//KuTZ5KK8ame5g1c 2vl02NXIYafyLOtEVLk3LBLfd0Nze8OWkUXflNCoUgZeSMY9i54A/V9c3HvLXnroVWGD5gbPm 5s53tMb95eNQ7ma2FEYxqHF6qvNoGt6kckraajMofYvTjwKbhaI4Ym1AKTv88/p1y+mc+dkmT i7MHqAIELygTABdNChiA== Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=217.72.192.78; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-detected-operating-system: by eggs.gnu.org: First seen = 2020/10/28 13:12:59 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , "Daniel P. =?UTF-8?B?QmVycmFuZ8Op?=" , qemu-block , Juan Quintela , Markus Armbruster , "Dr. David Alan Gilbert" , Max Reitz , Paolo Bonzini , =?UTF-8?B?TWFyYy1BbmRy?= =?UTF-8?B?w6k=?= Lureau Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-Zoho-Virus-Status: 1 X-ZohoMail-DKIM: fail (Header signature does not verify) --Sig_/jyshal6RFUSLHw.fxdLtHKd Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" A connecting chardev object has an additional reference by the connecting thread, so if the chardev is still connecting by the end of the test, then the chardev object won't be freed. This in turn means that the yank instance won't be unregistered and when running the next test-case yank_register_instance will abort, because the yank instance is already/still registered. Signed-off-by: Lukas Straub Reviewed-by: Daniel P. Berrang=C3=A9 --- tests/test-char.c | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/test-char.c b/tests/test-char.c index 9196e566e9..aedb5c9eda 100644 --- a/tests/test-char.c +++ b/tests/test-char.c @@ -937,6 +937,7 @@ static void char_socket_client_dupid_test(gconstpointer= opaque) g_assert_nonnull(opts); chr1 =3D qemu_chr_new_from_opts(opts, NULL, &error_abort); g_assert_nonnull(chr1); + qemu_chr_wait_connected(chr1, &error_abort); chr2 =3D qemu_chr_new_from_opts(opts, NULL, &local_err); g_assert_null(chr2); -- 2.20.1 --Sig_/jyshal6RFUSLHw.fxdLtHKd Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQIzBAEBCgAdFiEEg/qxWKDZuPtyYo+kNasLKJxdslgFAl+ZvFoACgkQNasLKJxd sljVkBAAn7sIcmiS3YWlS0XN8NVXmSRSFhvnanNYzGVTx9UqDEqrw+zu/WZTzOjc ZOdXXzOoh7guUocwR4AB5Xoq7AAjLvnHWMS//tgcQwnHxC9h30k6qXj/wPD+C2zv 4sX+oGnfd1mvnq+SrtQmmr1PdsGxq/H4hj0SCeocRRehZmeqNP55sCXDDDCTsMI6 8lcsqxUdeURc5yTDUU2p6f4KGp46LJWawD0M19jP1luADq8WtDD2A9VBPMIENr+K bZtx4ve8crqh07+PM932JCULkOMi9K0uwSP4pjB9auyO74EbKrLSnPCIbeF2c89A l5PFw1HM6hw7KkEu9IuceA/i6llv+MO1NI3jPekJIt7UFjAImRavJdOx/nlqMkN4 eSDM4WpzkRU/DcOZOUTvbtFzcksOvkHecAciw8IkMn1FJAJ+HYkm+GTKa+TxDgT5 mB00HcdJ/hqH/fPdbBJAnO8uLloLOJt6ORk28DVMDRvOuRSz5zTVOmGcQe2NoD+6 kYWyyud8fQ5OyRhzEHZCKaeE11eJ60pf0ErmXLjSiYdZZHkGjqts228eGvLBTlIv NsIGZLGmj0ltdzouFgwC9mEir14/tVx1VgpCj3EmKX/8V8Bn5XQGByf4viheOsI3 y9NtenIeimi4CDM1If0+sqGlh84Q9CftVHVplvCdIuBqYH13wBU= =o3I2 -----END PGP SIGNATURE----- --Sig_/jyshal6RFUSLHw.fxdLtHKd--