From nobody Sat Nov 15 13:20:54 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=none dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1595268517; cv=pass; d=zohomail.com; s=zohoarc; b=AP+JUqdGFoWf0Zdwz9fTiSa5OmEKoU2rkI/Jobt/+HdFOy6A4EoR+d585WZARXcjs9/Q3Aqdsafw+scnK7e+WiWyXpTzLWNdgrR3DJV9mKIrO1XSu8054txcxF+3wZwuKxJ7GVnYydeJOGoxgefgrqa7OuEjHusFlpEmHt+QEAg= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1595268517; h=Content-Type:Content-Transfer-Encoding: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=PG6cTf5Qit+1icUrpH22YVcK+nC3ckzQEiuctJkqkoI=; b=XJUk1khnRbYo/Of1h11I9hUiImZ4sBTR9vTRGBuA8oRAkQXhSk5ZgBRcnWy9Pf7rC8SE5iIx+3fDCtV7swYYhXwhSxVaV+k9GIYkJtWOymjbIbAe4w8tnUEdppl8fvqsXT50JEkGIMVlEIONSn+MV38jtIrOBeVs3giGgBYhawc= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; 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; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass 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 15952685170002.5987884591344255; Mon, 20 Jul 2020 11:08:37 -0700 (PDT) Received: from localhost ([::1]:35574 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jxaDL-0006d8-JX for importer@patchew.org; Mon, 20 Jul 2020 14:08:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58458) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jxaCT-0005Zz-BL; Mon, 20 Jul 2020 14:07:41 -0400 Received: from mail-eopbgr30115.outbound.protection.outlook.com ([40.107.3.115]:44342 helo=EUR03-AM5-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jxaCR-0001VM-QF; Mon, 20 Jul 2020 14:07:41 -0400 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM6PR08MB4342.eurprd08.prod.outlook.com (2603:10a6:20b:b4::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3195.17; Mon, 20 Jul 2020 18:07:34 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::a408:2f0f:bc6c:d312]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::a408:2f0f:bc6c:d312%3]) with mapi id 15.20.3195.025; Mon, 20 Jul 2020 18:07:34 +0000 Received: from localhost.localdomain (185.215.60.171) by AM0PR06CA0130.eurprd06.prod.outlook.com (2603:10a6:208:ab::35) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3195.17 via Frontend Transport; Mon, 20 Jul 2020 18:07:33 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=OASEzoWfdwv3eCCQQxS/hkg8FcHhSG0N9fdBooX7xhY9UexOJofR7ewL7dElVAWGMos1VFMM76UpgOzPVgq1m/YnpB1u5rruO64ENwRRW9nShC36lXriNvGZGyg+B924s2lAoRdGLLi5kqm98Qu8o6sNpS0Umxqv5tIhx01KOtwO5V4WiNtXiGZAK3y05KYhTPmKkJQ5IyahVluLMyNZag536ASTTI339rKFsPChJShZjOxHP2rBF2/qLn1FXrd3aNpRWzuT4mLOHh5KnTFCvOdnQQwgE9byATMX77dfLrgyiYPqbcTRY2iKcORSgsx2FW4MqC3W7m82f/pNcGb4bQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=PG6cTf5Qit+1icUrpH22YVcK+nC3ckzQEiuctJkqkoI=; b=NrpzNISAhAvmHZMBh9E5mGA4xSoTOcR49TIVoRBm8/qny1PPkGy269vx+ZVntNigfoEz9LBHzuAhCI8uZa0Xz5CK6WWL84w8RdKGkhJqBMZw/9AOrCbi7SUjBUC47qby9jummReMsfhpOg+O8nN8cF/H/oBODzWjEuCaajhL6FRBhXQiNt4WTi6d/BabhnyNVYSvRyCHdo/vsjUo3fT2mQ6IcigIig8bs9T7wVXHa7u5lJy/22VGg7A6dr/cu/rLbX18u+KwgBVQShv7faHW+52xzQ4ITxIwsz3wk+nwiW/dzn5zo1KuOgFaRHw2w7nT2owYyiUnejgpeoRyY5vdXQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=PG6cTf5Qit+1icUrpH22YVcK+nC3ckzQEiuctJkqkoI=; b=FvYFZtDtD9Xg+Rjmqi3xGcN/2IhlhR8BXxoEsdqgCVghdrjY6x/cIcQy1AW/KT3vd10yg/c/UALvYEIs3rj/J6Xkw696FXCc5QX3imUuLSWk0XscXDZgFj3PFZNxo7bBDxhn89OAMZui1ldCtqW4roMTVucvfsMm8o/6yM50Kbc= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Subject: [PATCH 1/4] qemu-sockets: refactor inet_connect_addr Date: Mon, 20 Jul 2020 21:07:12 +0300 Message-Id: <20200720180715.10521-2-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20200720180715.10521-1-vsementsov@virtuozzo.com> References: <20200720180715.10521-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM0PR06CA0130.eurprd06.prod.outlook.com (2603:10a6:208:ab::35) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-Mailer: git-send-email 2.21.0 X-Originating-IP: [185.215.60.171] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: a346781b-fd4e-4b94-8890-08d82cd7c720 X-MS-TrafficTypeDiagnostic: AM6PR08MB4342: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:4941; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: ierSNRfsoy7y1Lul4p7Bbn6toQQfHHcYCIPsDuM3oLfvLSHYvMru6FILYAqVlKz/3KRra/T0tjcKfnyjAHK60QMcIwSKUC+2LXTo8YNEu+bLX/rpqcB6n8fVvsgLXw0sASmwZYamigRvUrETHiX7kAWi20mrU9/TpCRFn5fDUg0fggyoZ9Iv8Go/6Mkysu7fpqF/mKq5vGLdEN4r/sROfiil7UBcv7u6QtMuJvIstjD/7Sc946IJt/cc+UeYWzR2W8BlTsQfAnjHURX8I6/5KG0YnxfKRT5VJ/eMxPwVAEzX9VR/WCTDqe8TsUjfq0dmcSUmIvpfzPK6K5eL2CVsjAUHftUSjMOkvwAz+5Y+3nFAW8c7fJsahI+RTjUTGXum X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:(4636009)(396003)(136003)(376002)(346002)(366004)(39840400004)(86362001)(4326008)(107886003)(316002)(16526019)(83380400001)(6666004)(2616005)(956004)(6512007)(6916009)(6486002)(2906002)(66556008)(66476007)(66946007)(8676002)(478600001)(186003)(8936002)(52116002)(5660300002)(26005)(36756003)(6506007)(69590400007)(1076003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: ZMgINxDRV2aY1+cmcjCYE9QhCBiLXNcHjfSQXyPplE6T+rkFGgwmkdpKvxKjHU/OBIyir7aZhzAhpy+w45VQGRWBV8gVNyNxknYcC/02LSR1Cdo92V4xwhWeeXG3GdyX4B5qMJXk2dfYLOnV5Cidf9syDO73DNg8jl8TvNZpOHzgcmahOuqBlGPqt0mwUqS/4ZgH+zg+NyrFvk/Ca1CmqO1rAlH4Tlyw4SCTUe7U0GTIFRdQNrXZtjb9gWOZrnwuUD0xUNEFrI4qIHlHNcpK5VTCKpmxFVSezWuDk25i/sm3/bH45r5v9vrITSt8ZlXXkZpDrZtZuRfCUOJXqcaLwyis3Q8LdsevQkNpO7Tr71lOOp2EqdMsojVQNdkKraaynAcNeEoY+yeRYXrQMNcCkv5afzBFJNZxzetbdZpt7KIo20oQowYCi9srU6HXvz7ijG2ZEYgUVxovJ17cYNdyQJc2uq3t4LxoKqCMobosFgA= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: a346781b-fd4e-4b94-8890-08d82cd7c720 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Jul 2020 18:07:34.5275 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 8pQK53kRQCDNeghmI2Awy3wpMX7mUTmtbZdfoyIKcBA9qfDvMSTk2bET/qe+5JPbEEAo/R4zxAoZ/rQHBQykSlq190SNQdy0FRfSNUviz3s= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB4342 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=40.107.3.115; envelope-from=vsementsov@virtuozzo.com; helo=EUR03-AM5-obe.outbound.protection.outlook.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/07/20 14:07:34 X-ACL-Warn: Detected OS = Windows NT kernel [generic] [fuzzy] X-Spam_score_int: -37 X-Spam_score: -3.8 X-Spam_bar: --- X-Spam_report: (-3.8 / 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, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=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: kwolf@redhat.com, vsementsov@virtuozzo.com, berrange@redhat.com, qemu-devel@nongnu.org, mreitz@redhat.com, kraxel@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) Content-Type: text/plain; charset="utf-8" We are going to publish inet_connect_addr to be used in separate. Let's move keep_alive handling to it. Pass the whole InetSocketAddress pointer, not only keep_alive, so that future external callers will not care about internals of InetSocketAddress. While being here, remove redundant inet_connect_addr() declaration. Signed-off-by: Vladimir Sementsov-Ogievskiy --- util/qemu-sockets.c | 37 ++++++++++++++++--------------------- 1 file changed, 16 insertions(+), 21 deletions(-) diff --git a/util/qemu-sockets.c b/util/qemu-sockets.c index b37d288866..8ccf4088c2 100644 --- a/util/qemu-sockets.c +++ b/util/qemu-sockets.c @@ -354,9 +354,8 @@ listen_ok: ((rc) =3D=3D -EINPROGRESS) #endif =20 -static int inet_connect_addr(struct addrinfo *addr, Error **errp); - -static int inet_connect_addr(struct addrinfo *addr, Error **errp) +static int inet_connect_addr(InetSocketAddress *saddr, + struct addrinfo *addr, Error **errp) { int sock, rc; =20 @@ -381,6 +380,18 @@ static int inet_connect_addr(struct addrinfo *addr, Er= ror **errp) return -1; } =20 + if (saddr->keep_alive) { + int val =3D 1; + int ret =3D qemu_setsockopt(sock, SOL_SOCKET, SO_KEEPALIVE, + &val, sizeof(val)); + + if (ret < 0) { + error_setg_errno(errp, errno, "Unable to set KEEPALIVE"); + closesocket(sock); + return -1; + } + } + return sock; } =20 @@ -455,7 +466,7 @@ int inet_connect_saddr(InetSocketAddress *saddr, Error = **errp) for (e =3D res; e !=3D NULL; e =3D e->ai_next) { error_free(local_err); local_err =3D NULL; - sock =3D inet_connect_addr(e, &local_err); + sock =3D inet_connect_addr(saddr, e, &local_err); if (sock >=3D 0) { break; } @@ -463,23 +474,7 @@ int inet_connect_saddr(InetSocketAddress *saddr, Error= **errp) =20 freeaddrinfo(res); =20 - if (sock < 0) { - error_propagate(errp, local_err); - return sock; - } - - if (saddr->keep_alive) { - int val =3D 1; - int ret =3D qemu_setsockopt(sock, SOL_SOCKET, SO_KEEPALIVE, - &val, sizeof(val)); - - if (ret < 0) { - error_setg_errno(errp, errno, "Unable to set KEEPALIVE"); - close(sock); - return -1; - } - } - + error_propagate(errp, local_err); return sock; } =20 --=20 2.21.0 From nobody Sat Nov 15 13:20:54 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=none dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1595268664; cv=pass; d=zohomail.com; s=zohoarc; b=knXkznRzQQlOt35/MLqs2JrqvQEE1cEqZ/d9ygjz0RmjTJqlqLf/c9FSfDQ14IZwHvNlBJhlEiTEMnZfY8gan/p16P1D+AtjnbvbNa9Sez+7nURGajCNxiMz3C1QzxtIH3C5FAIBZFT8tbZXtfQhMRgG+BeQrdtX/4GkKCnEyz8= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1595268664; h=Content-Type:Content-Transfer-Encoding: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=foWrUqcfERZ2Cs2I47EltGvGgldT8PFtErWBP/y+hzo=; b=VvzkXW0ix4G/wYW+93qy4sX4GAi4G3D5ey46MXTTRKmjipaouQ018QtPpJ/ta5K+lC7u0u2/GlOnsTcTeU+Wld68nOorEimD8UpHqB2am90q3cc2ZBshz66eWJu58o4JjKGh5c4D/SAdGEkiKGJH7xVSiMTFOzoFpHNsF9yUqjg= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; 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; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass 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 1595268663998508.9636302268035; Mon, 20 Jul 2020 11:11:03 -0700 (PDT) Received: from localhost ([::1]:42608 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jxaFi-0001Bw-Nl for importer@patchew.org; Mon, 20 Jul 2020 14:11:02 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58472) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jxaCV-0005cg-LB; Mon, 20 Jul 2020 14:07:43 -0400 Received: from mail-eopbgr30115.outbound.protection.outlook.com ([40.107.3.115]:44342 helo=EUR03-AM5-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jxaCT-0001VM-RN; Mon, 20 Jul 2020 14:07:43 -0400 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM6PR08MB4342.eurprd08.prod.outlook.com (2603:10a6:20b:b4::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3195.17; Mon, 20 Jul 2020 18:07:35 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::a408:2f0f:bc6c:d312]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::a408:2f0f:bc6c:d312%3]) with mapi id 15.20.3195.025; Mon, 20 Jul 2020 18:07:35 +0000 Received: from localhost.localdomain (185.215.60.171) by AM0PR06CA0130.eurprd06.prod.outlook.com (2603:10a6:208:ab::35) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3195.17 via Frontend Transport; Mon, 20 Jul 2020 18:07:34 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=cWIGFsPTenXwOkI1rtBjIJOUO9KHi6BTnDUQwd6oOH62v9AGHsR38GQxQFj7Zwny1lhmDx8BgVr/ul5R+wKg2MFo9rhBMXV4lyDNwg/JRKwPf68JTEpvSeKhRIj4RJAnvUYQENbMFCiGcEn3wk7Z4AksVOObN71mDBPtHZLNT865pRktMD4PaMUVHZzgqWfLTF+S34CebqCmn5/NoGPRpF+YxsRow8LZtvnenJoao2jIxQ+QP7OQ81eFlTBYEDfgX0iZqYjcm0MogMYH3EKqaTjfKkLQ9qyqbM+5vm5zCi+nXzo0VKglkgS42pil80Lzuzjxo88LiXZQGps9QuQA1Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=foWrUqcfERZ2Cs2I47EltGvGgldT8PFtErWBP/y+hzo=; b=DNnB7SdmVc3ruJVXZ0BtGke/ZdC7tAgThDDXNgrgIybgWL/+3aYE9MXbO4jc9mfJgSSuJzZiT34nRWVmi79qrMZJ6ipb/JkQ7L+MxZV5rjn+o0hen1RwRhCXNCSpXlusq0O42BNXpRMnnpnGT95VAIR89Tn1kP2UV48iC6x1lciML9WqQ1JgChuqF74Kq5feAorvckNXhIXUewSUyF1quqSsVjLoa1TlARxsYuM4uK8PbEocEAzTCJAeWJKmvRihkAudPzLDuC6ebwC4EEFPATwmtOixR1myKsNNPqSHAarrXnFiqyI0hq4fVHxUzcmBVUz245ufnbdILuOZX4LG3g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=foWrUqcfERZ2Cs2I47EltGvGgldT8PFtErWBP/y+hzo=; b=piYvVfaV55A6gl94maZRUFH9WLQmMwOeXrsQMslzw04ICGaf3hP9OCtL+MA8L7swUzgE/7QYRfIrH3so/PjXn1fSCj5dzHpR4BNT/9KAJ/vy+ZRvcwvt/oEzHWQjMJxWZYO+GqZgF26ThrZxlvCJ4XLnKjZRhQA+UHMoY+fkNKw= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Subject: [PATCH 2/4] qemu-sockets: implement non-blocking connect interface Date: Mon, 20 Jul 2020 21:07:13 +0300 Message-Id: <20200720180715.10521-3-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20200720180715.10521-1-vsementsov@virtuozzo.com> References: <20200720180715.10521-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM0PR06CA0130.eurprd06.prod.outlook.com (2603:10a6:208:ab::35) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-Mailer: git-send-email 2.21.0 X-Originating-IP: [185.215.60.171] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: aa6d474e-326a-42d0-c12b-08d82cd7c7a0 X-MS-TrafficTypeDiagnostic: AM6PR08MB4342: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:9508; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: yis8nznOXzVKTrji15rKwVNodm9TaU9UHFtfdfzCKSrGAIJTOQ+ucQdgU6J/gqebR5F2oz75+TowqZz6bGe7/jRC5nPwsOB+JIvuQPvgnj86PKurRg86TDYJxgN0yH9gdxD0ROlaGg3hj3bIX0gPhgxsnDPqI7gUokxDpXjDDRDIuuYqXSMuyRY+qYWcp+jFL4tQ4BETk9uVB3R2OV5c/vacWsK9sUjDr7u2VqA91qZN3gqacouCFontjStfHvpQtRKXw4P5IOVKgy6H8bic/T+KLN0CxeQQ5jnOx6VQuXhMVbgNfK2LUvA0JWXDORXpnqSXcqLYX2t3bcIJCWSCWz8GkFwFsfmDVdSjg6gqIZ73IOe4q5U/ddlIBmX+/e7B X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:(4636009)(396003)(136003)(376002)(346002)(366004)(39840400004)(86362001)(4326008)(107886003)(316002)(16526019)(83380400001)(6666004)(2616005)(956004)(6512007)(6916009)(6486002)(2906002)(66556008)(66476007)(66946007)(8676002)(478600001)(186003)(8936002)(52116002)(5660300002)(26005)(36756003)(6506007)(69590400007)(1076003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: dtbsWZU8Vgp5hXiMXRVGjjAcAG3YIyBxDg4Oh9Zd+OSs6LDz241VON+z21B9gF0E2GZnbZkvLipTT6XCo1/h74qRpyrXFFg+oUeAsKBaAQii6Rpe7aFZT4pGd5RJne83ZPawdamgFQx6Iqnuu2gfTUuqGCzFHsZ+gX9ricxn0H+Y2IfWv0gYrNCA1jp74uN+AVvvVceEc1gCJE1Xif4q5mX+oO+/r0gByJkEmzPm9p8cYxi0UEZF3bqvc8qHSThAq4pMrPMLLx4mXtAHQ5erkk7GDivfoFwyY3w8whxUBEUWYQUkHxWfKBvhDEKeGNIwi06NR+0hdrYNicU0H6ZlJsYvMlrZrODA2PZMDr2/oP5pifPmE+LMKDxT11pZbP/htvNXRlTEHV5QiV13WDDTzCOjsHSbRV6u+kAetzrnTWo+RYX3g0Mb68dwDJuE8HLyjq8ja70fVpbMcmxtcm5rwkHQ69ogv3OCMeqJ3M4ec/Q= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: aa6d474e-326a-42d0-c12b-08d82cd7c7a0 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Jul 2020 18:07:35.3379 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: geIjhmv41rcIkZPkbaH90GptBXD2qmrXb8b2yx/5iflYtDex98WOUcvY24OKs+IBOBCnlA4lY9pE640Z9I3Sgtqv4VEiT4+TgBaAcA5MUrg= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB4342 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=40.107.3.115; envelope-from=vsementsov@virtuozzo.com; helo=EUR03-AM5-obe.outbound.protection.outlook.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/07/20 14:07:34 X-ACL-Warn: Detected OS = Windows NT kernel [generic] [fuzzy] X-Spam_score_int: -37 X-Spam_score: -3.8 X-Spam_bar: --- X-Spam_report: (-3.8 / 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, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=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: kwolf@redhat.com, vsementsov@virtuozzo.com, berrange@redhat.com, qemu-devel@nongnu.org, mreitz@redhat.com, kraxel@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) Content-Type: text/plain; charset="utf-8" We are going to implement non-blocking connect in io/channel-socket. non-blocking connect includes three phases: 1. connect() call 2. wait until socket is ready 3. check result io/channel-socket has wait-on-socket API (qio_channel_yield(), qio_channel_wait()), so it's a good place for [2]. Still, the whole thing is not simple, because socket connect in case of inet socket includes several connect() calls, as SocketAddress may be parsed into a list of inet addresses. And after each non-blocking connect() upper layer should have a possibility to wait on the socket. We may try to implement a kind of abstract list or iterator for "sub" addresses of SocketAddress, but all this appears to be too complex and not worth doing (as actually, only inet sockets has such a "multiple" SocketAddress). So, let's instead make public API for inet sockets themselves, to be handled in separate in upper layer, if it needs non-blocking connect. Signed-off-by: Vladimir Sementsov-Ogievskiy --- include/qemu/sockets.h | 6 ++++++ util/qemu-sockets.c | 45 +++++++++++++++++++++++++++++++++++++----- 2 files changed, 46 insertions(+), 5 deletions(-) diff --git a/include/qemu/sockets.h b/include/qemu/sockets.h index 7d1f813576..7389d6be55 100644 --- a/include/qemu/sockets.h +++ b/include/qemu/sockets.h @@ -34,6 +34,12 @@ int inet_ai_family_from_address(InetSocketAddress *addr, int inet_parse(InetSocketAddress *addr, const char *str, Error **errp); int inet_connect(const char *str, Error **errp); int inet_connect_saddr(InetSocketAddress *saddr, Error **errp); +int inet_connect_addr(InetSocketAddress *saddr, struct addrinfo *addr, + bool blocking, bool *in_progress, Error **errp); +struct addrinfo *inet_parse_connect_saddr(InetSocketAddress *saddr, + Error **errp); + +int socket_check(int fd, Error **errp); =20 NetworkAddressFamily inet_netfamily(int family); =20 diff --git a/util/qemu-sockets.c b/util/qemu-sockets.c index 8ccf4088c2..a02d00f342 100644 --- a/util/qemu-sockets.c +++ b/util/qemu-sockets.c @@ -354,11 +354,17 @@ listen_ok: ((rc) =3D=3D -EINPROGRESS) #endif =20 -static int inet_connect_addr(InetSocketAddress *saddr, - struct addrinfo *addr, Error **errp) +int inet_connect_addr(InetSocketAddress *saddr, struct addrinfo *addr, + bool blocking, bool *in_progress, Error **errp) { int sock, rc; =20 + assert(blocking =3D=3D !in_progress); + + if (in_progress) { + *in_progress =3D false; + } + sock =3D qemu_socket(addr->ai_family, addr->ai_socktype, addr->ai_prot= ocol); if (sock < 0) { error_setg_errno(errp, errno, "Failed to create socket"); @@ -366,6 +372,10 @@ static int inet_connect_addr(InetSocketAddress *saddr, } socket_set_fast_reuse(sock); =20 + if (!blocking) { + qemu_set_nonblock(sock); + } + /* connect to peer */ do { rc =3D 0; @@ -374,6 +384,13 @@ static int inet_connect_addr(InetSocketAddress *saddr, } } while (rc =3D=3D -EINTR); =20 + if (!blocking && rc =3D=3D -EINPROGRESS) { + if (in_progress) { + *in_progress =3D true; + } + return sock; + } + if (rc < 0) { error_setg_errno(errp, errno, "Failed to connect socket"); closesocket(sock); @@ -395,8 +412,26 @@ static int inet_connect_addr(InetSocketAddress *saddr, return sock; } =20 -static struct addrinfo *inet_parse_connect_saddr(InetSocketAddress *saddr, - Error **errp) +int socket_check(int fd, Error **errp) +{ + int optval; + socklen_t optlen =3D sizeof(optval); + if (qemu_getsockopt(fd, SOL_SOCKET, SO_ERROR, &optval, &optlen) < 0) { + error_setg_errno(errp, errno, "Unable to check connection"); + return -1; + } + + if (optval !=3D 0) { + error_setg_errno(errp, errno, "Connection failed"); + return -1; + } + + return 0; +} + + +struct addrinfo *inet_parse_connect_saddr(InetSocketAddress *saddr, + Error **errp) { struct addrinfo ai, *res; int rc; @@ -466,7 +501,7 @@ int inet_connect_saddr(InetSocketAddress *saddr, Error = **errp) for (e =3D res; e !=3D NULL; e =3D e->ai_next) { error_free(local_err); local_err =3D NULL; - sock =3D inet_connect_addr(saddr, e, &local_err); + sock =3D inet_connect_addr(saddr, e, true, NULL, &local_err); if (sock >=3D 0) { break; } --=20 2.21.0 From nobody Sat Nov 15 13:20:54 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=none dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1595268753; cv=pass; d=zohomail.com; s=zohoarc; b=SMfUrr9yM9NWHT/qTevTRFspZDNyDF4GDZjXtDvR583uxEOiVDY4x6c7trU24UDkM7sDDLMOkmPssZHVbk4ZBBiGjWr5HURhwNZ34fxQWb4apsmbxY7Rb7STmmW3fWuqxgDfXIrpscXS967sMiViAUrW01xALH6oj9mBDsw+xk0= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1595268753; h=Content-Type:Content-Transfer-Encoding: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=Ku4vcmlKyRcXmLJI1pdR50SPox/bIAYGdBHtI5D89uU=; b=IKIe4YJeIhUFwywTlDxDu+qSZtMlF28yXrZpU5dtJuOCmHWvmUSApcJDMXcoc3DfjWJvYo+BRZbYGecjOFfUv8N5pHcLs2+xejng46OxbZdjjuQI8gR4JXvgh3dnf5kgglluctyvnRHN6rmnD1Wwlt8TLcf9qExDw1lfPOno8WM= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; 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; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass 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 1595268753572655.0520229345744; Mon, 20 Jul 2020 11:12:33 -0700 (PDT) Received: from localhost ([::1]:45600 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jxaHA-0002QJ-7h for importer@patchew.org; Mon, 20 Jul 2020 14:12:32 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58496) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jxaCX-0005ht-QI; Mon, 20 Jul 2020 14:07:45 -0400 Received: from mail-eopbgr30115.outbound.protection.outlook.com ([40.107.3.115]:44342 helo=EUR03-AM5-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jxaCW-0001VM-4Z; Mon, 20 Jul 2020 14:07:45 -0400 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM6PR08MB4342.eurprd08.prod.outlook.com (2603:10a6:20b:b4::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3195.17; Mon, 20 Jul 2020 18:07:36 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::a408:2f0f:bc6c:d312]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::a408:2f0f:bc6c:d312%3]) with mapi id 15.20.3195.025; Mon, 20 Jul 2020 18:07:36 +0000 Received: from localhost.localdomain (185.215.60.171) by AM0PR06CA0130.eurprd06.prod.outlook.com (2603:10a6:208:ab::35) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3195.17 via Frontend Transport; Mon, 20 Jul 2020 18:07:35 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=mxO7rrApnpSCaKOU4SF91eYmhXhEn2YMImL6mLvlpcmJ9gyHYoLwC3QK+QnSlTrfYNTRFdzpJWlQhwvGqzYOX4/H4HDwwcfQ/gFAGJ2RJaF5TZOQYEGy9jBzASZoFNbWVzjDb50o+wyZFlGtOiYyY+oyA8GvfaZZp1uYBGGwIdO8ghb9ZsHQaJd84u0skorqsdKxmtiBjbtBlVaaMSOqxLkF6zrAgoLJqzppdRjCyqRI2vBZFe0XpZw7Q0Rt36HDz6O3HjeBYLg5KSoUt/MOfZrwZ9y9S9+yS7V+QLaPPAi5uBuAW6/+waRQwDfZOY6YEYfvVIoYGjm/HMoBk6eqlQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Ku4vcmlKyRcXmLJI1pdR50SPox/bIAYGdBHtI5D89uU=; b=RmKQzgYvvcTbzyatITI5zx6NAyoj3Rypxdo/PVZogpXc5n5WitWFdEQobH89OgqW5MGhXBN2sIDkGW0fRMETL0khVB3P3WeoKwHPqFmj63JZge4+fWuVJcyQNz3BTpUmU9u4Nb3nDEl/bEsSNb4TqoJlRRITJVHeFuNHEUuqqoC+16m87dlskU7qrd1QmOiI7pj0GhwkMQ8wewgb+oX8mcB95itHah2Gsg/6JJvbffdXL0+1UohLPtELePMifWa6v06GXM+LMXX91qfiMA2FFvODROscQqgPBiXNgZIGZrqPR8O7lKkyk0wJOCE+j0N2t8GiH0ai1AEIUvteHHXsJQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Ku4vcmlKyRcXmLJI1pdR50SPox/bIAYGdBHtI5D89uU=; b=uF2M//HhGlXfvz2dC8GzomXRUHns69zX6hWOpx6E+qAhnEnwhVuF9kT+v+xw8/8xWGszCtgYiHms6zt4Q/jDjRZezpSCCSMKZtxyXzgIS3QDbcy5PO95JFOKcUGtVroA5TYWESTdF1xStrAzs+R+C2KewKCd13mZhN1H6RR40FM= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Subject: [PATCH 3/4] io/channel-socket: implement non-blocking connect Date: Mon, 20 Jul 2020 21:07:14 +0300 Message-Id: <20200720180715.10521-4-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20200720180715.10521-1-vsementsov@virtuozzo.com> References: <20200720180715.10521-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM0PR06CA0130.eurprd06.prod.outlook.com (2603:10a6:208:ab::35) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-Mailer: git-send-email 2.21.0 X-Originating-IP: [185.215.60.171] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 0991bd39-3475-4fcc-a8a8-08d82cd7c81b X-MS-TrafficTypeDiagnostic: AM6PR08MB4342: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:5797; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: C6yrBaYe7bPOBGcud+F59UGSxi2mBocpsYnG6XpP27IAy48Z/D5eKA3vi9rrXWNSbtM+Z/j9Rprprfi5gZ2VMMzhK+xFUu+YpVRAHDbDsWN944HFGj8kN2+vl0+wb0fOmNW/oRRS4Y7/9thnMalScJN+OznUq5LdfJyKHQsnEA54W0qRvA1+Pc2wYwrLK3rVczvLB46YignUVbUL6QaLfGjSlQj3ckQR+sRKs1Bz8mDGBgqEjTjzLffaQFkz6qCc6A7O4G4dKWy4RGK57XjR5rJFTs+5Hye4iUt7ecug4Dm05Vy3buCTswLYoC2BsP0vwq0kwIRcqynUv8hQNVpc5pAVMQAIbenHbcRzM6wWnqecRQOxMCQD9A7dviQF9xrF X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:(4636009)(396003)(136003)(376002)(346002)(366004)(39840400004)(86362001)(4326008)(107886003)(316002)(16526019)(83380400001)(6666004)(2616005)(956004)(6512007)(6916009)(6486002)(2906002)(66556008)(66476007)(66946007)(8676002)(478600001)(186003)(8936002)(52116002)(5660300002)(26005)(36756003)(6506007)(69590400007)(1076003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: H8libeNGuwFa1vD+UyDi1Fmi6UQOhdTaEv8A/Ok9D4kmgEtfV8NOy1RMePyO/4KdXLvpz6XUD6rEp98wb730pedZp7LJST/4uBNUdWxllsptxOu37eqOcgW9i8MMDuxtcr7iyG1ArpKUiddjN86BN2rfQQ5qM2Bj1+TsP1dEIQAM0nx7Nf6Yv71G2jKDXaYjVcHtEJRPPCdpTopp01tz6S05mffwtgiVxU0G7oF0U6TMqW327VGhNGlOLb4pDaoUqit1Se9IOvFeudc7QaZHrbWqy37QUsHDmDf19QgKdQzedT/YwD8Dl1W88dtktDvrGbucAZzVKhJS556WrefS+Su3oblGN12hRVENorlqWz2eTR8BMPXaq5K4q5qQSzmxsWE2KKBYK3vqJrxUopEuB0w+IjR9zrlEjQRrSC9o4M33S8nuRUgHPJXRIYZKCzFIDwrmB+ezBsuU0sgw5fxXCmZhCbQKnwo6ZCs3a0qTA/Y= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0991bd39-3475-4fcc-a8a8-08d82cd7c81b X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Jul 2020 18:07:36.1554 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 6TM2scqnn1o1aAY1UZAGpHOQpVK+2aEmenNDldTtoCcoY5DR237Qd8/33gq0qOGv1gGGOjKR3XIKO5W0sp3w/dQzdrVhGkNNwDUeTX2BszE= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB4342 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=40.107.3.115; envelope-from=vsementsov@virtuozzo.com; helo=EUR03-AM5-obe.outbound.protection.outlook.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/07/20 14:07:34 X-ACL-Warn: Detected OS = Windows NT kernel [generic] [fuzzy] X-Spam_score_int: -37 X-Spam_score: -3.8 X-Spam_bar: --- X-Spam_report: (-3.8 / 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, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=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: kwolf@redhat.com, vsementsov@virtuozzo.com, berrange@redhat.com, qemu-devel@nongnu.org, mreitz@redhat.com, kraxel@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) Content-Type: text/plain; charset="utf-8" Utilize new socket API to make a non-blocking connect for inet sockets. Signed-off-by: Vladimir Sementsov-Ogievskiy --- include/io/channel-socket.h | 14 +++++++ io/channel-socket.c | 74 +++++++++++++++++++++++++++++++++++++ 2 files changed, 88 insertions(+) diff --git a/include/io/channel-socket.h b/include/io/channel-socket.h index 777ff5954e..82e868bc02 100644 --- a/include/io/channel-socket.h +++ b/include/io/channel-socket.h @@ -94,6 +94,20 @@ int qio_channel_socket_connect_sync(QIOChannelSocket *io= c, SocketAddress *addr, Error **errp); =20 +/** + * qio_channel_socket_connect_non_blocking_sync: + * @ioc: the socket channel object + * @addr: the address to connect to + * @errp: pointer to a NULL-initialized error object + * + * Attempt to connect to the address @addr using non-blocking mode of + * the socket. Function is synchronous, but being called from + * coroutine context will yield during connect operation. + */ +int qio_channel_socket_connect_non_blocking_sync(QIOChannelSocket *ioc, + SocketAddress *addr, + Error **errp); + /** * qio_channel_socket_connect_async: * @ioc: the socket channel object diff --git a/io/channel-socket.c b/io/channel-socket.c index e1b4667087..076de7578a 100644 --- a/io/channel-socket.c +++ b/io/channel-socket.c @@ -22,6 +22,7 @@ #include "qapi/error.h" #include "qapi/qapi-visit-sockets.h" #include "qemu/module.h" +#include "qemu/sockets.h" #include "io/channel-socket.h" #include "io/channel-watch.h" #include "trace.h" @@ -29,6 +30,8 @@ =20 #define SOCKET_MAX_FDS 16 =20 +static int qio_channel_socket_close(QIOChannel *ioc, Error **errp); + SocketAddress * qio_channel_socket_get_local_address(QIOChannelSocket *ioc, Error **errp) @@ -157,6 +160,77 @@ int qio_channel_socket_connect_sync(QIOChannelSocket *= ioc, return 0; } =20 +static int qio_channel_inet_connect_non_blocking_sync(QIOChannelSocket *io= c, + InetSocketAddress *addr, Error **errp) +{ + Error *local_err =3D NULL; + struct addrinfo *infos, *info; + int sock =3D -1; + + infos =3D inet_parse_connect_saddr(addr, errp); + if (!infos) { + return -1; + } + + for (info =3D infos; info !=3D NULL; info =3D info->ai_next) { + bool in_progress; + + error_free(local_err); + local_err =3D NULL; + + sock =3D inet_connect_addr(addr, info, false, &in_progress, &local= _err); + if (sock < 0) { + continue; + } + + if (qio_channel_socket_set_fd(ioc, sock, &local_err) < 0) { + close(sock); + continue; + } + + if (in_progress) { + if (qemu_in_coroutine()) { + qio_channel_yield(QIO_CHANNEL(ioc), G_IO_OUT); + } else { + qio_channel_wait(QIO_CHANNEL(ioc), G_IO_OUT); + } + if (socket_check(sock, &local_err) < 0) { + qio_channel_socket_close(QIO_CHANNEL(ioc), NULL); + continue; + } + } + + break; + } + + freeaddrinfo(infos); + + error_propagate(errp, local_err); + return sock; +} + +int qio_channel_socket_connect_non_blocking_sync(QIOChannelSocket *ioc, + SocketAddress *addr, + Error **errp) +{ + if (addr->type =3D=3D SOCKET_ADDRESS_TYPE_INET) { + return qio_channel_inet_connect_non_blocking_sync(ioc, &addr->u.in= et, + errp); + } else { + /* + * TODO: implement non-blocking connect for other socket types. + * For now just use blocking connect, and then make socket non-blo= cking + * for consistancy. + */ + int ret =3D qio_channel_socket_connect_sync(ioc, addr, errp); + + if (ret < 0) { + return ret; + } + + return qio_channel_set_blocking(QIO_CHANNEL(ioc), false, errp); + } +} =20 static void qio_channel_socket_connect_worker(QIOTask *task, gpointer opaque) --=20 2.21.0 From nobody Sat Nov 15 13:20:54 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=none dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1595268629; cv=pass; d=zohomail.com; s=zohoarc; b=JCgx1BBzYc9r5VS9MCq6zGxS3wXPyYrPf4Fa2bhIg86jmT/+7D33XWCKFX0DZGPnN3SR1xwyU+wyK9pwqXvz2gB5tfOLjWFJp40eB6n2G+GLCmA5bXTeYPtB4MkbopdD0ICW27Q0BGcLbUrxIGGVFrZa6c2a29F/U6WfpX79dMA= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1595268629; h=Content-Type:Content-Transfer-Encoding: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=ND61QWT6uvaBxQDp6wOnx/rSoXnc5tcaYeX+Zmz2rDs=; b=CWuE3crcupQeDhZ5g9LA58vvCE7xU7YbuJfQSoeCcr5UQuveb7yzfjPoNGVN8805u69wutSGOGGL5sqRjnDGzGQbzF6tpxwdkSAvwofixlptYSenCVQCEXMNH4lHLx5V3xXb6LaLuW3flm3V1gPpMRroNEewuGyaLC8fJmX2DBE= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; 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; arc=pass (i=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass 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 15952686290993.1172757573559693; Mon, 20 Jul 2020 11:10:29 -0700 (PDT) Received: from localhost ([::1]:40312 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jxaF9-00007N-Ll for importer@patchew.org; Mon, 20 Jul 2020 14:10:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58518) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jxaCa-0005nZ-AH; Mon, 20 Jul 2020 14:07:48 -0400 Received: from mail-eopbgr30115.outbound.protection.outlook.com ([40.107.3.115]:44342 helo=EUR03-AM5-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jxaCY-0001VM-DA; Mon, 20 Jul 2020 14:07:47 -0400 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM6PR08MB4342.eurprd08.prod.outlook.com (2603:10a6:20b:b4::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3195.17; Mon, 20 Jul 2020 18:07:37 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::a408:2f0f:bc6c:d312]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::a408:2f0f:bc6c:d312%3]) with mapi id 15.20.3195.025; Mon, 20 Jul 2020 18:07:37 +0000 Received: from localhost.localdomain (185.215.60.171) by AM0PR06CA0130.eurprd06.prod.outlook.com (2603:10a6:208:ab::35) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3195.17 via Frontend Transport; Mon, 20 Jul 2020 18:07:36 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=AGDk0loUredwf4zG/YVrNM+RWHDvkLkW/SMaHD62D4h/ySVYcDXA2AyhtXIKmd2y4kr5GXZ1fNO7BKW37idmlENRrO+uwD1qLmLfDs6YAFoB9hwLuuEcM0RUpKJKKnD9yekslHp0uCx4OmDVs7q2ooqX7RYGduN2L4EsZrcWne2HZm8wS0iBhtzuMW+aMXoEdsEXJCMgJ2TrFWEYFoJrDX1su+CQJ8nrDzI4ZibTc7Y82Jt8u7qXKjqAhmJH2HDw8wcA6y0/SpDiCmmCnmqGKFrtuP4Wjj+chzXe8ySSuHYBWAttBmRLxz/5B1nxJ9o61FbcA5zucRvKIYkOJTFZvg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ND61QWT6uvaBxQDp6wOnx/rSoXnc5tcaYeX+Zmz2rDs=; b=mjfzYqigdYalUGKmNKqcdaoY8MugQfPGrY8/AGySaQ6JgdzD7tF46KQmXAWK8w+GXGX7ZlQ7rrSki05e63IM4P1MrnHFXtGYsajaL2hM9EFYCYYupDI6s7tW6KpELpUp8WMowOcLdkmoswULxoDI3J4U1QEkgl/l0vAh9W7uh1Mnj7zIyc6FwnZ3DaYVl099PZ6hnrWMI8zIyGFCsKQtijaqg6vsX1JivDRvDYjUPfsK9Lzt2RhblH9BpOMlQD+yck+zSkh7824FW3lOdC/wvtm9Lm45KcvU/bZDHTZNyU4fsJ2/IJXHDSXWlz8xLsb4SI6DAQ8T4GX4Y8mYosZ8Hg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ND61QWT6uvaBxQDp6wOnx/rSoXnc5tcaYeX+Zmz2rDs=; b=ajM/SCccp0XWn6uL6MnGzaQzkA1+MUkMkJeMurFLImIVjVU1eUqcWGaBxzNs1SQGJkQLZ9g7UBQcZiXinIzgckSvxSNfaIW7TJJxOKFP9y8iZMSxNgoC3TMDTEN9xfjjZ5tnU0bgRZxneYo8E0R3lqfSQ4fhnTvD1n4vXTPGSVc= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Subject: [PATCH 4/4] block/nbd: use non-blocking connect: fix vm hang on connect() Date: Mon, 20 Jul 2020 21:07:15 +0300 Message-Id: <20200720180715.10521-5-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20200720180715.10521-1-vsementsov@virtuozzo.com> References: <20200720180715.10521-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM0PR06CA0130.eurprd06.prod.outlook.com (2603:10a6:208:ab::35) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-Mailer: git-send-email 2.21.0 X-Originating-IP: [185.215.60.171] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: a7b3459a-404d-4791-3be6-08d82cd7c898 X-MS-TrafficTypeDiagnostic: AM6PR08MB4342: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:989; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: /EsTH+/XjzkfnJapG4mgj0D4vk6M9UegY480oG4Cek4jjo3ocs5bfnhjB2rd7GAXqbIuHHSncjJZNE1Q7Z6U2TASBxdgpO3aCCHqEg4FDOkhA1xdGZrWs0eCWzvGi5weB33K1KAmtMMV9BednkG1e9A0TW3DlHc8Z7IGbtamiXmQldbYXzB0ACwI4LXnIIeYpvD4M35lnEWxOh6ayq1ff4D2C5w1k/hiZ2Gb73rRJdmjy/jxz53YL3fNQq10DAtkuuRTn6yJ6Au/L4UIvVDveY828pwa+VtdZh0L9QGn5ag4+id3qmcg/AXDXgiLVmqyueFi69o3DY+64KFwthxKbXuL37tiexBpepHVqB//Vf6PrvIhO3DxMfetu9GkqSYO X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:(4636009)(396003)(136003)(376002)(346002)(366004)(39840400004)(86362001)(4326008)(107886003)(316002)(16526019)(83380400001)(6666004)(2616005)(956004)(6512007)(6916009)(6486002)(2906002)(66556008)(66476007)(66946007)(8676002)(478600001)(186003)(8936002)(52116002)(5660300002)(26005)(36756003)(6506007)(69590400007)(1076003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData: eEFhRD+j34TmYwVeHy+S4xMKoUZ/P5CODiOXZF9sMUALK4hq56Shl+6Y/I4BCOdTLCRO+/ImEM4fJNs1PYyvBRwG/rWSEaCcD0tnHjxm72tauQTw3tAS9QIQBtz3u2+v3rCXkU+hiQD1Zdco51LlqRopoio9g/AE7yUMwOeC/bUhG8CcDumHfYuj+kvVPwrD4qHk+AGEfMy7b3BxBcls6B3NjbDB7uOeLVLSSQckb0fGYJksGkubjnbCVMcYaz8fmSTWjAOoy84VZEbxkbtRUo11EHpEwqtuY9AkgTtoFneJJ7ci55KfKltuHEvGUaEB6EOszHnuxk/QZuFMMw6h4EnhaqwDl055w2RRuHcLy+BObKZDtosxSDCJkyGCHBcnhLpMCma3oLnjzciaI/B01ZnJW3OqgwdiTXincHCGLymJnMgMZs3Rn1NtRQZaQES58CN/oiyLYd1BnYC7qYTBQ4w5y6U79Kl9z47xkRezjdU= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: a7b3459a-404d-4791-3be6-08d82cd7c898 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Jul 2020 18:07:36.9578 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Kj6SNexE2wo9sKjiREPK2H0Q4j5YOgak0DgC4hG+YtTwRMWkwZoCnUrajEHE8tkfEfDfgkd5qpZVfuAyW8/siSdFJbJIdi/e7GQ/3t+M9E0= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB4342 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=40.107.3.115; envelope-from=vsementsov@virtuozzo.com; helo=EUR03-AM5-obe.outbound.protection.outlook.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/07/20 14:07:34 X-ACL-Warn: Detected OS = Windows NT kernel [generic] [fuzzy] X-Spam_score_int: -37 X-Spam_score: -3.8 X-Spam_bar: --- X-Spam_report: (-3.8 / 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, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, URIBL_BLOCKED=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: kwolf@redhat.com, vsementsov@virtuozzo.com, berrange@redhat.com, qemu-devel@nongnu.org, mreitz@redhat.com, kraxel@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) Content-Type: text/plain; charset="utf-8" This make nbd connection_co to yield during reconnects, so that reconnect doesn't hang up the main thread. This is very important in case of unavailable nbd server host: connect() call may take a long time, blocking the main thread (and due to reconnect, it will hang again and again with small gaps of working time during pauses between connection attempts). How to reproduce the bug: 1. Create an image on node1: qemu-img create -f qcow2 xx 100M 2. Start NBD server on node1: qemu-nbd xx 3. Start vm with second nbd disk on node2, like this: ./x86_64-softmmu/qemu-system-x86_64 -nodefaults -drive \ file=3D/work/images/cent7.qcow2 -drive file=3Dnbd+tcp://192.168.100.2 \ -vnc :0 -qmp stdio -m 2G -enable-kvm -vga std 4. Access the vm through vnc (or some other way?), and check that NBD drive works: dd if=3D/dev/sdb of=3D/dev/null bs=3D1M count=3D10 - the command should succeed. 5. Now, let's trigger nbd-reconnect loop in Qemu process. For this: 5.1 Kill NBD server on node1 5.2 run "dd if=3D/dev/sdb of=3D/dev/null bs=3D1M count=3D10" in the guest again. The command should fail and a lot of error messages about failing disk may appear as well. Now NBD client driver in Qemu tries to reconnect. Still, VM works well. 6. Make node1 unavailable on NBD port, so connect() from node2 will last for a long time: On node1 (Note, that 10809 is just a default NBD port): sudo iptables -A INPUT -p tcp --dport 10809 -j DROP After some time the guest hangs, and you may check in gdb that Qemu hangs in connect() call, issued from the main thread. This is the BUG. 7. Don't forget to drop iptables rule from your node1: sudo iptables -D INPUT -p tcp --dport 10809 -j DROP Signed-off-by: Vladimir Sementsov-Ogievskiy --- block/nbd.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/block/nbd.c b/block/nbd.c index d9cde30457..931eadbe6f 100644 --- a/block/nbd.c +++ b/block/nbd.c @@ -1421,16 +1421,19 @@ static void nbd_client_close(BlockDriverState *bs) nbd_teardown_connection(bs); } =20 -static QIOChannelSocket *nbd_establish_connection(SocketAddress *saddr, +static QIOChannelSocket *nbd_establish_connection(BlockDriverState *bs, + SocketAddress *saddr, Error **errp) { ERRP_GUARD(); QIOChannelSocket *sioc; + AioContext *aio_context =3D bdrv_get_aio_context(bs); =20 sioc =3D qio_channel_socket_new(); qio_channel_set_name(QIO_CHANNEL(sioc), "nbd-client"); =20 - qio_channel_socket_connect_sync(sioc, saddr, errp); + qio_channel_attach_aio_context(QIO_CHANNEL(sioc), aio_context); + qio_channel_socket_connect_non_blocking_sync(sioc, saddr, errp); if (*errp) { object_unref(OBJECT(sioc)); return NULL; @@ -1451,7 +1454,7 @@ static int nbd_client_connect(BlockDriverState *bs, E= rror **errp) * establish TCP connection, return error if it fails * TODO: Configurable retry-until-timeout behaviour. */ - QIOChannelSocket *sioc =3D nbd_establish_connection(s->saddr, errp); + QIOChannelSocket *sioc =3D nbd_establish_connection(bs, s->saddr, errp= ); =20 if (!sioc) { return -ECONNREFUSED; @@ -1461,8 +1464,6 @@ static int nbd_client_connect(BlockDriverState *bs, E= rror **errp) =20 /* NBD handshake */ trace_nbd_client_connect(s->export); - qio_channel_set_blocking(QIO_CHANNEL(sioc), false, NULL); - qio_channel_attach_aio_context(QIO_CHANNEL(sioc), aio_context); =20 s->info.request_sizes =3D true; s->info.structured_reply =3D true; --=20 2.21.0