From nobody Sun May 5 01:03:23 2024 Delivered-To: importer@patchew.org Received-SPF: temperror (zoho.com: Error in retrieving data from DNS) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=temperror (zoho.com: Error in retrieving data from DNS) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (208.118.235.17 [208.118.235.17]) by mx.zohomail.com with SMTPS id 1510242248611633.5787472659492; Thu, 9 Nov 2017 07:44:08 -0800 (PST) Received: from localhost ([::1]:37555 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eCoze-00028K-QP for importer@patchew.org; Thu, 09 Nov 2017 10:43:50 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:48480) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eCowv-0000Yi-1z for qemu-devel@nongnu.org; Thu, 09 Nov 2017 10:41:02 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eCowq-0006yf-5p for qemu-devel@nongnu.org; Thu, 09 Nov 2017 10:41:01 -0500 Received: from mailhub.sw.ru ([195.214.232.25]:46397 helo=relay.sw.ru) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1eCowp-0006wq-QG for qemu-devel@nongnu.org; Thu, 09 Nov 2017 10:40:56 -0500 Received: from kvm.sw.ru (msk-vpn.virtuozzo.com [195.214.232.6]) by relay.sw.ru (8.13.4/8.13.4) with ESMTP id vA9Fen69032756; Thu, 9 Nov 2017 18:40:50 +0300 (MSK) From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org, qemu-devel@nongnu.org Date: Thu, 9 Nov 2017 18:40:48 +0300 Message-Id: <20171109154049.42386-2-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.11.1 In-Reply-To: <20171109154049.42386-1-vsementsov@virtuozzo.com> References: <20171109154049.42386-1-vsementsov@virtuozzo.com> X-detected-operating-system: by eggs.gnu.org: OpenBSD 3.x [fuzzy] X-Received-From: 195.214.232.25 Subject: [Qemu-devel] [PATCH 1/2] nbd/server: add additional assert to nbd_export_put X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: kwolf@redhat.com, vsementsov@virtuozzo.com, armbru@redhat.com, mreitz@redhat.com, den@openvz.org, pbonzini@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_6 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" This place is not obvious, nbd_export_close may theoretically reduce refcount to 0. It may happen if someone calls nbd_export_put on named export not through nbd_export_set_name when refcount is 1. Signed-off-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Eric Blake Reviewed-by: Max Reitz --- nbd/server.c | 1 + 1 file changed, 1 insertion(+) diff --git a/nbd/server.c b/nbd/server.c index 70b40ed27e..2f2e05943f 100644 --- a/nbd/server.c +++ b/nbd/server.c @@ -1179,6 +1179,7 @@ void nbd_export_put(NBDExport *exp) nbd_export_close(exp); } =20 + assert(exp->refcount > 0); if (--exp->refcount =3D=3D 0) { assert(exp->name =3D=3D NULL); assert(exp->description =3D=3D NULL); --=20 2.11.1 From nobody Sun May 5 01:03:23 2024 Delivered-To: importer@patchew.org Received-SPF: temperror (zoho.com: Error in retrieving data from DNS) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=temperror (zoho.com: Error in retrieving data from DNS) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (208.118.235.17 [208.118.235.17]) by mx.zohomail.com with SMTPS id 151024216367355.86325985387259; Thu, 9 Nov 2017 07:42:43 -0800 (PST) Received: from localhost ([::1]:37549 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eCoyE-0001AH-OL for importer@patchew.org; Thu, 09 Nov 2017 10:42:22 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:48479) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eCowv-0000Yh-22 for qemu-devel@nongnu.org; Thu, 09 Nov 2017 10:41:02 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eCowq-0006yV-5h for qemu-devel@nongnu.org; Thu, 09 Nov 2017 10:41:01 -0500 Received: from mailhub.sw.ru ([195.214.232.25]:42957 helo=relay.sw.ru) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1eCowp-0006wy-QO for qemu-devel@nongnu.org; Thu, 09 Nov 2017 10:40:56 -0500 Received: from kvm.sw.ru (msk-vpn.virtuozzo.com [195.214.232.6]) by relay.sw.ru (8.13.4/8.13.4) with ESMTP id vA9Fen6A032756; Thu, 9 Nov 2017 18:40:50 +0300 (MSK) From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org, qemu-devel@nongnu.org Date: Thu, 9 Nov 2017 18:40:49 +0300 Message-Id: <20171109154049.42386-3-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.11.1 In-Reply-To: <20171109154049.42386-1-vsementsov@virtuozzo.com> References: <20171109154049.42386-1-vsementsov@virtuozzo.com> X-detected-operating-system: by eggs.gnu.org: OpenBSD 3.x [fuzzy] X-Received-From: 195.214.232.25 Subject: [Qemu-devel] [PATCH 2/2] qmp: add nbd-server-remove X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: kwolf@redhat.com, vsementsov@virtuozzo.com, armbru@redhat.com, mreitz@redhat.com, den@openvz.org, pbonzini@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_6 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Add command for export removing. It is needed for cases when we don't want to keep export after the operation on it was completed. The other example is temporary node, created with blockdev-add. If we want to delete it we should firstly remove corresponding NBD export. Signed-off-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Eric Blake --- qapi/block.json | 20 ++++++++++++++++++++ blockdev-nbd.c | 27 +++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/qapi/block.json b/qapi/block.json index f093fa3f27..1827940717 100644 --- a/qapi/block.json +++ b/qapi/block.json @@ -223,6 +223,26 @@ { 'command': 'nbd-server-add', 'data': {'device': 'str', '*writable': 'boo= l'} } =20 ## +# @nbd-server-remove: +# +# Stop exporting block node through QEMU's embedded NBD server. +# +# @device: The device name or node name of the exported node. Should be eq= ual +# to @device parameter for corresponding nbd-server-add command c= all. +# +# @force: Whether active connections to the export should be closed. If th= is +# parameter is false the export is only removed from named exports= list, +# so new connetions are impossible and it would be freed after all +# clients are disconnected (default false). +# +# Returns: error if the server is not running or the device is not marked = for +# export. +# +# Since: 2.12 +## +{ 'command': 'nbd-server-remove', 'data': {'device': 'str', '*force': 'boo= l'} } + +## # @nbd-server-stop: # # Stop QEMU's embedded NBD server, and unregister all devices previously diff --git a/blockdev-nbd.c b/blockdev-nbd.c index 28f551a7b0..5f66951c33 100644 --- a/blockdev-nbd.c +++ b/blockdev-nbd.c @@ -203,6 +203,33 @@ void qmp_nbd_server_add(const char *device, bool has_w= ritable, bool writable, nbd_export_put(exp); } =20 +void qmp_nbd_server_remove(const char *device, bool has_force, bool force, + Error **errp) +{ + NBDExport *exp; + + if (!nbd_server) { + error_setg(errp, "NBD server not running"); + return; + } + + exp =3D nbd_export_find(device); + if (exp =3D=3D NULL) { + error_setg(errp, "'%s' is not exported", device); + return; + } + + if (!has_force) { + force =3D false; + } + + if (force) { + nbd_export_close(exp); + } else { + nbd_export_set_name(exp, NULL); + } +} + void qmp_nbd_server_stop(Error **errp) { nbd_export_close_all(); --=20 2.11.1