From nobody Mon Apr 29 05:50:17 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) 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=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1501863421514149.41169067356213; Fri, 4 Aug 2017 09:17:01 -0700 (PDT) Received: from localhost ([::1]:51938 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ddfHX-0005oN-S2 for importer@patchew.org; Fri, 04 Aug 2017 12:16:59 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:54631) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ddeJN-0005UL-4T for qemu-devel@nongnu.org; Fri, 04 Aug 2017 11:14:51 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ddeJJ-0007BG-TE for qemu-devel@nongnu.org; Fri, 04 Aug 2017 11:14:48 -0400 Received: from mailhub.sw.ru ([195.214.232.25]:35883 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 1ddeJJ-00077k-IE for qemu-devel@nongnu.org; Fri, 04 Aug 2017 11:14:45 -0400 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 v74FEeG5003061; Fri, 4 Aug 2017 18:14:40 +0300 (MSK) From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org, qemu-devel@nongnu.org Date: Fri, 4 Aug 2017 18:14:24 +0300 Message-Id: <20170804151440.320927-2-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.11.1 In-Reply-To: <20170804151440.320927-1-vsementsov@virtuozzo.com> References: <20170804151440.320927-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 01/17] nbd/client: fix nbd_opt_go 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, 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_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Do not send NBD_OPT_ABORT to the broken server. After sending NBD_REP_ACK on NBD_OPT_GO server is most probably in transmission phase, when option sending is finished. Signed-off-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Eric Blake --- nbd/client.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/nbd/client.c b/nbd/client.c index 0a17de80b5..f1c16b588f 100644 --- a/nbd/client.c +++ b/nbd/client.c @@ -399,12 +399,10 @@ static int nbd_opt_go(QIOChannel *ioc, const char *wa= ntname, phase, but make sure it sent flags */ if (len) { error_setg(errp, "server sent invalid NBD_REP_ACK"); - nbd_send_opt_abort(ioc); return -1; } if (!info->flags) { error_setg(errp, "broken server omitted NBD_INFO_EXPORT"); - nbd_send_opt_abort(ioc); return -1; } trace_nbd_opt_go_success(); --=20 2.11.1 From nobody Mon Apr 29 05:50:17 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) 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=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1501863885348258.4374421200097; Fri, 4 Aug 2017 09:24:45 -0700 (PDT) Received: from localhost ([::1]:53334 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ddfP1-0004v1-Qc for importer@patchew.org; Fri, 04 Aug 2017 12:24:43 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:54735) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ddeJP-0005Vw-94 for qemu-devel@nongnu.org; Fri, 04 Aug 2017 11:14:53 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ddeJL-0007FU-Vp for qemu-devel@nongnu.org; Fri, 04 Aug 2017 11:14:51 -0400 Received: from mailhub.sw.ru ([195.214.232.25]:20173 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 1ddeJL-0007Bb-Gq for qemu-devel@nongnu.org; Fri, 04 Aug 2017 11:14:47 -0400 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 v74FEeG6003061; Fri, 4 Aug 2017 18:14:40 +0300 (MSK) From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org, qemu-devel@nongnu.org Date: Fri, 4 Aug 2017 18:14:25 +0300 Message-Id: <20170804151440.320927-3-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.11.1 In-Reply-To: <20170804151440.320927-1-vsementsov@virtuozzo.com> References: <20170804151440.320927-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 02/17] nbd/client: refactor nbd_read_eof 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, 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_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Refactor nbd_read_eof to return 1 on success, 0 on eof, when no data was read and <0 for other cases, because returned size of read data is not actually used. Signed-off-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Eric Blake --- nbd/nbd-internal.h | 34 +++++++++++++++++++++++++--------- nbd/client.c | 5 ----- tests/qemu-iotests/083.out | 4 ++-- 3 files changed, 27 insertions(+), 16 deletions(-) diff --git a/nbd/nbd-internal.h b/nbd/nbd-internal.h index 396ddb4d3e..3fb0b6098a 100644 --- a/nbd/nbd-internal.h +++ b/nbd/nbd-internal.h @@ -77,21 +77,37 @@ #define NBD_ESHUTDOWN 108 =20 /* nbd_read_eof - * Tries to read @size bytes from @ioc. Returns number of bytes actually r= ead. - * May return a value >=3D 0 and < size only on EOF, i.e. when iteratively= called - * qio_channel_readv() returns 0. So, there is no need to call nbd_read_eof - * iteratively. + * Tries to read @size bytes from @ioc. + * Returns 1 on success + * 0 on eof, when no data was read (errp is not set) + * -EINVAL on eof, when some data < @size was read until eof + * < 0 on read fail */ -static inline ssize_t nbd_read_eof(QIOChannel *ioc, void *buffer, size_t s= ize, - Error **errp) +static inline int nbd_read_eof(QIOChannel *ioc, void *buffer, size_t size, + Error **errp) { struct iovec iov =3D { .iov_base =3D buffer, .iov_len =3D size }; + ssize_t ret; + /* Sockets are kept in blocking mode in the negotiation phase. After * that, a non-readable socket simply means that another thread stole * our request/reply. Synchronization is done with recv_coroutine, so * that this is coroutine-safe. */ - return nbd_rwv(ioc, &iov, 1, size, true, errp); + + assert(size > 0); + + ret =3D nbd_rwv(ioc, &iov, 1, size, true, errp); + if (ret <=3D 0) { + return ret; + } + + if (ret !=3D size) { + error_setg(errp, "End of file"); + return -EINVAL; + } + + return 1; } =20 /* nbd_read @@ -100,9 +116,9 @@ static inline ssize_t nbd_read_eof(QIOChannel *ioc, voi= d *buffer, size_t size, static inline int nbd_read(QIOChannel *ioc, void *buffer, size_t size, Error **errp) { - ssize_t ret =3D nbd_read_eof(ioc, buffer, size, errp); + int ret =3D nbd_read_eof(ioc, buffer, size, errp); =20 - if (ret >=3D 0 && ret !=3D size) { + if (ret =3D=3D 0) { ret =3D -EINVAL; error_setg(errp, "End of file"); } diff --git a/nbd/client.c b/nbd/client.c index f1c16b588f..4556056daa 100644 --- a/nbd/client.c +++ b/nbd/client.c @@ -925,11 +925,6 @@ ssize_t nbd_receive_reply(QIOChannel *ioc, NBDReply *r= eply, Error **errp) return ret; } =20 - if (ret !=3D sizeof(buf)) { - error_setg(errp, "read failed"); - return -EINVAL; - } - /* Reply [ 0 .. 3] magic (NBD_REPLY_MAGIC) [ 4 .. 7] error (0 =3D=3D no error) diff --git a/tests/qemu-iotests/083.out b/tests/qemu-iotests/083.out index a24c6bfece..d3bea1b2f5 100644 --- a/tests/qemu-iotests/083.out +++ b/tests/qemu-iotests/083.out @@ -69,12 +69,12 @@ read failed: Input/output error =20 =3D=3D=3D Check disconnect 4 reply =3D=3D=3D =20 -read failed +End of file read failed: Input/output error =20 =3D=3D=3D Check disconnect 8 reply =3D=3D=3D =20 -read failed +End of file read failed: Input/output error =20 =3D=3D=3D Check disconnect before data =3D=3D=3D --=20 2.11.1 From nobody Mon Apr 29 05:50:17 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) 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=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1501863151466197.34935249460318; Fri, 4 Aug 2017 09:12:31 -0700 (PDT) Received: from localhost ([::1]:51842 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ddfDC-0001f9-1H for importer@patchew.org; Fri, 04 Aug 2017 12:12:30 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:54644) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ddeJN-0005UP-Cs for qemu-devel@nongnu.org; Fri, 04 Aug 2017 11:14:51 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ddeJK-0007CZ-Pr for qemu-devel@nongnu.org; Fri, 04 Aug 2017 11:14:49 -0400 Received: from mailhub.sw.ru ([195.214.232.25]:44736 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 1ddeJK-00077Z-CE for qemu-devel@nongnu.org; Fri, 04 Aug 2017 11:14:46 -0400 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 v74FEeG7003061; Fri, 4 Aug 2017 18:14:40 +0300 (MSK) From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org, qemu-devel@nongnu.org Date: Fri, 4 Aug 2017 18:14:26 +0300 Message-Id: <20170804151440.320927-4-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.11.1 In-Reply-To: <20170804151440.320927-1-vsementsov@virtuozzo.com> References: <20170804151440.320927-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 03/17] nbd/client: refactor nbd_receive_reply 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, 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_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Refactor nbd_receive_reply to return 1 on success, 0 on eof, when no data was read and <0 for other cases, because returned size of read data is not actually used. Signed-off-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Eric Blake --- include/block/nbd.h | 2 +- nbd/client.c | 12 +++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/include/block/nbd.h b/include/block/nbd.h index 9c3d0a5868..f7450608b4 100644 --- a/include/block/nbd.h +++ b/include/block/nbd.h @@ -164,7 +164,7 @@ int nbd_receive_negotiate(QIOChannel *ioc, const char *= name, int nbd_init(int fd, QIOChannelSocket *sioc, NBDExportInfo *info, Error **errp); ssize_t nbd_send_request(QIOChannel *ioc, NBDRequest *request); -ssize_t nbd_receive_reply(QIOChannel *ioc, NBDReply *reply, Error **errp); +int nbd_receive_reply(QIOChannel *ioc, NBDReply *reply, Error **errp); int nbd_client(int fd); int nbd_disconnect(int fd); =20 diff --git a/nbd/client.c b/nbd/client.c index 4556056daa..a1758a1931 100644 --- a/nbd/client.c +++ b/nbd/client.c @@ -914,11 +914,16 @@ ssize_t nbd_send_request(QIOChannel *ioc, NBDRequest = *request) return nbd_write(ioc, buf, sizeof(buf), NULL); } =20 -ssize_t nbd_receive_reply(QIOChannel *ioc, NBDReply *reply, Error **errp) +/* nbd_receive_reply + * Returns 1 on success + * 0 on eof, when no data was read from @ioc (errp is not set) + * < 0 on fail + */ +int nbd_receive_reply(QIOChannel *ioc, NBDReply *reply, Error **errp) { uint8_t buf[NBD_REPLY_SIZE]; uint32_t magic; - ssize_t ret; + int ret; =20 ret =3D nbd_read_eof(ioc, buf, sizeof(buf), errp); if (ret <=3D 0) { @@ -948,6 +953,7 @@ ssize_t nbd_receive_reply(QIOChannel *ioc, NBDReply *re= ply, Error **errp) error_setg(errp, "invalid magic (got 0x%" PRIx32 ")", magic); return -EINVAL; } - return sizeof(buf); + + return 1; } =20 --=20 2.11.1 From nobody Mon Apr 29 05:50:17 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) 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=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1501862201293361.0885797045603; Fri, 4 Aug 2017 08:56:41 -0700 (PDT) Received: from localhost ([::1]:49807 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ddexq-0001fa-9r for importer@patchew.org; Fri, 04 Aug 2017 11:56:38 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:54660) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ddeJN-0005UU-SW for qemu-devel@nongnu.org; Fri, 04 Aug 2017 11:14:52 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ddeJL-0007Ey-RK for qemu-devel@nongnu.org; Fri, 04 Aug 2017 11:14:49 -0400 Received: from mailhub.sw.ru ([195.214.232.25]:14774 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 1ddeJL-0007Ba-Eu for qemu-devel@nongnu.org; Fri, 04 Aug 2017 11:14:47 -0400 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 v74FEeG8003061; Fri, 4 Aug 2017 18:14:40 +0300 (MSK) From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org, qemu-devel@nongnu.org Date: Fri, 4 Aug 2017 18:14:27 +0300 Message-Id: <20170804151440.320927-5-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.11.1 In-Reply-To: <20170804151440.320927-1-vsementsov@virtuozzo.com> References: <20170804151440.320927-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 04/17] nbd/client: fix nbd_send_request to return int 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, 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_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Fix nbd_send_request to return int, as it returns a return value of nbd_write (which is int), and the only user of nbd_send_request's return value (nbd_co_send_request) consider it as int too. Signed-off-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Eric Blake --- include/block/nbd.h | 2 +- nbd/client.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/include/block/nbd.h b/include/block/nbd.h index f7450608b4..040cdd2e60 100644 --- a/include/block/nbd.h +++ b/include/block/nbd.h @@ -163,7 +163,7 @@ int nbd_receive_negotiate(QIOChannel *ioc, const char *= name, Error **errp); int nbd_init(int fd, QIOChannelSocket *sioc, NBDExportInfo *info, Error **errp); -ssize_t nbd_send_request(QIOChannel *ioc, NBDRequest *request); +int nbd_send_request(QIOChannel *ioc, NBDRequest *request); int nbd_receive_reply(QIOChannel *ioc, NBDReply *reply, Error **errp); int nbd_client(int fd); int nbd_disconnect(int fd); diff --git a/nbd/client.c b/nbd/client.c index a1758a1931..00cba45853 100644 --- a/nbd/client.c +++ b/nbd/client.c @@ -896,7 +896,7 @@ int nbd_disconnect(int fd) } #endif =20 -ssize_t nbd_send_request(QIOChannel *ioc, NBDRequest *request) +int nbd_send_request(QIOChannel *ioc, NBDRequest *request) { uint8_t buf[NBD_REQUEST_SIZE]; =20 --=20 2.11.1 From nobody Mon Apr 29 05:50:17 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) 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=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1501862985683855.6848035975272; Fri, 4 Aug 2017 09:09:45 -0700 (PDT) Received: from localhost ([::1]:51775 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ddfAW-0006xb-4C for importer@patchew.org; Fri, 04 Aug 2017 12:09:44 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:54625) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ddeJN-0005UG-3g for qemu-devel@nongnu.org; Fri, 04 Aug 2017 11:14:51 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ddeJK-0007CJ-N3 for qemu-devel@nongnu.org; Fri, 04 Aug 2017 11:14:48 -0400 Received: from mailhub.sw.ru ([195.214.232.25]:18224 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 1ddeJK-00077p-BJ for qemu-devel@nongnu.org; Fri, 04 Aug 2017 11:14:46 -0400 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 v74FEeG9003061; Fri, 4 Aug 2017 18:14:40 +0300 (MSK) From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org, qemu-devel@nongnu.org Date: Fri, 4 Aug 2017 18:14:28 +0300 Message-Id: <20170804151440.320927-6-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.11.1 In-Reply-To: <20170804151440.320927-1-vsementsov@virtuozzo.com> References: <20170804151440.320927-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 05/17] block/nbd-client: get rid of ssize_t 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, 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_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Use int variable for nbd_co_send_request return value (as nbd_co_send_request returns int). Signed-off-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Eric Blake --- block/nbd-client.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/block/nbd-client.c b/block/nbd-client.c index 25dd28406b..dc19894a7c 100644 --- a/block/nbd-client.c +++ b/block/nbd-client.c @@ -214,7 +214,7 @@ int nbd_client_co_preadv(BlockDriverState *bs, uint64_t= offset, .len =3D bytes, }; NBDReply reply; - ssize_t ret; + int ret; =20 assert(bytes <=3D NBD_MAX_BUFFER_SIZE); assert(!flags); @@ -239,7 +239,7 @@ int nbd_client_co_pwritev(BlockDriverState *bs, uint64_= t offset, .len =3D bytes, }; NBDReply reply; - ssize_t ret; + int ret; =20 if (flags & BDRV_REQ_FUA) { assert(client->info.flags & NBD_FLAG_SEND_FUA); @@ -261,7 +261,7 @@ int nbd_client_co_pwritev(BlockDriverState *bs, uint64_= t offset, int nbd_client_co_pwrite_zeroes(BlockDriverState *bs, int64_t offset, int bytes, BdrvRequestFlags flags) { - ssize_t ret; + int ret; NBDClientSession *client =3D nbd_get_client_session(bs); NBDRequest request =3D { .type =3D NBD_CMD_WRITE_ZEROES, @@ -297,7 +297,7 @@ int nbd_client_co_flush(BlockDriverState *bs) NBDClientSession *client =3D nbd_get_client_session(bs); NBDRequest request =3D { .type =3D NBD_CMD_FLUSH }; NBDReply reply; - ssize_t ret; + int ret; =20 if (!(client->info.flags & NBD_FLAG_SEND_FLUSH)) { return 0; @@ -325,7 +325,7 @@ int nbd_client_co_pdiscard(BlockDriverState *bs, int64_= t offset, int bytes) .len =3D bytes, }; NBDReply reply; - ssize_t ret; + int ret; =20 if (!(client->info.flags & NBD_FLAG_SEND_TRIM)) { return 0; --=20 2.11.1 From nobody Mon Apr 29 05:50:17 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) 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=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1501863497608161.58509443195578; Fri, 4 Aug 2017 09:18:17 -0700 (PDT) Received: from localhost ([::1]:52084 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ddfIl-0006uA-Nv for importer@patchew.org; Fri, 04 Aug 2017 12:18:15 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:54705) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ddeJO-0005VN-RY for qemu-devel@nongnu.org; Fri, 04 Aug 2017 11:14:52 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ddeJM-0007Fu-9R for qemu-devel@nongnu.org; Fri, 04 Aug 2017 11:14:50 -0400 Received: from mailhub.sw.ru ([195.214.232.25]:25795 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 1ddeJK-0007AG-Cp for qemu-devel@nongnu.org; Fri, 04 Aug 2017 11:14:48 -0400 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 v74FEeGA003061; Fri, 4 Aug 2017 18:14:40 +0300 (MSK) From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org, qemu-devel@nongnu.org Date: Fri, 4 Aug 2017 18:14:29 +0300 Message-Id: <20170804151440.320927-7-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.11.1 In-Reply-To: <20170804151440.320927-1-vsementsov@virtuozzo.com> References: <20170804151440.320927-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 06/17] block/nbd-client: fix nbd_read_reply_entry 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, 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_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Set reply.handle to 0 on error path to prevent normal path of nbd_co_receive_reply. Signed-off-by: Vladimir Sementsov-Ogievskiy --- block/nbd-client.c | 1 + 1 file changed, 1 insertion(+) diff --git a/block/nbd-client.c b/block/nbd-client.c index dc19894a7c..0c88d84de6 100644 --- a/block/nbd-client.c +++ b/block/nbd-client.c @@ -107,6 +107,7 @@ static coroutine_fn void nbd_read_reply_entry(void *opa= que) qemu_coroutine_yield(); } =20 + s->reply.handle =3D 0; nbd_recv_coroutines_enter_all(s); s->read_reply_co =3D NULL; } --=20 2.11.1 From nobody Mon Apr 29 05:50:17 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) 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=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1501863648561321.33107446063286; Fri, 4 Aug 2017 09:20:48 -0700 (PDT) Received: from localhost ([::1]:52317 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ddfLC-0000ox-MW for importer@patchew.org; Fri, 04 Aug 2017 12:20:46 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:54759) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ddeJP-0005Wp-Se for qemu-devel@nongnu.org; Fri, 04 Aug 2017 11:14:53 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ddeJM-0007GW-R8 for qemu-devel@nongnu.org; Fri, 04 Aug 2017 11:14:51 -0400 Received: from mailhub.sw.ru ([195.214.232.25]:47517 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 1ddeJM-00078e-Aq for qemu-devel@nongnu.org; Fri, 04 Aug 2017 11:14:48 -0400 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 v74FEeGB003061; Fri, 4 Aug 2017 18:14:40 +0300 (MSK) From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org, qemu-devel@nongnu.org Date: Fri, 4 Aug 2017 18:14:30 +0300 Message-Id: <20170804151440.320927-8-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.11.1 In-Reply-To: <20170804151440.320927-1-vsementsov@virtuozzo.com> References: <20170804151440.320927-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 07/17] block/nbd-client: refactor request send/receive 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, 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_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Move nbd_co_receive_reply and nbd_coroutine_end calls into nbd_co_send_request and rename the latter to just nbd_co_request. This removes code duplications in nbd_client_co_{pwrite,pread,...} functions. Also this is needed for further refactoring. Signed-off-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Eric Blake --- block/nbd-client.c | 89 ++++++++++++++++++++------------------------------= ---- 1 file changed, 33 insertions(+), 56 deletions(-) diff --git a/block/nbd-client.c b/block/nbd-client.c index 0c88d84de6..c9ade9b517 100644 --- a/block/nbd-client.c +++ b/block/nbd-client.c @@ -112,12 +112,20 @@ static coroutine_fn void nbd_read_reply_entry(void *o= paque) s->read_reply_co =3D NULL; } =20 -static int nbd_co_send_request(BlockDriverState *bs, - NBDRequest *request, - QEMUIOVector *qiov) +static void nbd_co_receive_reply(NBDClientSession *s, + NBDRequest *request, + NBDReply *reply, + QEMUIOVector *qiov); +static void nbd_coroutine_end(BlockDriverState *bs, + NBDRequest *request); + +static int nbd_co_request(BlockDriverState *bs, + NBDRequest *request, + QEMUIOVector *qiov) { NBDClientSession *s =3D nbd_get_client_session(bs); int rc, ret, i; + NBDReply reply; =20 qemu_co_mutex_lock(&s->send_mutex); while (s->in_flight =3D=3D MAX_NBD_REQUESTS) { @@ -141,7 +149,8 @@ static int nbd_co_send_request(BlockDriverState *bs, return -EPIPE; } =20 - if (qiov) { + if (request->type =3D=3D NBD_CMD_WRITE) { + assert(qiov !=3D NULL); qio_channel_set_cork(s->ioc, true); rc =3D nbd_send_request(s->ioc, request); if (rc >=3D 0) { @@ -156,6 +165,21 @@ static int nbd_co_send_request(BlockDriverState *bs, rc =3D nbd_send_request(s->ioc, request); } qemu_co_mutex_unlock(&s->send_mutex); + + if (rc < 0) { + goto out; + } + + if (request->type =3D=3D NBD_CMD_READ) { + assert(qiov !=3D NULL); + } else { + qiov =3D NULL; + } + nbd_co_receive_reply(s, request, &reply, qiov); + rc =3D -reply.error; + +out: + nbd_coroutine_end(bs, request); return rc; } =20 @@ -208,26 +232,16 @@ static void nbd_coroutine_end(BlockDriverState *bs, int nbd_client_co_preadv(BlockDriverState *bs, uint64_t offset, uint64_t bytes, QEMUIOVector *qiov, int flags) { - NBDClientSession *client =3D nbd_get_client_session(bs); NBDRequest request =3D { .type =3D NBD_CMD_READ, .from =3D offset, .len =3D bytes, }; - NBDReply reply; - int ret; =20 assert(bytes <=3D NBD_MAX_BUFFER_SIZE); assert(!flags); =20 - ret =3D nbd_co_send_request(bs, &request, NULL); - if (ret < 0) { - reply.error =3D -ret; - } else { - nbd_co_receive_reply(client, &request, &reply, qiov); - } - nbd_coroutine_end(bs, &request); - return -reply.error; + return nbd_co_request(bs, &request, qiov); } =20 int nbd_client_co_pwritev(BlockDriverState *bs, uint64_t offset, @@ -239,8 +253,6 @@ int nbd_client_co_pwritev(BlockDriverState *bs, uint64_= t offset, .from =3D offset, .len =3D bytes, }; - NBDReply reply; - int ret; =20 if (flags & BDRV_REQ_FUA) { assert(client->info.flags & NBD_FLAG_SEND_FUA); @@ -249,27 +261,18 @@ int nbd_client_co_pwritev(BlockDriverState *bs, uint6= 4_t offset, =20 assert(bytes <=3D NBD_MAX_BUFFER_SIZE); =20 - ret =3D nbd_co_send_request(bs, &request, qiov); - if (ret < 0) { - reply.error =3D -ret; - } else { - nbd_co_receive_reply(client, &request, &reply, NULL); - } - nbd_coroutine_end(bs, &request); - return -reply.error; + return nbd_co_request(bs, &request, qiov); } =20 int nbd_client_co_pwrite_zeroes(BlockDriverState *bs, int64_t offset, int bytes, BdrvRequestFlags flags) { - int ret; NBDClientSession *client =3D nbd_get_client_session(bs); NBDRequest request =3D { .type =3D NBD_CMD_WRITE_ZEROES, .from =3D offset, .len =3D bytes, }; - NBDReply reply; =20 if (!(client->info.flags & NBD_FLAG_SEND_WRITE_ZEROES)) { return -ENOTSUP; @@ -283,22 +286,13 @@ int nbd_client_co_pwrite_zeroes(BlockDriverState *bs,= int64_t offset, request.flags |=3D NBD_CMD_FLAG_NO_HOLE; } =20 - ret =3D nbd_co_send_request(bs, &request, NULL); - if (ret < 0) { - reply.error =3D -ret; - } else { - nbd_co_receive_reply(client, &request, &reply, NULL); - } - nbd_coroutine_end(bs, &request); - return -reply.error; + return nbd_co_request(bs, &request, NULL); } =20 int nbd_client_co_flush(BlockDriverState *bs) { NBDClientSession *client =3D nbd_get_client_session(bs); NBDRequest request =3D { .type =3D NBD_CMD_FLUSH }; - NBDReply reply; - int ret; =20 if (!(client->info.flags & NBD_FLAG_SEND_FLUSH)) { return 0; @@ -307,14 +301,7 @@ int nbd_client_co_flush(BlockDriverState *bs) request.from =3D 0; request.len =3D 0; =20 - ret =3D nbd_co_send_request(bs, &request, NULL); - if (ret < 0) { - reply.error =3D -ret; - } else { - nbd_co_receive_reply(client, &request, &reply, NULL); - } - nbd_coroutine_end(bs, &request); - return -reply.error; + return nbd_co_request(bs, &request, NULL); } =20 int nbd_client_co_pdiscard(BlockDriverState *bs, int64_t offset, int bytes) @@ -325,22 +312,12 @@ int nbd_client_co_pdiscard(BlockDriverState *bs, int6= 4_t offset, int bytes) .from =3D offset, .len =3D bytes, }; - NBDReply reply; - int ret; =20 if (!(client->info.flags & NBD_FLAG_SEND_TRIM)) { return 0; } =20 - ret =3D nbd_co_send_request(bs, &request, NULL); - if (ret < 0) { - reply.error =3D -ret; - } else { - nbd_co_receive_reply(client, &request, &reply, NULL); - } - nbd_coroutine_end(bs, &request); - return -reply.error; - + return nbd_co_request(bs, &request, NULL); } =20 void nbd_client_detach_aio_context(BlockDriverState *bs) --=20 2.11.1 From nobody Mon Apr 29 05:50:17 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) 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=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1501863314315181.41942402330517; Fri, 4 Aug 2017 09:15:14 -0700 (PDT) Received: from localhost ([::1]:51926 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ddfFo-0003w6-In for importer@patchew.org; Fri, 04 Aug 2017 12:15:12 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:54647) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ddeJN-0005UR-Hg for qemu-devel@nongnu.org; Fri, 04 Aug 2017 11:14:51 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ddeJL-0007FG-UR for qemu-devel@nongnu.org; Fri, 04 Aug 2017 11:14:49 -0400 Received: from mailhub.sw.ru ([195.214.232.25]:9706 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 1ddeJL-00079Z-GE for qemu-devel@nongnu.org; Fri, 04 Aug 2017 11:14:47 -0400 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 v74FEeGC003061; Fri, 4 Aug 2017 18:14:40 +0300 (MSK) From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org, qemu-devel@nongnu.org Date: Fri, 4 Aug 2017 18:14:31 +0300 Message-Id: <20170804151440.320927-9-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.11.1 In-Reply-To: <20170804151440.320927-1-vsementsov@virtuozzo.com> References: <20170804151440.320927-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 08/17] block/nbd-client: rename nbd_recv_coroutines_enter_all 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, 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_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Rename nbd_recv_coroutines_enter_all to nbd_recv_coroutines_wake_all, as it most probably just add all recv coroutines into co_queue_wakeup, not directly enter them. Signed-off-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Eric Blake --- block/nbd-client.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/block/nbd-client.c b/block/nbd-client.c index c9ade9b517..8ad2264a40 100644 --- a/block/nbd-client.c +++ b/block/nbd-client.c @@ -34,7 +34,7 @@ #define HANDLE_TO_INDEX(bs, handle) ((handle) ^ ((uint64_t)(intptr_t)bs)) #define INDEX_TO_HANDLE(bs, index) ((index) ^ ((uint64_t)(intptr_t)bs)) =20 -static void nbd_recv_coroutines_enter_all(NBDClientSession *s) +static void nbd_recv_coroutines_wake_all(NBDClientSession *s) { int i; =20 @@ -108,7 +108,7 @@ static coroutine_fn void nbd_read_reply_entry(void *opa= que) } =20 s->reply.handle =3D 0; - nbd_recv_coroutines_enter_all(s); + nbd_recv_coroutines_wake_all(s); s->read_reply_co =3D NULL; } =20 --=20 2.11.1 From nobody Mon Apr 29 05:50:17 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) 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=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1501863337234489.36048846889685; Fri, 4 Aug 2017 09:15:37 -0700 (PDT) Received: from localhost ([::1]:51934 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ddfGB-0004Ln-O3 for importer@patchew.org; Fri, 04 Aug 2017 12:15:35 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:54651) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ddeJN-0005US-M4 for qemu-devel@nongnu.org; Fri, 04 Aug 2017 11:14:52 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ddeJL-0007DP-3n for qemu-devel@nongnu.org; Fri, 04 Aug 2017 11:14:49 -0400 Received: from mailhub.sw.ru ([195.214.232.25]:37279 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 1ddeJK-0007AQ-Iw for qemu-devel@nongnu.org; Fri, 04 Aug 2017 11:14:46 -0400 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 v74FEeGD003061; Fri, 4 Aug 2017 18:14:41 +0300 (MSK) From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org, qemu-devel@nongnu.org Date: Fri, 4 Aug 2017 18:14:32 +0300 Message-Id: <20170804151440.320927-10-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.11.1 In-Reply-To: <20170804151440.320927-1-vsementsov@virtuozzo.com> References: <20170804151440.320927-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 09/17] block/nbd-client: move nbd_co_receive_reply content into nbd_co_request 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, 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_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Move code from nbd_co_receive_reply into nbd_co_request. This simplify things, makes further refactoring possible. Also, a function starting with qemu_coroutine_yield is weird. Signed-off-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Eric Blake --- block/nbd-client.c | 33 ++++++++++----------------------- 1 file changed, 10 insertions(+), 23 deletions(-) diff --git a/block/nbd-client.c b/block/nbd-client.c index 8ad2264a40..db1d7025fa 100644 --- a/block/nbd-client.c +++ b/block/nbd-client.c @@ -112,10 +112,6 @@ static coroutine_fn void nbd_read_reply_entry(void *op= aque) s->read_reply_co =3D NULL; } =20 -static void nbd_co_receive_reply(NBDClientSession *s, - NBDRequest *request, - NBDReply *reply, - QEMUIOVector *qiov); static void nbd_coroutine_end(BlockDriverState *bs, NBDRequest *request); =20 @@ -175,39 +171,30 @@ static int nbd_co_request(BlockDriverState *bs, } else { qiov =3D NULL; } - nbd_co_receive_reply(s, request, &reply, qiov); - rc =3D -reply.error; - -out: - nbd_coroutine_end(bs, request); - return rc; -} - -static void nbd_co_receive_reply(NBDClientSession *s, - NBDRequest *request, - NBDReply *reply, - QEMUIOVector *qiov) -{ - int ret; =20 /* Wait until we're woken up by nbd_read_reply_entry. */ qemu_coroutine_yield(); - *reply =3D s->reply; - if (reply->handle !=3D request->handle || + reply =3D s->reply; + if (reply.handle !=3D request->handle || !s->ioc) { - reply->error =3D EIO; + reply.error =3D EIO; } else { - if (qiov && reply->error =3D=3D 0) { + if (qiov && reply.error =3D=3D 0) { ret =3D nbd_rwv(s->ioc, qiov->iov, qiov->niov, request->len, t= rue, NULL); if (ret !=3D request->len) { - reply->error =3D EIO; + reply.error =3D EIO; } } =20 /* Tell the read handler to read another header. */ s->reply.handle =3D 0; } + rc =3D -reply.error; + +out: + nbd_coroutine_end(bs, request); + return rc; } =20 static void nbd_coroutine_end(BlockDriverState *bs, --=20 2.11.1 From nobody Mon Apr 29 05:50:17 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) 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=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1501861887847232.8407310988382; Fri, 4 Aug 2017 08:51:27 -0700 (PDT) Received: from localhost ([::1]:49396 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ddesn-0004zR-0E for importer@patchew.org; Fri, 04 Aug 2017 11:51:25 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:54630) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ddeJN-0005UK-3l for qemu-devel@nongnu.org; Fri, 04 Aug 2017 11:14:51 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ddeJL-0007DE-2L for qemu-devel@nongnu.org; Fri, 04 Aug 2017 11:14:48 -0400 Received: from mailhub.sw.ru ([195.214.232.25]:1711 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 1ddeJK-0007AF-J6 for qemu-devel@nongnu.org; Fri, 04 Aug 2017 11:14:46 -0400 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 v74FEeGE003061; Fri, 4 Aug 2017 18:14:41 +0300 (MSK) From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org, qemu-devel@nongnu.org Date: Fri, 4 Aug 2017 18:14:33 +0300 Message-Id: <20170804151440.320927-11-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.11.1 In-Reply-To: <20170804151440.320927-1-vsementsov@virtuozzo.com> References: <20170804151440.320927-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 10/17] block/nbd-client: move nbd_coroutine_end content into nbd_co_request 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, 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_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Move code from nbd_coroutine_end into nbd_co_request. The function nbd_coroutine_end is not needed separately, also it is better to have in_flight-- in nbd_co_request as in_flight++ lives in nbd_co_request too. Signed-off-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Eric Blake --- block/nbd-client.c | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/block/nbd-client.c b/block/nbd-client.c index db1d7025fa..d6965d24db 100644 --- a/block/nbd-client.c +++ b/block/nbd-client.c @@ -112,9 +112,6 @@ static coroutine_fn void nbd_read_reply_entry(void *opa= que) s->read_reply_co =3D NULL; } =20 -static void nbd_coroutine_end(BlockDriverState *bs, - NBDRequest *request); - static int nbd_co_request(BlockDriverState *bs, NBDRequest *request, QEMUIOVector *qiov) @@ -193,16 +190,6 @@ static int nbd_co_request(BlockDriverState *bs, rc =3D -reply.error; =20 out: - nbd_coroutine_end(bs, request); - return rc; -} - -static void nbd_coroutine_end(BlockDriverState *bs, - NBDRequest *request) -{ - NBDClientSession *s =3D nbd_get_client_session(bs); - int i =3D HANDLE_TO_INDEX(s, request->handle); - s->recv_coroutine[i] =3D NULL; =20 /* Kick the read_reply_co to get the next reply. */ @@ -214,6 +201,7 @@ static void nbd_coroutine_end(BlockDriverState *bs, s->in_flight--; qemu_co_queue_next(&s->free_sema); qemu_co_mutex_unlock(&s->send_mutex); + return rc; } =20 int nbd_client_co_preadv(BlockDriverState *bs, uint64_t offset, --=20 2.11.1 From nobody Mon Apr 29 05:50:17 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) 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=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1501863010040834.7104923319653; Fri, 4 Aug 2017 09:10:10 -0700 (PDT) Received: from localhost ([::1]:51830 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ddfAu-0007O8-ID for importer@patchew.org; Fri, 04 Aug 2017 12:10:08 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:54627) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ddeJN-0005UH-3J for qemu-devel@nongnu.org; Fri, 04 Aug 2017 11:14:51 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ddeJK-0007CS-P6 for qemu-devel@nongnu.org; Fri, 04 Aug 2017 11:14:48 -0400 Received: from mailhub.sw.ru ([195.214.232.25]:40618 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 1ddeJK-00078n-BP for qemu-devel@nongnu.org; Fri, 04 Aug 2017 11:14:46 -0400 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 v74FEeGF003061; Fri, 4 Aug 2017 18:14:41 +0300 (MSK) From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org, qemu-devel@nongnu.org Date: Fri, 4 Aug 2017 18:14:34 +0300 Message-Id: <20170804151440.320927-12-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.11.1 In-Reply-To: <20170804151440.320927-1-vsementsov@virtuozzo.com> References: <20170804151440.320927-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 11/17] block/nbd-client: fix nbd_co_request: set s->reply.handle to 0 on error 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, 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_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" We set s->reply.handle to 0 on one error path and don't set on another. For consistancy and to avoid assert in nbd_read_reply_entry let's set s->reply.handle to 0 in case of wrong handle too. Signed-off-by: Vladimir Sementsov-Ogievskiy --- block/nbd-client.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/block/nbd-client.c b/block/nbd-client.c index d6965d24db..b84cab4079 100644 --- a/block/nbd-client.c +++ b/block/nbd-client.c @@ -183,13 +183,13 @@ static int nbd_co_request(BlockDriverState *bs, reply.error =3D EIO; } } - - /* Tell the read handler to read another header. */ - s->reply.handle =3D 0; } rc =3D -reply.error; =20 out: + /* Tell the read handler to read another header. */ + s->reply.handle =3D 0; + s->recv_coroutine[i] =3D NULL; =20 /* Kick the read_reply_co to get the next reply. */ --=20 2.11.1 From nobody Mon Apr 29 05:50:17 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) 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=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1501863259334202.6034087974466; Fri, 4 Aug 2017 09:14:19 -0700 (PDT) Received: from localhost ([::1]:51924 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ddfEv-0003Ah-P0 for importer@patchew.org; Fri, 04 Aug 2017 12:14:17 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:54628) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ddeJN-0005UI-3T for qemu-devel@nongnu.org; Fri, 04 Aug 2017 11:14:51 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ddeJL-0007Dx-9k for qemu-devel@nongnu.org; Fri, 04 Aug 2017 11:14:48 -0400 Received: from mailhub.sw.ru ([195.214.232.25]:45565 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 1ddeJK-0007BC-V9 for qemu-devel@nongnu.org; Fri, 04 Aug 2017 11:14:47 -0400 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 v74FEeGG003061; Fri, 4 Aug 2017 18:14:41 +0300 (MSK) From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org, qemu-devel@nongnu.org Date: Fri, 4 Aug 2017 18:14:35 +0300 Message-Id: <20170804151440.320927-13-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.11.1 In-Reply-To: <20170804151440.320927-1-vsementsov@virtuozzo.com> References: <20170804151440.320927-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 12/17] block/nbd-client: refactor nbd_co_request 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, 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_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Reduce nesting, get rid of extra variable. Signed-off-by: Vladimir Sementsov-Ogievskiy --- block/nbd-client.c | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/block/nbd-client.c b/block/nbd-client.c index b84cab4079..d6145c7db0 100644 --- a/block/nbd-client.c +++ b/block/nbd-client.c @@ -118,7 +118,6 @@ static int nbd_co_request(BlockDriverState *bs, { NBDClientSession *s =3D nbd_get_client_session(bs); int rc, ret, i; - NBDReply reply; =20 qemu_co_mutex_lock(&s->send_mutex); while (s->in_flight =3D=3D MAX_NBD_REQUESTS) { @@ -171,20 +170,20 @@ static int nbd_co_request(BlockDriverState *bs, =20 /* Wait until we're woken up by nbd_read_reply_entry. */ qemu_coroutine_yield(); - reply =3D s->reply; - if (reply.handle !=3D request->handle || - !s->ioc) { - reply.error =3D EIO; - } else { - if (qiov && reply.error =3D=3D 0) { - ret =3D nbd_rwv(s->ioc, qiov->iov, qiov->niov, request->len, t= rue, - NULL); - if (ret !=3D request->len) { - reply.error =3D EIO; - } + if (s->reply.handle !=3D request->handle || !s->ioc) { + rc =3D -EIO; + goto out; + } + + if (qiov && s->reply.error =3D=3D 0) { + ret =3D nbd_rwv(s->ioc, qiov->iov, qiov->niov, request->len, true,= NULL); + if (ret !=3D request->len) { + rc =3D -EIO; + goto out; } } - rc =3D -reply.error; + + rc =3D -s->reply.error; =20 out: /* Tell the read handler to read another header. */ --=20 2.11.1 From nobody Mon Apr 29 05:50:17 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) 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=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1501863473249156.95514153814895; Fri, 4 Aug 2017 09:17:53 -0700 (PDT) Received: from localhost ([::1]:52018 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ddfIN-0006Zz-K6 for importer@patchew.org; Fri, 04 Aug 2017 12:17:51 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:54629) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ddeJN-0005UJ-3V for qemu-devel@nongnu.org; Fri, 04 Aug 2017 11:14:52 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ddeJK-0007Cc-RL for qemu-devel@nongnu.org; Fri, 04 Aug 2017 11:14:48 -0400 Received: from mailhub.sw.ru ([195.214.232.25]:8392 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 1ddeJK-00078W-ED for qemu-devel@nongnu.org; Fri, 04 Aug 2017 11:14:46 -0400 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 v74FEeGH003061; Fri, 4 Aug 2017 18:14:41 +0300 (MSK) From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org, qemu-devel@nongnu.org Date: Fri, 4 Aug 2017 18:14:36 +0300 Message-Id: <20170804151440.320927-14-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.11.1 In-Reply-To: <20170804151440.320927-1-vsementsov@virtuozzo.com> References: <20170804151440.320927-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 13/17] block/nbd-client: refactor NBDClientSession.recv_coroutine 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, 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_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Move from recv_coroutine[i] to requests[i].co. This is needed for further refactoring, new fields will be added to created structure. Signed-off-by: Vladimir Sementsov-Ogievskiy --- block/nbd-client.h | 4 +++- block/nbd-client.c | 20 ++++++++++---------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/block/nbd-client.h b/block/nbd-client.h index df80771357..48e2559df6 100644 --- a/block/nbd-client.h +++ b/block/nbd-client.h @@ -27,7 +27,9 @@ typedef struct NBDClientSession { Coroutine *read_reply_co; int in_flight; =20 - Coroutine *recv_coroutine[MAX_NBD_REQUESTS]; + struct { + Coroutine *co; + } requests[MAX_NBD_REQUESTS]; NBDReply reply; } NBDClientSession; =20 diff --git a/block/nbd-client.c b/block/nbd-client.c index d6145c7db0..5eb126c399 100644 --- a/block/nbd-client.c +++ b/block/nbd-client.c @@ -39,8 +39,8 @@ static void nbd_recv_coroutines_wake_all(NBDClientSession= *s) int i; =20 for (i =3D 0; i < MAX_NBD_REQUESTS; i++) { - if (s->recv_coroutine[i]) { - aio_co_wake(s->recv_coroutine[i]); + if (s->requests[i].co) { + aio_co_wake(s->requests[i].co); } } } @@ -88,22 +88,22 @@ static coroutine_fn void nbd_read_reply_entry(void *opa= que) * one coroutine is called until the reply finishes. */ i =3D HANDLE_TO_INDEX(s, s->reply.handle); - if (i >=3D MAX_NBD_REQUESTS || !s->recv_coroutine[i]) { + if (i >=3D MAX_NBD_REQUESTS || !s->requests[i].co) { break; } =20 - /* We're woken up by the recv_coroutine itself. Note that there + /* We're woken up by the receiving coroutine itself. Note that th= ere * is no race between yielding and reentering read_reply_co. This * is because: * - * - if recv_coroutine[i] runs on the same AioContext, it is only + * - if requests[i].co runs on the same AioContext, it is only * entered after we yield * - * - if recv_coroutine[i] runs on a different AioContext, reenteri= ng + * - if requests[i].co runs on a different AioContext, reentering * read_reply_co happens through a bottom half, which can only * run after we yield. */ - aio_co_wake(s->recv_coroutine[i]); + aio_co_wake(s->requests[i].co); qemu_coroutine_yield(); } =20 @@ -126,8 +126,8 @@ static int nbd_co_request(BlockDriverState *bs, s->in_flight++; =20 for (i =3D 0; i < MAX_NBD_REQUESTS; i++) { - if (s->recv_coroutine[i] =3D=3D NULL) { - s->recv_coroutine[i] =3D qemu_coroutine_self(); + if (s->requests[i].co =3D=3D NULL) { + s->requests[i].co =3D qemu_coroutine_self(); break; } } @@ -189,7 +189,7 @@ out: /* Tell the read handler to read another header. */ s->reply.handle =3D 0; =20 - s->recv_coroutine[i] =3D NULL; + s->requests[i].co =3D NULL; =20 /* Kick the read_reply_co to get the next reply. */ if (s->read_reply_co) { --=20 2.11.1 From nobody Mon Apr 29 05:50:17 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) 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=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1501863176307246.47090577603478; Fri, 4 Aug 2017 09:12:56 -0700 (PDT) Received: from localhost ([::1]:51855 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ddfDa-00021N-Hv for importer@patchew.org; Fri, 04 Aug 2017 12:12:54 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:54632) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ddeJN-0005UM-4U for qemu-devel@nongnu.org; Fri, 04 Aug 2017 11:14:51 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ddeJL-0007DV-4W for qemu-devel@nongnu.org; Fri, 04 Aug 2017 11:14:48 -0400 Received: from mailhub.sw.ru ([195.214.232.25]:15385 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 1ddeJK-0007Ac-JY for qemu-devel@nongnu.org; Fri, 04 Aug 2017 11:14:46 -0400 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 v74FEeGI003061; Fri, 4 Aug 2017 18:14:41 +0300 (MSK) From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org, qemu-devel@nongnu.org Date: Fri, 4 Aug 2017 18:14:37 +0300 Message-Id: <20170804151440.320927-15-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.11.1 In-Reply-To: <20170804151440.320927-1-vsementsov@virtuozzo.com> References: <20170804151440.320927-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 14/17] block/nbd-client: exit reply-reading coroutine on incorrect handle 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, 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_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Check reply-handle =3D=3D request-handle in the same place, where recv coroutine number is calculated from reply->handle and it's correctness checked - in nbd_read_reply_entry. Also finish nbd_read_reply_entry in case of reply-handle !=3D request-handle in the same way as in case of incorrect reply-handle. Signed-off-by: Vladimir Sementsov-Ogievskiy --- block/nbd-client.h | 1 + block/nbd-client.c | 9 +++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/block/nbd-client.h b/block/nbd-client.h index 48e2559df6..aa36be8950 100644 --- a/block/nbd-client.h +++ b/block/nbd-client.h @@ -29,6 +29,7 @@ typedef struct NBDClientSession { =20 struct { Coroutine *co; + NBDRequest *request; } requests[MAX_NBD_REQUESTS]; NBDReply reply; } NBDClientSession; diff --git a/block/nbd-client.c b/block/nbd-client.c index 5eb126c399..0e12db4be3 100644 --- a/block/nbd-client.c +++ b/block/nbd-client.c @@ -88,7 +88,9 @@ static coroutine_fn void nbd_read_reply_entry(void *opaqu= e) * one coroutine is called until the reply finishes. */ i =3D HANDLE_TO_INDEX(s, s->reply.handle); - if (i >=3D MAX_NBD_REQUESTS || !s->requests[i].co) { + if (i >=3D MAX_NBD_REQUESTS || !s->requests[i].co || + s->reply.handle !=3D s->requests[i].request->handle) + { break; } =20 @@ -135,6 +137,7 @@ static int nbd_co_request(BlockDriverState *bs, g_assert(qemu_in_coroutine()); assert(i < MAX_NBD_REQUESTS); request->handle =3D INDEX_TO_HANDLE(s, i); + s->requests[i].request =3D request; =20 if (!s->ioc) { qemu_co_mutex_unlock(&s->send_mutex); @@ -170,11 +173,13 @@ static int nbd_co_request(BlockDriverState *bs, =20 /* Wait until we're woken up by nbd_read_reply_entry. */ qemu_coroutine_yield(); - if (s->reply.handle !=3D request->handle || !s->ioc) { + if (!s->ioc || s->reply.handle =3D=3D 0) { rc =3D -EIO; goto out; } =20 + assert(s->reply.handle =3D=3D request->handle); + if (qiov && s->reply.error =3D=3D 0) { ret =3D nbd_rwv(s->ioc, qiov->iov, qiov->niov, request->len, true,= NULL); if (ret !=3D request->len) { --=20 2.11.1 From nobody Mon Apr 29 05:50:17 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) 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=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1501863586949400.518706291904; Fri, 4 Aug 2017 09:19:46 -0700 (PDT) Received: from localhost ([::1]:52284 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ddfKC-00089W-IR for importer@patchew.org; Fri, 04 Aug 2017 12:19:44 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:54643) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ddeJN-0005UO-CY for qemu-devel@nongnu.org; Fri, 04 Aug 2017 11:14:51 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ddeJL-0007EC-CJ for qemu-devel@nongnu.org; Fri, 04 Aug 2017 11:14:49 -0400 Received: from mailhub.sw.ru ([195.214.232.25]:34226 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 1ddeJK-00079J-V6 for qemu-devel@nongnu.org; Fri, 04 Aug 2017 11:14:47 -0400 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 v74FEeGJ003061; Fri, 4 Aug 2017 18:14:41 +0300 (MSK) From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org, qemu-devel@nongnu.org Date: Fri, 4 Aug 2017 18:14:38 +0300 Message-Id: <20170804151440.320927-16-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.11.1 In-Reply-To: <20170804151440.320927-1-vsementsov@virtuozzo.com> References: <20170804151440.320927-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 15/17] block/nbd-client: refactor reading reply 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, 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_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Read the whole reply in one place - in nbd_read_reply_entry. Signed-off-by: Vladimir Sementsov-Ogievskiy --- block/nbd-client.h | 1 + block/nbd-client.c | 27 +++++++++++++-------------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/block/nbd-client.h b/block/nbd-client.h index aa36be8950..0f84ccc073 100644 --- a/block/nbd-client.h +++ b/block/nbd-client.h @@ -30,6 +30,7 @@ typedef struct NBDClientSession { struct { Coroutine *co; NBDRequest *request; + QEMUIOVector *qiov; } requests[MAX_NBD_REQUESTS]; NBDReply reply; } NBDClientSession; diff --git a/block/nbd-client.c b/block/nbd-client.c index 0e12db4be3..61780c5df9 100644 --- a/block/nbd-client.c +++ b/block/nbd-client.c @@ -94,6 +94,18 @@ static coroutine_fn void nbd_read_reply_entry(void *opaq= ue) break; } =20 + if (s->reply.error =3D=3D 0 && + s->requests[i].request->type =3D=3D NBD_CMD_READ) + { + assert(s->requests[i].qiov !=3D NULL); + ret =3D nbd_rwv(s->ioc, s->requests[i].qiov->iov, + s->requests[i].qiov->niov, + s->requests[i].request->len, true, NULL); + if (ret !=3D s->requests[i].request->len) { + break; + } + } + /* We're woken up by the receiving coroutine itself. Note that th= ere * is no race between yielding and reentering read_reply_co. This * is because: @@ -138,6 +150,7 @@ static int nbd_co_request(BlockDriverState *bs, assert(i < MAX_NBD_REQUESTS); request->handle =3D INDEX_TO_HANDLE(s, i); s->requests[i].request =3D request; + s->requests[i].qiov =3D qiov; =20 if (!s->ioc) { qemu_co_mutex_unlock(&s->send_mutex); @@ -165,12 +178,6 @@ static int nbd_co_request(BlockDriverState *bs, goto out; } =20 - if (request->type =3D=3D NBD_CMD_READ) { - assert(qiov !=3D NULL); - } else { - qiov =3D NULL; - } - /* Wait until we're woken up by nbd_read_reply_entry. */ qemu_coroutine_yield(); if (!s->ioc || s->reply.handle =3D=3D 0) { @@ -180,14 +187,6 @@ static int nbd_co_request(BlockDriverState *bs, =20 assert(s->reply.handle =3D=3D request->handle); =20 - if (qiov && s->reply.error =3D=3D 0) { - ret =3D nbd_rwv(s->ioc, qiov->iov, qiov->niov, request->len, true,= NULL); - if (ret !=3D request->len) { - rc =3D -EIO; - goto out; - } - } - rc =3D -s->reply.error; =20 out: --=20 2.11.1 From nobody Mon Apr 29 05:50:17 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) 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=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1501862350020477.7721991071568; Fri, 4 Aug 2017 08:59:10 -0700 (PDT) Received: from localhost ([::1]:50268 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ddf0G-0004YT-H9 for importer@patchew.org; Fri, 04 Aug 2017 11:59:08 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:54685) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ddeJO-0005Uz-En for qemu-devel@nongnu.org; Fri, 04 Aug 2017 11:14:52 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ddeJL-0007F8-Sj for qemu-devel@nongnu.org; Fri, 04 Aug 2017 11:14:50 -0400 Received: from mailhub.sw.ru ([195.214.232.25]:19287 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 1ddeJL-0007Bw-G9 for qemu-devel@nongnu.org; Fri, 04 Aug 2017 11:14:47 -0400 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 v74FEeGK003061; Fri, 4 Aug 2017 18:14:41 +0300 (MSK) From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org, qemu-devel@nongnu.org Date: Fri, 4 Aug 2017 18:14:39 +0300 Message-Id: <20170804151440.320927-17-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.11.1 In-Reply-To: <20170804151440.320927-1-vsementsov@virtuozzo.com> References: <20170804151440.320927-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 16/17] block/nbd-client: drop reply field from NBDClientSession 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, 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_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Drop 'reply' from NBDClientSession. It's usage is not very transparent: 1. it is used to deliver error to receiving coroutine, and receiving coroutine must save or handle it somehow and then zero out it in NBDClientSession. 2. it is used to inform receiving coroutines that nbd_read_reply_entry is out for some reason (error or disconnect) To simplify this scheme: - drop NBDClientSession.reply - introduce NBDClientSession.requests[...].ret for (1) - introduce NBDClientSession.eio_to_all for (2) Signed-off-by: Vladimir Sementsov-Ogievskiy --- block/nbd-client.h | 3 ++- block/nbd-client.c | 25 ++++++++++--------------- 2 files changed, 12 insertions(+), 16 deletions(-) diff --git a/block/nbd-client.h b/block/nbd-client.h index 0f84ccc073..0b0aa67342 100644 --- a/block/nbd-client.h +++ b/block/nbd-client.h @@ -31,8 +31,9 @@ typedef struct NBDClientSession { Coroutine *co; NBDRequest *request; QEMUIOVector *qiov; + int ret; } requests[MAX_NBD_REQUESTS]; - NBDReply reply; + bool eio_to_all; } NBDClientSession; =20 NBDClientSession *nbd_get_client_session(BlockDriverState *bs); diff --git a/block/nbd-client.c b/block/nbd-client.c index 61780c5df9..7c151b3dd3 100644 --- a/block/nbd-client.c +++ b/block/nbd-client.c @@ -72,10 +72,10 @@ static coroutine_fn void nbd_read_reply_entry(void *opa= que) uint64_t i; int ret; Error *local_err =3D NULL; + NBDReply reply; =20 for (;;) { - assert(s->reply.handle =3D=3D 0); - ret =3D nbd_receive_reply(s->ioc, &s->reply, &local_err); + ret =3D nbd_receive_reply(s->ioc, &reply, &local_err); if (ret < 0) { error_report_err(local_err); } @@ -87,16 +87,14 @@ static coroutine_fn void nbd_read_reply_entry(void *opa= que) * handler acts as a synchronization point and ensures that only * one coroutine is called until the reply finishes. */ - i =3D HANDLE_TO_INDEX(s, s->reply.handle); + i =3D HANDLE_TO_INDEX(s, reply.handle); if (i >=3D MAX_NBD_REQUESTS || !s->requests[i].co || - s->reply.handle !=3D s->requests[i].request->handle) + reply.handle !=3D s->requests[i].request->handle) { break; } =20 - if (s->reply.error =3D=3D 0 && - s->requests[i].request->type =3D=3D NBD_CMD_READ) - { + if (reply.error =3D=3D 0 && s->requests[i].request->type =3D=3D NB= D_CMD_READ) { assert(s->requests[i].qiov !=3D NULL); ret =3D nbd_rwv(s->ioc, s->requests[i].qiov->iov, s->requests[i].qiov->niov, @@ -106,6 +104,8 @@ static coroutine_fn void nbd_read_reply_entry(void *opa= que) } } =20 + s->requests[i].ret =3D -reply.error; + /* We're woken up by the receiving coroutine itself. Note that th= ere * is no race between yielding and reentering read_reply_co. This * is because: @@ -121,7 +121,7 @@ static coroutine_fn void nbd_read_reply_entry(void *opa= que) qemu_coroutine_yield(); } =20 - s->reply.handle =3D 0; + s->eio_to_all =3D true; nbd_recv_coroutines_wake_all(s); s->read_reply_co =3D NULL; } @@ -180,19 +180,14 @@ static int nbd_co_request(BlockDriverState *bs, =20 /* Wait until we're woken up by nbd_read_reply_entry. */ qemu_coroutine_yield(); - if (!s->ioc || s->reply.handle =3D=3D 0) { + if (!s->ioc || s->eio_to_all) { rc =3D -EIO; goto out; } =20 - assert(s->reply.handle =3D=3D request->handle); - - rc =3D -s->reply.error; + rc =3D s->requests[i].ret; =20 out: - /* Tell the read handler to read another header. */ - s->reply.handle =3D 0; - s->requests[i].co =3D NULL; =20 /* Kick the read_reply_co to get the next reply. */ --=20 2.11.1 From nobody Mon Apr 29 05:50:17 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) 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=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1501862043401851.8509580245815; Fri, 4 Aug 2017 08:54:03 -0700 (PDT) Received: from localhost ([::1]:49673 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ddevJ-0007OT-QL for importer@patchew.org; Fri, 04 Aug 2017 11:54:01 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:54663) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ddeJN-0005UX-Un for qemu-devel@nongnu.org; Fri, 04 Aug 2017 11:14:52 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ddeJL-0007ES-F6 for qemu-devel@nongnu.org; Fri, 04 Aug 2017 11:14:49 -0400 Received: from mailhub.sw.ru ([195.214.232.25]:33097 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 1ddeJL-00079O-1X for qemu-devel@nongnu.org; Fri, 04 Aug 2017 11:14:47 -0400 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 v74FEeGL003061; Fri, 4 Aug 2017 18:14:41 +0300 (MSK) From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org, qemu-devel@nongnu.org Date: Fri, 4 Aug 2017 18:14:40 +0300 Message-Id: <20170804151440.320927-18-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.11.1 In-Reply-To: <20170804151440.320927-1-vsementsov@virtuozzo.com> References: <20170804151440.320927-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 17/17] block/nbd-client: always return EIO on and after the first io channel error 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, 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_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Do not communicate after the first error to avoid communicating throught broken channel. The only exclusion is try to send NBD_CMD_DISC anyway on in nbd_client_close. Signed-off-by: Vladimir Sementsov-Ogievskiy --- block/nbd-client.c | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/block/nbd-client.c b/block/nbd-client.c index 7c151b3dd3..6109abf8a7 100644 --- a/block/nbd-client.c +++ b/block/nbd-client.c @@ -49,6 +49,8 @@ static void nbd_teardown_connection(BlockDriverState *bs) { NBDClientSession *client =3D nbd_get_client_session(bs); =20 + client->eio_to_all =3D true; + if (!client->ioc) { /* Already closed */ return; } @@ -75,11 +77,15 @@ static coroutine_fn void nbd_read_reply_entry(void *opa= que) NBDReply reply; =20 for (;;) { + if (s->eio_to_all) { + break; + } + ret =3D nbd_receive_reply(s->ioc, &reply, &local_err); if (ret < 0) { error_report_err(local_err); } - if (ret <=3D 0) { + if (ret <=3D 0 || s->eio_to_all) { break; } =20 @@ -99,7 +105,7 @@ static coroutine_fn void nbd_read_reply_entry(void *opaq= ue) ret =3D nbd_rwv(s->ioc, s->requests[i].qiov->iov, s->requests[i].qiov->niov, s->requests[i].request->len, true, NULL); - if (ret !=3D s->requests[i].request->len) { + if (ret !=3D s->requests[i].request->len || s->eio_to_all) { break; } } @@ -133,6 +139,10 @@ static int nbd_co_request(BlockDriverState *bs, NBDClientSession *s =3D nbd_get_client_session(bs); int rc, ret, i; =20 + if (s->eio_to_all) { + return -EIO; + } + qemu_co_mutex_lock(&s->send_mutex); while (s->in_flight =3D=3D MAX_NBD_REQUESTS) { qemu_co_queue_wait(&s->free_sema, &s->send_mutex); @@ -152,16 +162,16 @@ static int nbd_co_request(BlockDriverState *bs, s->requests[i].request =3D request; s->requests[i].qiov =3D qiov; =20 - if (!s->ioc) { + if (s->eio_to_all) { qemu_co_mutex_unlock(&s->send_mutex); - return -EPIPE; + return -EIO; } =20 if (request->type =3D=3D NBD_CMD_WRITE) { assert(qiov !=3D NULL); qio_channel_set_cork(s->ioc, true); rc =3D nbd_send_request(s->ioc, request); - if (rc >=3D 0) { + if (rc =3D=3D 0 && !s->eio_to_all) { ret =3D nbd_rwv(s->ioc, qiov->iov, qiov->niov, request->len, f= alse, NULL); if (ret !=3D request->len) { @@ -174,13 +184,16 @@ static int nbd_co_request(BlockDriverState *bs, } qemu_co_mutex_unlock(&s->send_mutex); =20 + if (s->eio_to_all) { + rc =3D -EIO; + } if (rc < 0) { goto out; } =20 /* Wait until we're woken up by nbd_read_reply_entry. */ qemu_coroutine_yield(); - if (!s->ioc || s->eio_to_all) { + if (s->eio_to_all) { rc =3D -EIO; goto out; } @@ -335,6 +348,7 @@ int nbd_client_init(BlockDriverState *bs, logout("session init %s\n", export); qio_channel_set_blocking(QIO_CHANNEL(sioc), true, NULL); =20 + client->eio_to_all =3D false; client->info.request_sizes =3D true; ret =3D nbd_receive_negotiate(QIO_CHANNEL(sioc), export, tlscreds, hostname, --=20 2.11.1