From nobody Fri Jul 24 21:29:48 2026 Received: from AM0PR02CU008.outbound.protection.outlook.com (mail-westeuropeazon11023073.outbound.protection.outlook.com [52.101.72.73]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D369A3E5573; Fri, 24 Jul 2026 11:45:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.72.73 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784893558; cv=fail; b=T6jJzVVgjyH7UiprHaalf744io9bDIFpsd8wyn+DqxdrZ65NWG+GA+vAJRGXbsfhuPxz6eyYH5u4+HxDKL82eWOmsP36XzXRdJqDP74zH67eyaHZl/Re2V6TDXuI8cocXNT7YCq0h7DVK0PJpg/N9w0i4t9mMKfbvHKjP+ldX9E= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784893558; c=relaxed/simple; bh=QUUo5LdoJC3/+9LejyhzEuy9Db4qM7GyIsMW4+lSXX8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=XnhBIylSvFffJh8ztS87dQnFKTqhycqdTrVjZvcFlVA4QMCBHhdp0/SgfjaasvChvXDIRWu3BcPK6i9sCtLuNDUN86+2VcQHDbAN5pIhatvIwQb+5neRb3GBxBzxh8CjpI30zzyH37cRRdoTg5YrmsHrymJmEg0vnrnCjJHxx2w= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=virtuozzo.com; spf=pass smtp.mailfrom=virtuozzo.com; dkim=pass (2048-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b=GuLQbInF; arc=fail smtp.client-ip=52.101.72.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=virtuozzo.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=virtuozzo.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="GuLQbInF" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=reOjtF23LiFgDOaNCt3SMLy61IM9G8c1sajvu988ASUWN9sewKkCrQL1+h6IlZkP7T65G1wzVx+mgkMdR8ZJ/28RoS4Qx6ui/cQIq9C+Pve/kqfTPG6AM/Bvj0RqQzTFBAEHamWcFILT5qCuyV7gB9kDy2zUvivKQw0lBEKHZe9eGKHwc3QRND9xRbqd6avHGsP2+oR0dqplCvzb1Bnz0Xxtl2TzFGVwKQDGV7RwHftgsfvQO8VjsfQJdX6Me/YDjX77FOe+83n4P3QV/zRLjt3K/LMx6abIVE9yRKIwcqiz2RzQAeUFrxjgytIgJdNFiaKWW9esqE+v/wZs0IehDA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=2+vb3H7ga1/zO8JIhDlu/cn9DNQ0Sk/VBwY/dIrZDik=; b=RMah0gOaatTdkPvvVuqIolK84wrpLdPdHO2TQigAVDG/DnQLuXSKFm6lT/AEdNe3SUs8pNNjQrza9JPbrhaf1xMSU+HVGNOIL36aWDMljCIfZsfmxgs6F8jCsGQkCTsuXbpGTqLo+bOegCpyzaP0PEgZPfGTrcDvmWY/f3DhpMidyX7y8SB1nS2P8kC2EB0lQB+4KMmYxSsWWa3U6hEffTsvDAbWhOvk/s/ZovKXv2/5aDUTCFhFHjpa+KCTTqhbB7Dsaxy1Ekhk/L7uPwevqLU/FGkkuYb67Tb93jwYtQmSSRRVLKhKng22U0fpgrk1jHTadYzb97QfDULgX7+9ig== 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=2+vb3H7ga1/zO8JIhDlu/cn9DNQ0Sk/VBwY/dIrZDik=; b=GuLQbInF/jlyH/4J+/WJ3UAyrb8sUwqtI3wdTou6fu1vT19z0eQcwshj4480gS/UyIU4fZr3rKdqLNhMPGQxjl62mRghwT2K2zz0yxQhZPo0jbgMMEUSe4PuvaA3IscFbSGvu2e2ALfQHniKK1KWoeQ/YgJH8WejWkTYLJPNwcPY/d4EOp9d2kjF68jInBS43uz4tyWlo8wT+LkT0+3FBNn9DG3zvO6lIgnMo3yE6nK8R1kGPZyXg8e2O8BjtQTuUt54fv0FcQEjUXFNnbaVfG7esjQ3uAnpWrjqX3j6SCRsd8Vp1SU5DqvBJBQa3n8Nid7UMMJ408cN9hSfB9q8Qw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; Received: from VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) by VI0PR08MB11775.eurprd08.prod.outlook.com (2603:10a6:800:311::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.11; Fri, 24 Jul 2026 11:45:52 +0000 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8]) by VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8%7]) with mapi id 15.21.0245.010; Fri, 24 Jul 2026 11:45:52 +0000 From: Andrey Drobyshev To: linux-kernel@vger.kernel.org Cc: kvm@vger.kernel.org, virtualization@lists.linux.dev, netdev@vger.kernel.org, sgarzare@redhat.com, mst@redhat.com, stefanha@redhat.com, dongli.zhang@oracle.com, maciej.szmigiero@oracle.com, bchaney@akamai.com, mark.kanda@oracle.com, ptikhomirov@virtuozzo.com, den@openvz.org, andrey.drobyshev@virtuozzo.com Subject: [PATCH v6 1/5] vhost/vsock: split out vhost_vsock_drop_backends helper Date: Fri, 24 Jul 2026 14:45:38 +0300 Message-ID: <20260724114542.734623-2-andrey.drobyshev@virtuozzo.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20260724114542.734623-1-andrey.drobyshev@virtuozzo.com> References: <20260724114542.734623-1-andrey.drobyshev@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: VI1P190CA0001.EURP190.PROD.OUTLOOK.COM (2603:10a6:802:2b::14) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|VI0PR08MB11775:EE_ X-MS-Office365-Filtering-Correlation-Id: 8ddcce81-20a0-461b-a572-08dee9791cf7 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|376014|7416014|52116014|1800799024|366016|56012099006|10067099003|22082099003|18002099003|38350700014; X-Microsoft-Antispam-Message-Info: DTg/W4du7utSZv54gwZqtkKMi6KKcOovSNk7T7cRtNHuV9RAscRSGVAbxRdq9H4xMsPBWNvGJWVlXasE1knTxZshsSIbDTVan65pUBg2q4ejEaIHklY96wnjRCFpeBB6+G/2kjk0PqXXVQfk69X6VRwItnw4AMyf0KXysU6yOsSCxZU7F1VF/CkzDgS7uWhfcK1HxpsyXE7UVeN2t1VqFD90amtjsBOUNGJ6g+kY1IMxufqVbjgSe7udk5TTsQgsGrXB+jKEF47FupXiEdtVe0C9k0kz1AlSEoUyMKGhak1XdjZd0hfoOckOPpPJUakQerKsyZWYBBeNUbCHWo3a+aNmbC4ay7zWSJQamD81P1MC/PYGNSkQboExKlMVQ4ooEzcRNKnH1guWROYCvY+cWMTeXen/eqRiaYawlVLuuAi/TSo4/mwbckpNGml+NYY+ttJdX68MkLuRTewy84xpK/8jxUUq1+q5O8bCUhUOlkDQdLetQU+XYnmQVtKnkUgkH0941IVb2qCLQNcDiobsnRv730F8Og629sfN3Gn1SIg2IKnvx4SyACzowTMD+g8nAbg8k5VoaTCC2WvoaqmQUfqfAN3sMR6op9TT+Tgfs4aKo9jPbcNucgM1pllP6o8+48O0mdW2w33/Ml3xlQJ4f0y7T4ihrcFpnpIyu/SdUIgGc3TlIofaGF4ivClI0dDGGApbJARx3kj2qlG6OSFLutEDpmxLgwpiKJcMmE1h1PY= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI0PR08MB10656.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(376014)(7416014)(52116014)(1800799024)(366016)(56012099006)(10067099003)(22082099003)(18002099003)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?+nr7Tyshwp0zvTzKT46274qwsBq7pzKdq91LHtd09y4T0umszFEc62+D6RWF?= =?us-ascii?Q?QJ0Tel1n8UovQFDHBol5gLCfUD/fbqcpzmSb+meptnHa0x+H5CQC6wk3UGWu?= =?us-ascii?Q?OOnjzNSkD5PWWfeaK4NRw6WqbZse6b9idLmxpeplTrje60nyFLaPbF+duXVU?= =?us-ascii?Q?WG07YFr70x2UGrL9lQZhOK2uzitvEKMl7G+lqHP677wgn/uzn8m4goDBi5wT?= =?us-ascii?Q?c4lRLIjNXdVtlFItTC3V09+sRc+A1G4Zd9xC2Ck8rS+31IQwNM+wuvXEpMm5?= =?us-ascii?Q?8m58uSUkfmfA4d/C6QKWkf4+COtavrkbxPoD2SV1CfbtL0Cgm9VakXicxyKu?= =?us-ascii?Q?UXTmhEOp26XQVFzQWQXBq3N/ehoj1DsBloUDR7qFlPucyt7lyVyAKplBGuAY?= =?us-ascii?Q?ErjZUqkM2IPwlkoHOQmQLkb3F1bV00A5UA7vd2j5yMFKDIfDM+PFPsrwR/oy?= =?us-ascii?Q?i19zRF1WwF8m5/xdVdgvO72b6ruD2HXPsuxibVYr+aa/tYcLVR0QBX0yIGOv?= =?us-ascii?Q?pR5q0fSQQr62yRFpMSPYn0/uU271U9AYyHuL0ih/ttwqv9KK/+0XBMiZn65y?= =?us-ascii?Q?NdWfYg3iyaQ6k1PRQrCdNCRRDe7XUDrCCe4mtjD4Q7OzEAQHnj5RRtx+Ymvm?= =?us-ascii?Q?iiM9WPTgLIj3x7J95xwH19pfpHm0+C7fT49VB7+Igr1fSJtxqO/uEpOITmMK?= =?us-ascii?Q?opqEjRbJ9A2AWTGOhb+bmbPYcoE0OiAl9OmsQlL+nuAdbTnIA3ssx6J4J02t?= =?us-ascii?Q?N29722S4+NaZMxSqqmNdGkoWUmaUL8MKXH3cNLGsfK+AiFF4gbngoesN4IJk?= =?us-ascii?Q?fcS5N/+vJHNWVWWth90RG7VPx/v6SmxAbIadWfPDKQvJzhTy2Y2KY2tQt2hB?= =?us-ascii?Q?Cl3ncb5b1IIXe/9PdG0qhhBJxzwvPO5Xn6m6TDYO4Y4hXw7rL6N3WR7REj6t?= =?us-ascii?Q?/T3HrRxv2GrSMuzpLxYtoGbV8DQ+U9X1dd6du6AElmBYH05t2Fv7Wmu8v8oc?= =?us-ascii?Q?pSx9HlPtqKnqeY+KgdJjgtmdruaW2Y400WQqPjLdAy7dU2ybLeVatXqRswhi?= =?us-ascii?Q?ekmNIRrh/Ho4YCPRrhl+1qXb5WaMPZya4iBn3rSrgsCjmYf8GE1JwjxGmmgE?= =?us-ascii?Q?McMQnx513s6QRpWN1Y5rmdLfLh0b8O7Lo+QVgtmqdjQgTiGI6vKjXwes5+en?= =?us-ascii?Q?tpEldY3WSIuvYJCxYALPk4JDbkS4opPfZ9iSrTsCGUlBtrTZN5/4TQsLWz5T?= =?us-ascii?Q?kFK7cYco/5RxFMS8sDKZ9unNdxdSJxhNSZwHg3L3qIG4yVVM8j8I58okWUIy?= =?us-ascii?Q?+oGlaJkvJnjzHfzjOY/i7bhj80npQfMqti3XrBBxy90ukz8ylmE/9u1Aq1QP?= =?us-ascii?Q?7vGduXpTBBEqS1wxaWsmzurqpICmjyRtYVizwqlNckqlcy2JnH25adTlVuVD?= =?us-ascii?Q?u4l2Ay0Qwo0mqs/KDeoFzcL8TX05nghct96v7lxDgxX40P7xhaPs22JR2FG8?= =?us-ascii?Q?TjY3en/7VK7XsSVlqXAcsWjmDJ8P5/2S54IaEaKtAe2Y+gC/WF3rLAo4spoN?= =?us-ascii?Q?yfDn1kVY9vpEQoEOLa0g3Fo3vrz7/+DYRv08POeEO0EIOHX3Ld0Yk/9qctMK?= =?us-ascii?Q?jwjHR3sO9rtnE+b9cKYOWJU4kuNQscppvFqUuCMdL2sW9ohXps8YDGQqNKkS?= =?us-ascii?Q?kpjonQXEexpHXkrUsPQcCJJFV3n3cybEwjWpNqHTfHP23I0Zx6Nc3GXo9Tlt?= =?us-ascii?Q?Jfyw9ztMhwhkUOo6cymVg1t5JPW/WDI=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8ddcce81-20a0-461b-a572-08dee9791cf7 X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jul 2026 11:45:52.2100 (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: pXgae6WKZkpqKdiOZPxqHJJDFYxQzq6CgElJ77QqzSp5Niw2FXTzRNBxkTPWzxRXG0y4GFsm8aL37vHJyYeIxPEOylRV8Q0NjqOUiiWGjDY= X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI0PR08MB11775 Content-Type: text/plain; charset="utf-8" From: Pavel Tikhomirov Split the actual backend dropping part from vhost_vsock_stop. We're going to need it for the VHOST_RESET_OWNER implementation in the following patch, when vsock->dev.mutex is already taken and owner is checked. Signed-off-by: Pavel Tikhomirov Signed-off-by: Andrey Drobyshev Reviewed-by: Pavel Tikhomirov Reviewed-by: Stefano Garzarella --- drivers/vhost/vsock.c | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/drivers/vhost/vsock.c b/drivers/vhost/vsock.c index 9aaab6bb8061..b12221ce6faf 100644 --- a/drivers/vhost/vsock.c +++ b/drivers/vhost/vsock.c @@ -664,9 +664,24 @@ static int vhost_vsock_start(struct vhost_vsock *vsock) return ret; } =20 -static int vhost_vsock_stop(struct vhost_vsock *vsock, bool check_owner) +static void vhost_vsock_drop_backends(struct vhost_vsock *vsock) { + struct vhost_virtqueue *vq; size_t i; + + lockdep_assert_held(&vsock->dev.mutex); + + for (i =3D 0; i < ARRAY_SIZE(vsock->vqs); i++) { + vq =3D &vsock->vqs[i]; + + mutex_lock(&vq->mutex); + vhost_vq_set_backend(vq, NULL); + mutex_unlock(&vq->mutex); + } +} + +static int vhost_vsock_stop(struct vhost_vsock *vsock, bool check_owner) +{ int ret =3D 0; =20 mutex_lock(&vsock->dev.mutex); @@ -677,14 +692,7 @@ static int vhost_vsock_stop(struct vhost_vsock *vsock,= bool check_owner) goto err; } =20 - for (i =3D 0; i < ARRAY_SIZE(vsock->vqs); i++) { - struct vhost_virtqueue *vq =3D &vsock->vqs[i]; - - mutex_lock(&vq->mutex); - vhost_vq_set_backend(vq, NULL); - mutex_unlock(&vq->mutex); - } - + vhost_vsock_drop_backends(vsock); err: mutex_unlock(&vsock->dev.mutex); return ret; --=20 2.47.1 From nobody Fri Jul 24 21:29:48 2026 Received: from AM0PR02CU008.outbound.protection.outlook.com (mail-westeuropeazon11023073.outbound.protection.outlook.com [52.101.72.73]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D03E63E5ED7; Fri, 24 Jul 2026 11:45:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.72.73 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784893560; cv=fail; b=ZBPU5iL7fQvWV43VZBJRCWvxLGlXH/eTKWZtoCcROOYI3/aDAFqfDYZWlBaeJK9XrfLPxt8ardf9iSczEg+/dgaC6QSdd7/S267mFEzmSRHPDSK2ip6trSZ4R+0Ij0YfIrbpG7cjZlWIHHNJ6ZvA61Fy9r5SUcMUcUn68Of+lrU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784893560; c=relaxed/simple; bh=OO+cSQIa+sSlzqiQyDskP0VhFHE8+WfBMigAFXluAKw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=u1BTML5PDz9bvTJgC8Z2XTb5CkuxnygnRqtf50GN2E+3GJGIGw8BqaJUcKUcAqE1STKZwdNL/RdyWVqOhmVkKvCwbi5LEcKE3GY8hy26xgbs+jShc3GZGRFtnPs40L1ttx2+182+CeMpO2SuzB61sfmhb3JNYJMTWjVWNVkQ4nI= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=virtuozzo.com; spf=pass smtp.mailfrom=virtuozzo.com; dkim=pass (2048-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b=oyTaUITi; arc=fail smtp.client-ip=52.101.72.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=virtuozzo.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=virtuozzo.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="oyTaUITi" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=VGooZErwYF1NiqFsUZbUz5hBwPRLsxmNJmyAWxsYRvvxGzj6FW4G3EjAsncCoVJNhKFaqcW4PEUyf/MDCnHlQfVtqDbxYFmeUktuVMV9jXZMDjMlPlx0pVy2WQ4EUyxs4nXkkt1esCVTjPrDUzGevcVDqIUgwbNDWXuf/Rp3rNfEb8rqYeiieCo3sezk0G1JH9ipMk0C/B4rZaMbYXs+0svZQh4qFZcQvjFDf8HWNiuBM3/8FplQFUSAHAAiMj4MHRXHDc7l3X07bi3VAmn3OG0+vQWtF764C5kn59+7WXlQYBm9rIh46MVlte4DTMPsrCJesE0zcFBN7TIWqghlIg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=VIDPu/3sl9SXi0XewZlr30zobS3X065RfRnj+KBScao=; b=femZrG9343zsnSs6L91lmlq2PaqEB/OBL4eXSo8v8E4soRpGnC5SDlEhsiEr8pf+SMvPpoCI9DNUJN5V6plviYU4Yy5Jpf2PjVG1/PurnBFfRHy9q9HnMoJWny9uQlakD+ZYmGtYjWNv/oMgr43Xl9fNND+c+kvX4mkGmbiZOb7rkeQn9mVnr00LrtXBxDZbhMKua/MFpbqY/KN2lO362CATyMSYxKwUP40C7gNaa1JgwGHJlz0m8Y9RaEhP+b/953asyzrv71bjFFVjkA5JpJF67Dts6NqSN5X/CLqhGSjifEB9o/JcLAIZIZO4AkSjto+HUjTAn+DsQYEvNq6JEA== 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=VIDPu/3sl9SXi0XewZlr30zobS3X065RfRnj+KBScao=; b=oyTaUITiz3JfaZmanAd2xN6cyZd8LdiG0e52eZSthcg1YMYU2pQNi5Yyk/CYjtFVlzT0t+5qSl369lyKudNX3n7lx0PVZcEo1rG4xDdNKUwNZuTMdc1bu03YaMFs1qBUxRaJxGynaH5cMi/jZHninE7q34I9VolIS4+yZrwzQ6Cen8RZoe3lwPmyZpl8G3QB90SzzsWZl2iCIueUMp9dKzBOM3eLjq8sHF3JPpjT0G3ilTYgQS8jChJIpjtKfWeEH3wcg9sGY/1SmSBdPIXIPmfLL9sXW/G1drn22Mm9fNpWO4QcpyI6sbdSzGgilPxM05nrFzszIN7TEv5De0/cUQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; Received: from VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) by VI0PR08MB11775.eurprd08.prod.outlook.com (2603:10a6:800:311::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.11; Fri, 24 Jul 2026 11:45:53 +0000 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8]) by VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8%7]) with mapi id 15.21.0245.010; Fri, 24 Jul 2026 11:45:52 +0000 From: Andrey Drobyshev To: linux-kernel@vger.kernel.org Cc: kvm@vger.kernel.org, virtualization@lists.linux.dev, netdev@vger.kernel.org, sgarzare@redhat.com, mst@redhat.com, stefanha@redhat.com, dongli.zhang@oracle.com, maciej.szmigiero@oracle.com, bchaney@akamai.com, mark.kanda@oracle.com, ptikhomirov@virtuozzo.com, den@openvz.org, andrey.drobyshev@virtuozzo.com Subject: [PATCH v6 2/5] vhost/vsock: suppress EHOSTUNREACH fast-fail during CPR pause Date: Fri, 24 Jul 2026 14:45:39 +0300 Message-ID: <20260724114542.734623-3-andrey.drobyshev@virtuozzo.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20260724114542.734623-1-andrey.drobyshev@virtuozzo.com> References: <20260724114542.734623-1-andrey.drobyshev@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: VI1P190CA0001.EURP190.PROD.OUTLOOK.COM (2603:10a6:802:2b::14) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|VI0PR08MB11775:EE_ X-MS-Office365-Filtering-Correlation-Id: 3b06bfce-5b16-40fe-2187-08dee9791d73 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|376014|7416014|52116014|1800799024|366016|56012099006|10067099003|22082099003|18002099003|38350700014; X-Microsoft-Antispam-Message-Info: 9rKHTieu1EEm4yvmNdjJ7/a/C7mx+l+W60dgK5eOuq56DdAykRldqeNixWEmX8ZJ0f26sJryLawzPnFKdGTx79ACR1n2+LWF2ZE+3f/qxnLa3AKBvc5JxG2io8PB8hsw4rUim8luEIaHWbWtfuCINsFpZkKtNdBKZCEtWSnpyiTZB1Ka41tYKg430w5sRlSlv+FTayhIqxn0nCf1gU3Q0F7BvZYhAYAazZdzW8mp2aRPvIB3c5RUpBMZYpHD5xV0gcTB/YLA0MGXQa9w8qVNCt2zMxQVN0p6RzTX4MG7KKd2RQ97XNOTEEXAWbNsfsCnTEoyQMpR5mxGl26pqd6cXCZJ7YHPfFYKpCZ5TZHiT/5n8ZVOqe3LF8UdE7uqc6KfsI8IAPiLeCYT6I4BJ133MjoSIghzYCP6lA05z065xO9Ove6ZU0tHCOnp9dpj+lAJF2kOMsAPFDhHF/xH0BDqa1Li+i8YnwyYgVhBskIToXOLJgIBysHdw0ynJNPAet3DihNzGxyt8U51P3O/ZtJobT5+Xqp3MT04q7YOgrDkWLU1SNQuesquDNkZFfeEX9iVEouvXom8ScAfN3C+PhCemKnekejygUCcdSdwesEFh33d9yQ/ETVYyJKDuah39EFFi2qofS/DeviKKvJDyblltQkwPNpt7DQ6YLqI/Cz1VMbDtp2Mq2PewiPVmtmg5u4dSQZ33J3xEAM/SQg7VLdllV6iqBIu40BLHgXNtz1k/xs= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI0PR08MB10656.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(376014)(7416014)(52116014)(1800799024)(366016)(56012099006)(10067099003)(22082099003)(18002099003)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?idEsF4z7DWJkKhkKtf2pw9WFcfobTUtFuxHsnh+hmUUU0N87YThySWJlyqag?= =?us-ascii?Q?nnRmjr8TvrlGTdyRAQdVAre8cNpE1VeBSeBJ7zy/27TEC9aHZZZIPzA8elUq?= =?us-ascii?Q?v78FpxWoJ5GJCltoF4v+7jbiTC28N7YkNt8K01qTe2/HT+MAPN1rhubsfxZH?= =?us-ascii?Q?usVgSfh3nVPCVLqopyKk6IouvacKpMHY6tO7HLoN0RUmF1ISPBV0Gw3O65sK?= =?us-ascii?Q?OBEEOXgF+dUHXf+0qpvDAHE1tl/Ow7Uq6UDX97Y3s/sfEsWHoVnCkwFttAQ3?= =?us-ascii?Q?C0/cNoPIVTbotNti6JloV9S1NSG7CIBybcsj7WBQtDkl5/pbHL3JUUThlqzs?= =?us-ascii?Q?P4k7OrD2jwMDVsT1OukptTJltApGm4pHGqCYlfWPTET1/jFqhxgeYemGHiah?= =?us-ascii?Q?9yHoX3w0jhsDYhzZNaLJ2T52u/RgGG8eZEw0+3NvRxE3XiCoXt264dyYb5Kq?= =?us-ascii?Q?+d1nZfwVsEQ7+GXynTXkqoCqKyvCxzpgZbijwEZNe8lGoB9gBGdWRXAfykY3?= =?us-ascii?Q?u54LbP24CefE40FgVHkgeRlb4aBdOE6gBU+gY+L27YJhzw8J+aQ8MkkbtuJM?= =?us-ascii?Q?Jh8etj1cl6s9pvbA7EjPm1Iv5Onjw9EZBMUkGVwlXieJECJbLub7fhUefS4K?= =?us-ascii?Q?G0otPlPOM+SCzOuNk7ggPKcZv211Mv/SQhxARQOr+S5OWBaBW6rxoKt2PZKM?= =?us-ascii?Q?byzHuKPvPgk47zcHC2O17JOuLCUy5x4tOKLJgqyccjc8+a6BBIktUO90Yg3q?= =?us-ascii?Q?AneD9N5gjzSFWLzerwrLlXBCfkvPjx7CYGd1f/lohOUqRKaB7ZlUXm0ASooZ?= =?us-ascii?Q?H1kyOgJ3JJBYDGI9DRDars7vli3wksIjOEDFDAEZhZYXUoPRASRyZt9rucll?= =?us-ascii?Q?7TezTAk2fjmwRe2eZipvRXvYkeLHmFLgR2mY+PKM/R0MRMWvitxgaHId2Q0T?= =?us-ascii?Q?wkb4ZsZLY1YqGKQ8XCurjfIGtjf3aiqi9O2PvRFDbThSEO05gnKY+E9PvR8E?= =?us-ascii?Q?NJVY2OIUbhBphWfvJejDx+xFkPiltTkVJpfmAgRvmKTSmRtBvvDckPli2oSm?= =?us-ascii?Q?z96OeCoWVkqpVdzVxSdHv8sTOH8GR00qd4/JdAbZ57jbYEMp6bqo3AzCx7XV?= =?us-ascii?Q?e/M0R3oomzhOkY3HnaI8PVH3IDfmYE/tmAHhjAHl4AS6DhoXjeQmvzt1AlNH?= =?us-ascii?Q?JU3AnezOctGWdN05ahzYd5lmH1MsJ5eyZ5QETPEDgD3RLtwUD+WhecF6z7O6?= =?us-ascii?Q?gTSfjLhxI5wWGi0ApWBjQ0udEqgWz6LgHgxSE/rDKsNBVPBN9qQ3S4dPvZRV?= =?us-ascii?Q?B2bOMCRvtI4Gbj3yWvuKpXGXCA8ESCqgSnEDVwNpNLQtGJZ31ZRnSumZ0KKp?= =?us-ascii?Q?uKLpiSEq067sza/AT+1E4s8n2Gn53WfWKTAZYvMuVs7usFWFHzAFKUkQzBlO?= =?us-ascii?Q?1KttJH+7tjqDXTDRbkZjtRPbkBTocWjQ3Dq+zWKZaAgi0PXv6QLMrR1wg5oB?= =?us-ascii?Q?/nCLo8nItlQk3DRhOWUSSpUO8BKNc73Y6lN7dzhm6kRNM1FxysGns7ER+9n5?= =?us-ascii?Q?5ucxEb7eX94Oews+CZxLwYFVF/O5vk30E4aECrPEGMTYDxko/RJa6nIa0TSd?= =?us-ascii?Q?xlRFpV7JGbBxufiln7jjvcbT6NvB4fj+n4L1t0j3Jq+aRIrO4CEWyoL1ehxQ?= =?us-ascii?Q?8JUKuWChWzLzxENmKhSYcbPFAf5NpIMWb9u1iTpmdFdZ3J55MHeeFpr+Xi40?= =?us-ascii?Q?qdnci6qKIzDVoagThSxq2ZXF6POkIQ8=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3b06bfce-5b16-40fe-2187-08dee9791d73 X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jul 2026 11:45:52.8887 (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: 7N2EqxDTrHJTsKMqj1clKXBKRLgommR3LMwYxY91ANe3OmipC57o9qx0DS1tkyDprGze5QEWchFpvGqaLQ54N2qOsniwoS14nc8EI3+9T6g= X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI0PR08MB11775 Content-Type: text/plain; charset="utf-8" Earlier commit bb26ed5f3a8b ("vhost/vsock: Refuse the connection immediately when guest isn't ready") added a fast-fail in vhost_transport_send_pkt(). It rejects every host send with -EHOSTUNREACH until the destination calls SET_RUNNING(1). The fast-fail condition checks whether device's backends are dropped, and if they're, the guest is considered to be not ready. However, there might be other reasons for backends to be nulled. In particular, when QEMU is performing CPR (checkpoint-restore) migration, device ownership is being RESET and SET again, which leads to backends drop and reattach. If we end up connecting during this window, an AF_VSOCK client gets -EHOSTUNREACH, which is wrong. Add an 'ever_started' flag which is set once in vhost_vsock_start() and is never cleared. The behaviour changes to: * When device was never started -> flag is unset -> no listener can exist yet -> fast-fail; * Once the device starts -> flag is set -> we don't fast-fail -> we queue and preserve during any later stop / CPR pause. The VHOST_RESET_OWNER ioctl is implemented in a following patch, and without RESET_OWNER the problem we fix here isn't manifesting - thus this patch is a preparation to support RESET_OWNER. Important caveat: after the first start, a connect during any stopped window is queued instead of fast-failed. That was the behaviour before the patch bb26ed5f3a8b, and we're restoring it now. However we still keep the behaviour originally intended by that commit (i.e. fast-fail if there's no real listener yet) while fixing the CPR path. Suggested-by: Stefano Garzarella Signed-off-by: Denis V. Lunev Signed-off-by: Andrey Drobyshev Reviewed-by: Pavel Tikhomirov Reviewed-by: Stefano Garzarella --- drivers/vhost/vsock.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/drivers/vhost/vsock.c b/drivers/vhost/vsock.c index b12221ce6faf..27169a09e87e 100644 --- a/drivers/vhost/vsock.c +++ b/drivers/vhost/vsock.c @@ -61,6 +61,7 @@ struct vhost_vsock { =20 u32 guest_cid; bool seqpacket_allow; + bool ever_started; /* set on first SET_RUNNING(1); never cleared */ }; =20 static u32 vhost_transport_get_local_cid(void) @@ -302,17 +303,12 @@ vhost_transport_send_pkt(struct sk_buff *skb, struct = net *net) return -ENODEV; } =20 - /* Fast-fail if the guest hasn't enabled the RX vq yet. Queuing the packet - * and making the caller wait is pointless: even if the guest manages to = init - * within the timeout, it'll immediately reply with RST, because there's = no - * listener on the port yet. - * - * vhost_vq_get_backend() without vq->mutex is acceptable here: locking - * the mutex would be too expensive in this hot path, and we already have - * all the outcomes covered: if the backend becomes NULL right after the = check, - * vhost_transport_do_send_pkt() will check it under the mutex anyway. + /* Fast-fail until the guest first enables the device (SET_RUNNING(1)). + * Before that there is no listener, so queuing is pointless. + * 'ever_started' is never cleared, so once we're up we keep queuing + * across later stop / CPR-pause windows. */ - if (unlikely(!data_race(vhost_vq_get_backend(&vsock->vqs[VSOCK_VQ_RX]))))= { + if (unlikely(!READ_ONCE(vsock->ever_started))) { rcu_read_unlock(); kfree_skb(skb); return -EHOSTUNREACH; @@ -640,6 +636,11 @@ static int vhost_vsock_start(struct vhost_vsock *vsock) mutex_unlock(&vq->mutex); } =20 + /* Set 'ever_started' flag on the first start; never cleared, so send_pkt + * keeps queuing (instead of fast-failing) on later stop / CPR pauses. + */ + WRITE_ONCE(vsock->ever_started, true); + /* Some packets may have been queued before the device was started, * let's kick the send worker to send them. */ @@ -728,6 +729,7 @@ static int vhost_vsock_dev_open(struct inode *inode, st= ruct file *file) =20 vsock->guest_cid =3D 0; /* no CID assigned yet */ vsock->seqpacket_allow =3D false; + vsock->ever_started =3D false; =20 atomic_set(&vsock->queued_replies, 0); =20 --=20 2.47.1 From nobody Fri Jul 24 21:29:48 2026 Received: from AM0PR02CU008.outbound.protection.outlook.com (mail-westeuropeazon11023073.outbound.protection.outlook.com [52.101.72.73]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 157713BB12C; Fri, 24 Jul 2026 11:46:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.72.73 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784893564; cv=fail; b=ASyHQsSRbvhG0DtlhwNUIG5DlA/zqdixOSmSjhfYllN5h57M1KL1ukpyvrbL0te0DNvY6J0+f0t7JI/JXWSs02QG2C5qGsimtS8QA0hRKj/1fVZFnVWj8XD1+FsXce4v3BwEc1VEYqOu7CjyJfM5TBQVabIv3+Y+G8A0Hrnd3Mo= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784893564; c=relaxed/simple; bh=ySILu8+ErvN5Uw68u9kWzp+Im3b/dEmiNtt4DJE2Jqs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=TGKIl8wgtKc709Y+ohbMBdQBLvkB66ZDpbqkq3u92EJriE5HDx0IctShQG2s8ZnddyVpS3znC6EZYohMWD0mDWeznwTT48LYvkDyWpEYNqU8NWbDhq4QQC6hL9DYcMakmKOuCRvmpbROA/k36zKcRTwuSj35Z/ShNEgDvBaS544= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=virtuozzo.com; spf=pass smtp.mailfrom=virtuozzo.com; dkim=pass (2048-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b=bLKTcPlO; arc=fail smtp.client-ip=52.101.72.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=virtuozzo.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=virtuozzo.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="bLKTcPlO" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=AMIzuPIdn6b4DqIC9wAf/lBoj37I5gnjS06/4/oVYdQSTM128NXc/4ZV+qEh08u/ws2+g+ETPu9sDqNHzdKDcDaE4rpO+88cIfXRC/0AxQ2NkBZ2z6Y5zlxhZDhPD/ce4DUz5NS1I5PYSPZUjG10qP/Bt0X4uEsGNgNTUhpQmwnUozGGITDpqEn/l9NYi0IsPWq0cWSIG78+YM9pQHAx05FPKqJWFVtYRCOCqWPY2Jc+O02EWI9eZSZz6dI8bWOuLGgs/BA1VpRmBgTzol4KLJTpXyFksfDTXlk5tTEfRu9R0z6M611EHP29p+ea3Mh53T8uTZT6KRYWJt4qjPJ18g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=VmdejHUWaFQG1C+6G1uBJZLM+M+UEopKDqENouDCHWc=; b=YTVEH7eI+q5rkLjAbFWDpIOI3XwmYp5MbAKMYfPVzZLZhgFCqGJLzLSyXRcDLVeh5YlEqKvFVXzIl4GvmKDfz1vpMT+85LFHbpH0VLqJROR+CncvdYjXF/Uy5B71hON7qDK4u0nZnyCT26XLj/Yxi89TniMkJEL1GG3cgawZ8SHwSMKKTuIFZ9O1fJIqm5fwrSiZcEH2R7vZ2aKJnZ4yjg+A0gEXhRIvi3KOXwRE/GfrBrtpCYnBj+qD8P7IRjjvFg2IGG+1Z6nU4LrgVpUEVae40oNuTd7OWdyA7l5kWSLvnBzUHjIZvB8ACsyKjQzNYpMB06sNHhkjBxWU0HV5nQ== 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=VmdejHUWaFQG1C+6G1uBJZLM+M+UEopKDqENouDCHWc=; b=bLKTcPlOfnV4QyLM8bPspCwzZwUW1GSyeSM/yq7oGSZwshylkYmLnKqcH6ChV5Bzd0wxtD87u7h4db3EuyFUv0DV7//lNWEbx5etR1UZnGUvm843pxCFsnp1CAZmI2TLPfWfWcvm0mj5FcxDDG3imteA8MS2Rx3ZV58MFisVeuvwDVmJ295IKFVeurBHbKX/qNxKX17OpvGcEn100Pd17lC+UmS2WjgQ3rUV6tZuNok9GwgF0HJg5fw8UGTNQIvhKQ068awMsdq4Vgf11mLTLiuI65FaTcoNVu2S7UCa5M9Kzm0K9AfZvhuN3hvGRQjMzOdxzeHmA7+RaFzqc51b7A== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; Received: from VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) by VI0PR08MB11775.eurprd08.prod.outlook.com (2603:10a6:800:311::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.11; Fri, 24 Jul 2026 11:45:53 +0000 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8]) by VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8%7]) with mapi id 15.21.0245.010; Fri, 24 Jul 2026 11:45:53 +0000 From: Andrey Drobyshev To: linux-kernel@vger.kernel.org Cc: kvm@vger.kernel.org, virtualization@lists.linux.dev, netdev@vger.kernel.org, sgarzare@redhat.com, mst@redhat.com, stefanha@redhat.com, dongli.zhang@oracle.com, maciej.szmigiero@oracle.com, bchaney@akamai.com, mark.kanda@oracle.com, ptikhomirov@virtuozzo.com, den@openvz.org, andrey.drobyshev@virtuozzo.com Subject: [PATCH v6 3/5] vhost/vsock: re-scan TX virtqueue on device start Date: Fri, 24 Jul 2026 14:45:40 +0300 Message-ID: <20260724114542.734623-4-andrey.drobyshev@virtuozzo.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20260724114542.734623-1-andrey.drobyshev@virtuozzo.com> References: <20260724114542.734623-1-andrey.drobyshev@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: VI1P190CA0001.EURP190.PROD.OUTLOOK.COM (2603:10a6:802:2b::14) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|VI0PR08MB11775:EE_ X-MS-Office365-Filtering-Correlation-Id: a538801f-cc60-40b8-a1bb-08dee9791ddd X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|376014|7416014|52116014|1800799024|366016|56012099006|10067099003|22082099003|18002099003|38350700014; X-Microsoft-Antispam-Message-Info: sPfX+8JxTahxb0J3M9LD96/5+0fZwkBv6b2NdQ/sVhSHbvQDyPvnt0LNJRJc85gZyi/WwXZU8+7fRuXQj1Ct/2yPlLKXya0Z58acSeUyzQv3aSUCFl9fjARVMltmdkjt1SZUGisll9IzM2u3CKqoAjufTsQxs8ugAEJIEE0Do9j5NiZGjlRQyXOFZ+GbsbF/JZOTAiYHRehfRcPwr6zGKECSMmKQq+zq6J4UwNAt4xKIccvlcQKAqpo+HJXx5anRRoHUFYJkA4ZNKPeiLqguOVDqCOQIznFuSXob/8AX5OYCOfD7Q/uOB8Pf43cwx9h4Tw1hbeTYbQV/NtwHNdu3guwvvmfvq7jyJfDb3UoCcytb8ghu8nh8uINhdpxg0+XVOmJFs9BIO6qBdkSVSNFBM0vDJ0m2CcyVzrPVa0if9WSrj+qYmgVOmy3LOGdh5fSvq1UjRxSP0jOAnbWy1WzMTHE5JEOdBUkxMkU0xoZS+vV/qCrcdU1l1jl6FGvQYHCajWmkspPAc75Mm/Q1WAdOppvgGfw9VIWKF1nZIXAr96qi1phn20dkvz6BMcJSzvD67uMOwew0x2S22UBn+YIJKj9eLFAC8Ezstqw9AUZNSq4YypPVxiaefQRieE5tiSj2U4Du+oIm7A2vMmYiqtDryTDs08tF7GMvMPb36hY4XWKLC8agrUi98iBby+YB1X8GukW+rw0l9rEz2noC6Yw6V9yI73WSfGaaM6cRXEXcDQU= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI0PR08MB10656.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(376014)(7416014)(52116014)(1800799024)(366016)(56012099006)(10067099003)(22082099003)(18002099003)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?H/YPcf98g05e9q0aYK1XJK5fdpd99CEJtVR1nTSXnrDyyyAL1x1vlR8Ivfrm?= =?us-ascii?Q?fa2k+aCcQfIOKaitxQHCitKgsetVZmPSxr2dGzvgsjzHHLDApQNYzctwAT8Q?= =?us-ascii?Q?I93Ebte1r+gRLI5nYeGOaoLXmRWK2nfEXPq4fibUmSmCugc/ASMPIdHTfzgc?= =?us-ascii?Q?zoxzWNiTJFlCtIBEwj94izGs2/lxnzRUtAOloKGdMzsDHZS8gjLAIwihoI5S?= =?us-ascii?Q?rN8Cmwa2wO9HMGqDqOSVLoVr3pJOQP4tfvg2zrwaSTKliGcQvlwiob63lEiN?= =?us-ascii?Q?jATPA2kE4WHahgINOUTHtPhCV9OWUiLe6hkkh18MY5lLqU/T8pUDiHTFtvgY?= =?us-ascii?Q?FPQc4FhLyjDZ+Qd11bF2PfbEO/b/BQU9h0sC65+Vy4Il9G6Na8x3ZziOxtqo?= =?us-ascii?Q?iAMA4uBbvoQR9ci0UmLIK+LC3fmJwghDnsu4BV/gkMPjNRHLZExTK5ywb0pS?= =?us-ascii?Q?0uGI6xvelYNnaCdx8j0hlNJySZzFF5Lkqp4sprGuBbM9SsvK8jFpHK/sh5Qa?= =?us-ascii?Q?/psQC2MSZ2mgPmcpdtJk+s/0lFOKlUIEJ5LfUxIhtoP9qB1ZsWrl8x6ha5eW?= =?us-ascii?Q?MrcnWPutgsquGDRva7qSRSUV5ac+OxVJ/mYsvQl885AOShxd194/TLJTgtCo?= =?us-ascii?Q?bctlmRHwxIF+LvZ+DZPNDhNyrs014BS/8srEDR9hEfAUY8I/OqUAZKKXEULc?= =?us-ascii?Q?5jCQfBpBOZNebUmIaCtW01Ue97kAcU7fJ7YDpWbh2gLNzX4mPcEpTe9Yqu6W?= =?us-ascii?Q?eBLLyZ2mOeMcH1MtIaifrDxKw0FTvKLz+db10b67p9AONva4rGyGkXgVuX3I?= =?us-ascii?Q?YCpfTuInCw1rtYCfqnAWPxOqgwGeEieajJH2fgHjMfUlXHJEoMESQJ9sv/jQ?= =?us-ascii?Q?BoYzF6ju+YXArMshZjqq38oT5Nd5PSZ8cyn7qlvIxs5sDAlgHQjmwfLSrPen?= =?us-ascii?Q?V0AFg3UIPvoUtzjiVeHrP3FOiZNxz8L1joZdsoJ7Rtrt1UGXlVCbGjdgwZu/?= =?us-ascii?Q?JjxfpkyAC4BMFhU9Hpn1BszpBuP9fIkS/ZrZROKCIdy2MMwb2A1HSlcEv8Tz?= =?us-ascii?Q?DQoiExuWZeIAEk/s2cmtxB6Kwn+CNZEc0v7JWR+6ZyP48HRHO2uIZH7gFocn?= =?us-ascii?Q?KHhob8/UtnjukCafUfV259LwIZFsRUY6t57YQM71K11pZVoCPKjWKJI16Qhr?= =?us-ascii?Q?oy/uJLqJwdmGLeeQGr4vida8ppoxqBd4hhWRpkkUENZ/pphpgdOKupam/twd?= =?us-ascii?Q?EB9GaQtyKLU+K407D6ZzuIOItgxLLZSXFT3J/6PGX8N/cJ2JL0ul2DHCSIfh?= =?us-ascii?Q?c2qW/SBhXRBuwiQ7fd3UGzHRzYyoNQJ/5IIQJGzUBfJTMYHarKdWdbWYnA0M?= =?us-ascii?Q?KZqEbWvWO01RL3VZJZMrvKezaNl7t071ejAtCFK05+pVn01V1cPjAzFenq7S?= =?us-ascii?Q?ZJyTTvWjgFhFkDuoX5AveimFGTnkOAQD1AQPkWnarvh88dAS/zsVAps14JCl?= =?us-ascii?Q?xjOZh7JitnDI67bRHwbP+Qvbo4L9YGFKL2J1k3Yd0ZT5CoUh/+b4lnYjCBGO?= =?us-ascii?Q?46bi3ahegvOtSepKUJgyOX1ajoHxkYZJ6xXxy3Fc1nArWGqWPvd4ch22fYft?= =?us-ascii?Q?YyTmqgRB3NhVggs9BOeGDhgNsCzipzO/6+A4F2B5qBdaPd8C1XFlCKqRwEoh?= =?us-ascii?Q?1IwmWrB+3uNS6wR1ZP49tdSQkZg4GbM85sqthiZ6PanEpgwOT22KzjNk7Af0?= =?us-ascii?Q?7bmByoDMrPQeVgfjq4GqOUY6KUpmJJU=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: a538801f-cc60-40b8-a1bb-08dee9791ddd X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jul 2026 11:45:53.5899 (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: 1rxTlv0Ifs+qiHvKKMOTjD6igLVRRIuhGggKkf60WnVWvBtlAg6WlDhzmQ/9S0lkGa7B1/2EwUqo0TccZ3XPjyzij2v7HLaVF8A6yH9z06U= X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI0PR08MB11775 Content-Type: text/plain; charset="utf-8" During QEMU CPR live-update (and VHOST_RESET_OWNER in general) the guest keeps running while the host drops and later re-attaches vhost backends. If the guest adds a buffer to the TX virtqueue (guest->host) and kicks while the backend is temporarily NULL (between vhost_vsock_drop_backends() and the next vhost_vsock_start()), then the kick is delivered to the vhost worker, handle_tx_kick() sees a NULL backend and returns, and the kick signal is consumed. The buffer is then left in the ring. Then upon device start vhost_vsock_start() only re-kicks the RX send worker, never the TX VQ, so the buffer is processed only if the guest happens to kick again. But if the guest itself is now waiting for data from the host, it will never kick TX VQ again, and we end up in a deadlock. The issue itself is pre-existing, but it only manifests during a device pause caused by VHOST_RESET_OWNER. Namely, the deadlock is reproduced during active host->guest socat data transfer under multiple consecutive CPR live-update's. To fix this, in vhost_vsock_start(), after kicking the RX send worker, also queue the TX vq poll so any buffers the guest enqueued while we were paused get scanned. The VHOST_RESET_OWNER ioctl itself is implemented in the following patch, thus this patch is a preparation to support VHOST_RESET_OWNER. Signed-off-by: Andrey Drobyshev Reviewed-by: Pavel Tikhomirov Reviewed-by: Stefano Garzarella --- drivers/vhost/vsock.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/vhost/vsock.c b/drivers/vhost/vsock.c index 27169a09e87e..d5022d21120b 100644 --- a/drivers/vhost/vsock.c +++ b/drivers/vhost/vsock.c @@ -646,6 +646,13 @@ static int vhost_vsock_start(struct vhost_vsock *vsock) */ vhost_vq_work_queue(&vsock->vqs[VSOCK_VQ_RX], &vsock->send_pkt_work); =20 + /* The guest may have added TX buffers while the device was stopped + * (e.g. across VHOST_RESET_OWNER) and their kicks got consumed by + * the NULL-backend window. Re-scan the TX VQ, mirroring the RX + * send-worker kick above. + */ + vhost_poll_queue(&vsock->vqs[VSOCK_VQ_TX].poll); + mutex_unlock(&vsock->dev.mutex); return 0; =20 --=20 2.47.1 From nobody Fri Jul 24 21:29:48 2026 Received: from AM0PR02CU008.outbound.protection.outlook.com (mail-westeuropeazon11023073.outbound.protection.outlook.com [52.101.72.73]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A4B9640BCB7; Fri, 24 Jul 2026 11:46:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.72.73 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784893569; cv=fail; b=DJ9Emkekb3fZ2MBmn16API6z+5KZVEFgETPsJdTKShvkz+2O9Cw1J5nw7pJ4Yt+p4/JJeFJCXYjVwKnJWz/9v8l+yz5V6c4d+qmWJtQdW3KLeVFxD1uT6a5uIoRfV7kDVCmEF9x7hN/4GdN9L/LxBEWFbWKDUULe2/vB9K6HI+U= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784893569; c=relaxed/simple; bh=l0+2ieEzqXI6KiK5z3yF9+DvjFECEhIWjYpHQcPxte0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=qjgSBtcUfuhA7uGBp9VtGmUl6IvutsHRk+WGms+VbAfiW+kiWQndxC8HDxEwV7btaXI30l9+/u+fjJs0Avqaikdr54IaTSlYblrfJjy+L0rqLr+n1uGLj7rxLbj3EhPsv6nC4P2sArJlEupILfPld6Vt4RI4osbsn9jzDUhNyj4= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=virtuozzo.com; spf=pass smtp.mailfrom=virtuozzo.com; dkim=pass (2048-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b=X/jTiFra; arc=fail smtp.client-ip=52.101.72.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=virtuozzo.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=virtuozzo.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="X/jTiFra" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=vJD3m0Gc0vkUIhUClOMajNejRu85a3hDvOypKCY29ZSOb0N0pYNq94ns2sRM2KkvL3jx8l18FF8+OeugAxaMd2CN2j9FdvYl0C8Zc6/cy4SJXYvq+qep7Jz9mso09h43z0y8ct4R4SiLxoJwtg6n8gfklkk8ipIRIft8vE2ojuR+7tvBMcUW1qndzAE/B2qZcQNRPHP7zh6PTZOKgS11EVZt7jwiyAm4hn7noqr+kxcGh1waxfdUzFd8E9+L4S961OmllWwCuVDVreQlXyokI6T6JYVp4fiXRU+RkxtL2Thoe0CS4qY7J7N70qZq7Ilm9wjJSanwgtthGIJkvRokZQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=hC1LJ15Enwc+q+qkrePWun9zc0LMVoMe3tdfHLIURaU=; b=GzDjMNcSqgO9RKCQZ4RZDBB11OQgOeay+h7XTanDfle3ZcSi1OakisEYQHBrGy/CSEBJw+NC1XEM1PCP5nWnuzqrpjmh/qJ3/GNu0O/wDcgCqoi7NuWSow5uy9mSgpgost9MUBvNuy/oY/IAhalDQa+TAzj2XQ4WrLEm8Gf0p7lyTsjzHxpp7GlIfG4S7HQ4QdXB48l4XOzYWqSnDTj3mBa+J4UCbRu6zMuHiUBA00MLzpnCXev+QfHhfZt0qHSXzy/KsNwUnkDziXGoa7wgPw6dwd4+JX73B2ojFa6r0rXUEXZpmIc4afzU4I/28/UqL5fY2KVGS/vS0IYGe9l2IQ== 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=hC1LJ15Enwc+q+qkrePWun9zc0LMVoMe3tdfHLIURaU=; b=X/jTiFraunZD1fFRkUY/RgUC+mAHWk+75nCtGrlbWFUkdlmAJnZ/6UOnkkizxHsfOIqczFjTHjB3+XgMGJ6ENv8rg9UmKGlotZMkLHcOYRkybrGl6SFk9Zp4MBy1ErpsLL4c7LxFCgT8eEcuz6nfotqrdxz3fSjEdVJBZMICHFz2Ld/hxahrCQ+vCYK13zDBwTODt4vmVBt1w8gAdYhJq7wQhzute7vV/l8xWP/wg9RmFExaqM1/c8jywW1JJNvAGgyF0LkqLe6jb1Ou3SK19VLza8uGKOTwtlD9wQfwlFsYSKtyVOJVqNdSrWhQMoHbswHkIQnXGbnvB6AvNNlotw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; Received: from VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) by VI0PR08MB11775.eurprd08.prod.outlook.com (2603:10a6:800:311::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.11; Fri, 24 Jul 2026 11:45:54 +0000 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8]) by VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8%7]) with mapi id 15.21.0245.010; Fri, 24 Jul 2026 11:45:54 +0000 From: Andrey Drobyshev To: linux-kernel@vger.kernel.org Cc: kvm@vger.kernel.org, virtualization@lists.linux.dev, netdev@vger.kernel.org, sgarzare@redhat.com, mst@redhat.com, stefanha@redhat.com, dongli.zhang@oracle.com, maciej.szmigiero@oracle.com, bchaney@akamai.com, mark.kanda@oracle.com, ptikhomirov@virtuozzo.com, den@openvz.org, andrey.drobyshev@virtuozzo.com Subject: [PATCH v6 4/5] vhost: synchronize with RCU readers when freeing workers Date: Fri, 24 Jul 2026 14:45:41 +0300 Message-ID: <20260724114542.734623-5-andrey.drobyshev@virtuozzo.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20260724114542.734623-1-andrey.drobyshev@virtuozzo.com> References: <20260724114542.734623-1-andrey.drobyshev@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: VI1P190CA0001.EURP190.PROD.OUTLOOK.COM (2603:10a6:802:2b::14) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|VI0PR08MB11775:EE_ X-MS-Office365-Filtering-Correlation-Id: 96191f5e-e2c5-450a-31ca-08dee9791e3f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|376014|7416014|52116014|1800799024|366016|56012099006|10067099003|22082099003|18002099003|38350700014; X-Microsoft-Antispam-Message-Info: bSLvzWDqf11bOAjWYFsg8T9IWX5AslP6XvCL146VmTri3k2ke7fGO2f/1XfALNTz3qRI9F77RfvAojETC7C6p8xzr1Y2DCNNXIuQGuFF8swd0hmRh4lP6tBMMxq0aL68uMzfWUJxf85dOB5ZmIBXmSrWPR0lIHwaxC/nVWxEjShLYwVMoSQ5kKs3hxwCulixbYf3NlItEZc5A1eXZEb9RRhI4AVIs4T2EQPytpELtNf8rnPz5ZxH0sSkGhTyay8AmRx88i//VferJ5fZp2T9D3ASUu0b5lalcAz179PHwAzqbzUhSygP5yREZrGPy1Q2ZBfdLRK75mXo4f1XqgGqWW1LY4dJVUZHfe02nphlkdoMCBhQnXJN3+GwKV9fLw4taPm9VwdddzGME5QXE7Pza4YCFlwTsA/ewREIO5s6m7aMVWDQyE9uYmBn4JqXhqBZTS7TKWAqIjdcii0qaYyP5fAGTODdDSWPbUzqApHcZQgvCzITVxhGUknx0SYfc0M24ia3OSnztLYZr2G+TLwwQzfRAhDbVOVQLs0qcWeTVgjZzMjaA3aAhmyTHyDh2rOTGrEIK8h7ah0xITJI/UbxamZfJ1iyIZkzkd9/BosuLVFhj27n6qDTCsEpKvV2iEXUw0FZkWdOMJxX/4HLSIFMBc4VNLSkFyTY61q33T+A0flyhFY6j4ra48YVbKx1Kp+dXIpiohGMvW4StcUbzrqtER9U6mntYJ5+Cv2m3QZMGjA= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI0PR08MB10656.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(376014)(7416014)(52116014)(1800799024)(366016)(56012099006)(10067099003)(22082099003)(18002099003)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?3e13WaWTn7C8QBBYkCYrVWasuwt1+xr/lZWl9I0j+ld9qqlicIeaaPm0mpg1?= =?us-ascii?Q?NlCsx2lGuysenY/KOFErCdkuiqsThxNs2tF2AbNFZqab/FhEqOJtaqLqMekR?= =?us-ascii?Q?Qpc/8cFoL4lBoy+moRKcD3NqU5gPyINUVrlKVldr9d4i+b1deAI4MWvroCaN?= =?us-ascii?Q?VGM/7HLBwmVNtsv/9erjHlX8+skXR18C9DS092GYwF8kpchnyYFNzSbOYmKC?= =?us-ascii?Q?X3vf4GtE2DvL9z+Lw78uqfHmXSkCJWuC/9tUgs7DhFG/ZQIKtpxhXcZsEcIz?= =?us-ascii?Q?Rb7kwKLl+Mt4TnZDjobla0F8baXf35DG5jokhuDIQy2Qnka4Za6s3kpO/z7l?= =?us-ascii?Q?jdHhLWsUHLz+O+QEu+sBBqNHIHbz31tTaXwXpPfEz9mpkWtTAGf2VhK6l6PX?= =?us-ascii?Q?O829LntXtAjmRnHZz20IX8nvHMEPPRHjH6AuEfDJTo42ylNEaacmrY15FL7H?= =?us-ascii?Q?9Ty44+P47o5u1TY7EoX74U9mE4ZUwcWwMMCHpWFxp0f5vLcWK+82MD26NfuA?= =?us-ascii?Q?d/x2TRMWPvW4IDoUeVzELnzD4I02lkohNM/o76mpUrVOTox8tuWGG+nGWvp6?= =?us-ascii?Q?9SvHYK6q57nSnMKLZMZYze+Bt9Acr1fc4qBpdSgSLD7lUvjhsSLsPGbVESJt?= =?us-ascii?Q?pend8TfJpRQqdB/cD4gRlH1oxdlhK4pOWBa2lZPUY1aRCyrisjJxMm8pfKk+?= =?us-ascii?Q?GAzV7DLmESyILqOoP8TwotyHPf+4OXS3wuTfXJWgaXDizZyPQulP6+K/WcKZ?= =?us-ascii?Q?xMHGHWZIk/3/3G78x3ygTTLy+xmuSbdCC0e+fAN833hwDCJVwKc+TSNuzSYi?= =?us-ascii?Q?lkunvTaRVxq+2PBk3d0RXAfRlfMMZoN8+z4F384SRuUPX7I0jZ0WaWZTrxEJ?= =?us-ascii?Q?VX1Kjo80eVbnuUxxwRgNx9Ez3rZYWuTgGmFVcdho1R9ctAlnkjSHmzV90E8u?= =?us-ascii?Q?SP7vPbiFrSFwHFe5HA9n7k5hMmIojvdKYQSAhb9v/oaunDH5IXh68qemW560?= =?us-ascii?Q?9brObK+qR0+zzqJjH7IMlvtwa/BBqj8IouwseFxRX2JjTeFvriYw2hDTodJP?= =?us-ascii?Q?8wRutHVPxejhe8es1dnLVCGNZdgjuNBLIE6uqsCRy6JZH42VUvPxeKrWsFa3?= =?us-ascii?Q?g8ZZ9GROkbkVhJhvXcl/1SbJnBqdFjvh8birUQagnxRlz3rUKT+JACL5Z1eR?= =?us-ascii?Q?6XJpOgm0ZfH8gerQbEIKAtxgEvRsSU+np/G8Op9GpwkINorHihubdFV/gvaG?= =?us-ascii?Q?H0JP2FSv5nDX3MGPrGJhxjEv0MF+4cZ8c+UIP3PMW9b0fSsB0hO5OB8URkm9?= =?us-ascii?Q?xL9eAg0D1+zyebx/foo7e6BVpu4NQ9jL5JR7dg0fV8r7vnedlftvD+MGoufM?= =?us-ascii?Q?bHj07MyE+2OrJ8xNqUyCUsRV/VEX5kjxLOhQ10+HfDJdlbYApcSrUXQpx38q?= =?us-ascii?Q?9cTYnh7GNUdtrM6BmiPNMT7ANwmUd9+u0NK+kfw6u/9/Mer0R2M732Bc52FI?= =?us-ascii?Q?TNvVI07Kdeazy5n8529uAlmN/HHVVBNYc6ad0x1Am2MSeklYGhnqS9rrDUeH?= =?us-ascii?Q?DLgdI9e3MDC03kWWXb/ZAnKyPuvVwmwezabGwEbpOcwhtKA+mjG2DwIr++o2?= =?us-ascii?Q?qCftkYlhAIBNM+gLWll4O+E+Nz3joa2zPIlttOraTZRQ5DnyhI4yHu0UZKw8?= =?us-ascii?Q?HBNjViO53q/XTvjYL0x2rClBaEjbGj+WKC9cVUnDHQNFAJWON/Tkdq6QHVdJ?= =?us-ascii?Q?X94dPhs9rijmzo6rPJ2wxFf8HTmnVG0=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 96191f5e-e2c5-450a-31ca-08dee9791e3f X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jul 2026 11:45:54.3014 (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: 7WqnLb8fFywYpninM6PcFQxN7M7B171twmPgLrr4IJDqBARu8/0fBI/55Xm6UvUTWwPqbvWMunu0gqnr9oaiamGuxPlEWFrI6X2diYj5XMs= X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI0PR08MB11775 Content-Type: text/plain; charset="utf-8" vhost_vq_work_queue() only holds the RCU read lock while it dereferences vq->worker and queues work on it. vhost_workers_free() however clears the vq->worker pointers and immediately frees the workers, without waiting for a grace period. A caller that fetched the worker right before the pointer was cleared can therefore still be queueing work on it while it is freed. And even when the queueing itself wins the race, the work is never run, so its VHOST_WORK_QUEUED bit stays set and all future attempts to queue it are silently skipped. None of the current callers can actually hit this: net and scsi stop their virtqueues before the workers are freed, and vsock unhashes the device and does synchronize_rcu() of its own in vhost_vsock_dev_release() before the workers go away. But the upcoming VHOST_RESET_OWNER support in vhost-vsock keeps the device hashed while its workers are freed, so the lockless send/cancel paths become able to race with the teardown. Fix this by threading a bool 'sync' param through the chain: vhost_dev_reset_owner() vhost_dev_cleanup() vhost_workers_free() When set, after clearing the vq->worker pointers, wait for a grace period and flush the workers so any work the last RCU readers queued runs (clearing VHOST_WORK_QUEUED) before the workers are freed. Only the vsock RESET_OWNER path (added in the next patch) passes sync=3Dtrue; every other teardown has already quiesced and passes false, so they do not need to wait the grace period. Suggested-by: Stefano Garzarella Suggested-by: Michael S. Tsirkin Signed-off-by: Andrey Drobyshev --- drivers/vhost/net.c | 4 ++-- drivers/vhost/scsi.c | 2 +- drivers/vhost/test.c | 4 ++-- drivers/vhost/vdpa.c | 4 ++-- drivers/vhost/vhost.c | 26 +++++++++++++++++++++----- drivers/vhost/vhost.h | 5 +++-- drivers/vhost/vsock.c | 2 +- 7 files changed, 32 insertions(+), 15 deletions(-) diff --git a/drivers/vhost/net.c b/drivers/vhost/net.c index 3e72b9c6af0c..fd089412c020 100644 --- a/drivers/vhost/net.c +++ b/drivers/vhost/net.c @@ -1452,7 +1452,7 @@ static int vhost_net_release(struct inode *inode, str= uct file *f) vhost_net_stop(n, &tx_sock, &rx_sock); vhost_net_flush(n); vhost_dev_stop(&n->dev); - vhost_dev_cleanup(&n->dev); + vhost_dev_cleanup(&n->dev, false); vhost_net_vq_reset(n); if (tx_sock) sockfd_put(tx_sock); @@ -1661,7 +1661,7 @@ static long vhost_net_reset_owner(struct vhost_net *n) vhost_net_stop(n, &tx_sock, &rx_sock); vhost_net_flush(n); vhost_dev_stop(&n->dev); - vhost_dev_reset_owner(&n->dev, umem); + vhost_dev_reset_owner(&n->dev, umem, false); vhost_net_vq_reset(n); done: mutex_unlock(&n->dev.mutex); diff --git a/drivers/vhost/scsi.c b/drivers/vhost/scsi.c index 9a1253b9d8c5..b6002b64cf42 100644 --- a/drivers/vhost/scsi.c +++ b/drivers/vhost/scsi.c @@ -2350,7 +2350,7 @@ static int vhost_scsi_release(struct inode *inode, st= ruct file *f) mutex_unlock(&vs->dev.mutex); vhost_scsi_clear_endpoint(vs, &t); vhost_dev_stop(&vs->dev); - vhost_dev_cleanup(&vs->dev); + vhost_dev_cleanup(&vs->dev, false); kfree(vs->dev.vqs); kfree(vs->vqs); kfree(vs->old_inflight); diff --git a/drivers/vhost/test.c b/drivers/vhost/test.c index 24514c8fdee4..84ed9ea81219 100644 --- a/drivers/vhost/test.c +++ b/drivers/vhost/test.c @@ -163,7 +163,7 @@ static int vhost_test_release(struct inode *inode, stru= ct file *f) vhost_test_stop(n, &private); vhost_test_flush(n); vhost_dev_stop(&n->dev); - vhost_dev_cleanup(&n->dev); + vhost_dev_cleanup(&n->dev, false); kfree(n->dev.vqs); kfree(n); return 0; @@ -238,7 +238,7 @@ static long vhost_test_reset_owner(struct vhost_test *n) vhost_test_stop(n, &priv); vhost_test_flush(n); vhost_dev_stop(&n->dev); - vhost_dev_reset_owner(&n->dev, umem); + vhost_dev_reset_owner(&n->dev, umem, false); done: mutex_unlock(&n->dev.mutex); return err; diff --git a/drivers/vhost/vdpa.c b/drivers/vhost/vdpa.c index ac55275fa0d0..427c4a34db2c 100644 --- a/drivers/vhost/vdpa.c +++ b/drivers/vhost/vdpa.c @@ -898,7 +898,7 @@ static long vhost_vdpa_unlocked_ioctl(struct file *file= p, case VHOST_SET_OWNER: r =3D vhost_vdpa_bind_mm(v); if (r) - vhost_dev_reset_owner(d, NULL); + vhost_dev_reset_owner(d, NULL, false); break; } out: @@ -1396,7 +1396,7 @@ static void vhost_vdpa_cleanup(struct vhost_vdpa *v) } =20 vhost_vdpa_free_domain(v); - vhost_dev_cleanup(&v->vdev); + vhost_dev_cleanup(&v->vdev, false); kfree(v->vdev.vqs); v->vdev.vqs =3D NULL; } diff --git a/drivers/vhost/vhost.c b/drivers/vhost/vhost.c index 4c525b3e16ea..b18429b15d32 100644 --- a/drivers/vhost/vhost.c +++ b/drivers/vhost/vhost.c @@ -719,7 +719,7 @@ static void vhost_worker_destroy(struct vhost_dev *dev, kfree(worker); } =20 -static void vhost_workers_free(struct vhost_dev *dev) +static void vhost_workers_free(struct vhost_dev *dev, bool sync) { struct vhost_worker *worker; unsigned long i; @@ -729,6 +729,21 @@ static void vhost_workers_free(struct vhost_dev *dev) =20 for (i =3D 0; i < dev->nvqs; i++) rcu_assign_pointer(dev->vqs[i]->worker, NULL); + + /* + * This path can be reached by lockless work queuers. In this case + * vhost_vq_work_queue() reads vq->worker under rcu_read_lock(), so a + * RCU reader that fetched a worker before we cleared the pointers above + * may still be queueing work on it. Wait for those readers to finish, + * then flush so any work they queued runs (clearing VHOST_WORK_QUEUED) + * before the workers are freed. Notably, that is the case for the + * vsock RESET_OWNER path. + */ + if (sync) { + synchronize_rcu(); + vhost_dev_flush(dev); + } + /* * Free the default worker we created and cleanup workers userspace * created but couldn't clean up (it forgot or crashed). @@ -1148,11 +1163,12 @@ struct vhost_iotlb *vhost_dev_reset_owner_prepare(v= oid) EXPORT_SYMBOL_GPL(vhost_dev_reset_owner_prepare); =20 /* Caller should have device mutex */ -void vhost_dev_reset_owner(struct vhost_dev *dev, struct vhost_iotlb *umem) +void vhost_dev_reset_owner(struct vhost_dev *dev, struct vhost_iotlb *umem, + bool sync) { int i; =20 - vhost_dev_cleanup(dev); + vhost_dev_cleanup(dev, sync); =20 dev->fork_owner =3D fork_from_owner_default; dev->umem =3D umem; @@ -1197,7 +1213,7 @@ void vhost_clear_msg(struct vhost_dev *dev) } EXPORT_SYMBOL_GPL(vhost_clear_msg); =20 -void vhost_dev_cleanup(struct vhost_dev *dev) +void vhost_dev_cleanup(struct vhost_dev *dev, bool sync) { int i; =20 @@ -1221,7 +1237,7 @@ void vhost_dev_cleanup(struct vhost_dev *dev) dev->iotlb =3D NULL; vhost_clear_msg(dev); wake_up_interruptible_poll(&dev->wait, EPOLLIN | EPOLLRDNORM); - vhost_workers_free(dev); + vhost_workers_free(dev, sync); vhost_detach_mm(dev); } EXPORT_SYMBOL_GPL(vhost_dev_cleanup); diff --git a/drivers/vhost/vhost.h b/drivers/vhost/vhost.h index 0192ade6e749..29fb1f510a34 100644 --- a/drivers/vhost/vhost.h +++ b/drivers/vhost/vhost.h @@ -216,8 +216,9 @@ long vhost_dev_set_owner(struct vhost_dev *dev); bool vhost_dev_has_owner(struct vhost_dev *dev); long vhost_dev_check_owner(struct vhost_dev *); struct vhost_iotlb *vhost_dev_reset_owner_prepare(void); -void vhost_dev_reset_owner(struct vhost_dev *dev, struct vhost_iotlb *iotl= b); -void vhost_dev_cleanup(struct vhost_dev *); +void vhost_dev_reset_owner(struct vhost_dev *dev, struct vhost_iotlb *iotl= b, + bool sync); +void vhost_dev_cleanup(struct vhost_dev *dev, bool sync); void vhost_dev_stop(struct vhost_dev *); long vhost_dev_ioctl(struct vhost_dev *, unsigned int ioctl, void __user *= argp); long vhost_vring_ioctl(struct vhost_dev *d, unsigned int ioctl, void __use= r *argp); diff --git a/drivers/vhost/vsock.c b/drivers/vhost/vsock.c index d5022d21120b..87309c68af15 100644 --- a/drivers/vhost/vsock.c +++ b/drivers/vhost/vsock.c @@ -824,7 +824,7 @@ static int vhost_vsock_dev_release(struct inode *inode,= struct file *file) =20 virtio_vsock_skb_queue_purge(&vsock->send_pkt_queue); =20 - vhost_dev_cleanup(&vsock->dev); + vhost_dev_cleanup(&vsock->dev, false); put_net_track(vsock->net, &vsock->ns_tracker); kfree(vsock->dev.vqs); vhost_vsock_free(vsock); --=20 2.47.1 From nobody Fri Jul 24 21:29:48 2026 Received: from AM0PR02CU008.outbound.protection.outlook.com (mail-westeuropeazon11023073.outbound.protection.outlook.com [52.101.72.73]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BD6FD315D58; Fri, 24 Jul 2026 11:46:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.72.73 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784893572; cv=fail; b=b+GtPNl3660H0oBPlwZuz55fBfXQUH0OY/971WRyvTzvCk3xeRyWmb7A34bhEFWi2XewjGbKnflgXLZP94spYqCaPIREzEApWef7uc3yAcdS2Zd6/xl0qwpCUdMHWHFGeFEnBC7F4+3LrvjqOAxL5SfBHploA6DsfZuL8MQ+3d8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784893572; c=relaxed/simple; bh=Qn7GlmcEyU973Y36HRx2cSL3+zWzo2n9IzF4mzuDtTs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=UZDSw3RpXgdxLwqzV32I+qU4BJPMXzvlR0r890DiqnO3Krm5AD3HfjIFoSVYWzMvTV5BLhxSThM6bRwotswKPEVdlybkjCuCf8wpbs7B3xhI7RrPRrEFWrqd+wbrXfK6X8AYFnyxdZuwuIWKx/W2prxcChXgdDVaE+KdPtd2BvA= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=virtuozzo.com; spf=pass smtp.mailfrom=virtuozzo.com; dkim=pass (2048-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b=xVnRh5GI; arc=fail smtp.client-ip=52.101.72.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=virtuozzo.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=virtuozzo.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="xVnRh5GI" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=PkWld0SD+AXdAu3b14YzCR+tKP+njTbxdg8okvXqxyNtLG6+d0OXKMr7G30jts7chsgwPhqOwuH4k7H1t+LbOc1GyJ3ZLzLg22i3bpTHAS75RERt926sUuSzSoQIgCVNo5La8Z3GbS9yN33jHjdPppkS/Byve6S6UwcuYUD4AgVeRxghLmvM7bHlaFxan21CeWsNvqmduUXvF0WgSbtYqqua1BkXeAZQBN2QQXfvbK2pZ1+DZuhdA6JhM15CSwkXO3WxzQVisKS5G/QJA5DlStFDD6/yVa9puUvBxXKGsNFcrL4pxK+zKoJeowE/9owirPKokeQXCcYFFO3UR+MLGA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=LowirimV4TKla9sXoL1YSW9xOqXlum6OCEtXjy4h2zA=; b=StIQMR3k4mT9W7l66rMSgxr2gBRj0FeGdMGK7HvFDApchAjk5kSl6+MAZMMUamIFJ06QiecPICbzMK1ytNEYX4qDnBKoAbNHDSLNgRMA0KrBM2PKZZUDSWjRw3JHhTe0Kgiu21Nazl7SVleJzlmcivTdI3vaUTC+s8SiTfrY6xLFcrqRGwbSCtXOLEoKvrlZciU5wFHSocMqa+aMnj0yEaIa/zX3eZjiCNGvVwWKZRHDnUbnWaIJYmWmqrExRAQ0RxYDbWkdJcbuPUhP3N3EEKPPMEnpyJpMDwg8jgz6FTcW9Qs2st+1FgnnWmG49nCZ4Z0KO2VajrguQ9xN4wo+3A== 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=LowirimV4TKla9sXoL1YSW9xOqXlum6OCEtXjy4h2zA=; b=xVnRh5GIIqteUvt+p1yRAqr7oS8wAJlRSMcn1fmU2cjYzbAuWJeC+Vf7mlcxWFcTe0aEktbTYZx/WEMxsTGk60O3eM2dLJQZq3jg9Bqd18zqKi+mGKhAO7aoRpkqkD14e1ynhx6Sg/ZxQkNoRKnJuf03imVpDhqqewuIEMkqE9J2KoB1cGRAK5JYTuPNxGPXrlKEzN3zPlhmF6GX9t7oMEVvkwmPIluCadGwKcKiYx8An0/IPXfLv5SFYIsCTXz8EKtBU12B5IswOcOf3xG+AOsd2vVyhH5aJE6NWe6kmA/8NmDB6sFxuOgQroWuqXPhNaKkPqbk3ChtXPJc+ReJPg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; Received: from VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) by VI0PR08MB11775.eurprd08.prod.outlook.com (2603:10a6:800:311::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.245.11; Fri, 24 Jul 2026 11:45:55 +0000 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8]) by VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8%7]) with mapi id 15.21.0245.010; Fri, 24 Jul 2026 11:45:55 +0000 From: Andrey Drobyshev To: linux-kernel@vger.kernel.org Cc: kvm@vger.kernel.org, virtualization@lists.linux.dev, netdev@vger.kernel.org, sgarzare@redhat.com, mst@redhat.com, stefanha@redhat.com, dongli.zhang@oracle.com, maciej.szmigiero@oracle.com, bchaney@akamai.com, mark.kanda@oracle.com, ptikhomirov@virtuozzo.com, den@openvz.org, andrey.drobyshev@virtuozzo.com Subject: [PATCH v6 5/5] vhost/vsock: add VHOST_RESET_OWNER ioctl Date: Fri, 24 Jul 2026 14:45:42 +0300 Message-ID: <20260724114542.734623-6-andrey.drobyshev@virtuozzo.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20260724114542.734623-1-andrey.drobyshev@virtuozzo.com> References: <20260724114542.734623-1-andrey.drobyshev@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: VI1P190CA0001.EURP190.PROD.OUTLOOK.COM (2603:10a6:802:2b::14) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|VI0PR08MB11775:EE_ X-MS-Office365-Filtering-Correlation-Id: 6177ca94-703c-4b1e-efe3-08dee9791eb4 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|376014|7416014|52116014|1800799024|366016|56012099006|10067099003|22082099003|18002099003|38350700014; X-Microsoft-Antispam-Message-Info: CuQ5qOJ6go5/sv5/7A6CFqu+WVLAOP8iAD2gGLsdjzud8H3BdQrc1sK1/l1sDVWEsyOgUMBqPR0y9Df2fwjzmucXTIjYkLbXpMCPQW3iDkJAYgHUvf4pQpqU3PqkYEcFs+z9Og+ROZqx5A1HJqCCMxjDo1N+YC96sdNxsRQK/Zd1WekVwxVRr8eYuVKGjGx6S/FLeqbo0n4MfUutG05/DXDmcjIBDfcanRuxtSZF+69K4huLo4LK8yaa0g+iy5QF7dv5TaBDH9HBQiIKxrHzPnQXQ7aNAuv2WmJD5B+SHOkOvkeguXG9NMZpxyrcGWFyODRe5UeBa+reXluDuVaBrKPQ8VZYK544VxzuJBIDcd3Ny+FCi2w/1Ub5OMhdBRfC7vRPkPszvZGu6yfK6AkGi/XJhYSrruM/dsZmdj6VtgEotPSIw2xkVKTs8vnEEFq7ND8j0yPGHTTsz6KBr52JbIPM25Qw21taJT29niJNjn8Zsu74ZaNQhH3nYxSC5RG3p3tGLanBEXAfWv6OQ+GnKToLIsNn5Yl7Xe79GIepduPbcTBncB3zAfGbDkzM5ZXUHoiz0EEun2Y+jCTjKfQaoj8z8iKbP6JZcruAC5BHdOllmyIuOAF+vjw/VMUub0GlOdyHItQsrWELjPjozPzE0MzaBuBdFLoSaHezWuf9DKHxpjpm69VI8IDym8mztER/Lx2NrLZBz2FHvpY9WeghOsYjzsAsf5SoxAzx5U3F1dc= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI0PR08MB10656.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(376014)(7416014)(52116014)(1800799024)(366016)(56012099006)(10067099003)(22082099003)(18002099003)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?rL18LN/GK23j1g2G2mDuO0SmQSkUWZ6YCHlBxpXnkVGIdmguOMCPWO33v6xB?= =?us-ascii?Q?Q4Su9q3EeZH4om1GwMNhbbuS0/j9fC6ElqjhXETmzdJPO606n/mQpNiSNGHn?= =?us-ascii?Q?4ChL2GX7JrgDKAwJAHPyygFEMIGd9ua0iZNvK1WPvQVcrsWKQrSEjFXORoyl?= =?us-ascii?Q?uHC+aG3wJqnGh3xYjgXrfXx39dI//Kj7ejNYusoeDHiuk5sgN4BeGp/cLkhu?= =?us-ascii?Q?qNaVX1s8frgz6GQPnjjCPf/Bq7XyEczNlkm/9DS0N4l+g8gsLfWr4Fm1Vd4V?= =?us-ascii?Q?yoNa9zbUnc3M0lh9RjXFuvFmUl/LenBK8sh+hSnZ1V6qG2rqfjJqSzxz477/?= =?us-ascii?Q?e/EOoXbO92uq3WT6CUNnncOsFi+JTwqXJ28ur1Zripy4c1teFoxxmccmI6/A?= =?us-ascii?Q?QO9W0aaySmJAon0G6CZYN9WNRZBiL00oBNAob8eKTwKMA8hgk1+PIL7TxoaI?= =?us-ascii?Q?JQHTX6eFt6PEyBl5qR21QG6C7T2FiwIhpQ6qJIWgVsP4IIss9pJG+inKPkYO?= =?us-ascii?Q?wrJkb1oE0T6Kpto+W7ux+/4W5nFoS+Oebll/hmWRvgRXq16EJsSp/+nA1V3o?= =?us-ascii?Q?SdStXtzDm3EIWzrAxzZOhP5KSlOMLuJWG5q7JhONOMR/RCC8T68pNm8fp5jN?= =?us-ascii?Q?G6Klz321TDPFtCCR9lhj8W4iukM50mVO3vsNwQ5bEGOaYQpdrv7wGVhQP4St?= =?us-ascii?Q?1q4VDcrK7qZxNKBsY/3SJSdHhn/st1J6CgvD+HKrD+4pGR+2e//oHO8a9CA7?= =?us-ascii?Q?NasHPvagSO91LWZr6Vzk43D//tf9K+qs+oLq9Zu8aeU6kfs34aOGmzg3JGMr?= =?us-ascii?Q?Ee41t95MNSKfH9zIo+r6c24SLm/JXOzBWNNQbi0gsszSdiAoK8fgPbh7uWz7?= =?us-ascii?Q?HTJ5i9xJxQpiDY2uXhvgwXfvnebeRsoy2rpytfWjbSrrLZf/GS0J8R42KmE2?= =?us-ascii?Q?VELU9ODzJjArEKFFr01u0Y3tJKZRYj1QIFTPgHjpI+5AN0p/neIPcrn/mypF?= =?us-ascii?Q?bC0l4EmaIp/pkFu7xK/wX9GJGYPpp1iOIBx9oVfeGDy89UpvQu6R4pHVzsMH?= =?us-ascii?Q?500hKj4uyzfRjZoVwMyj/Ec6RCxeaj6Ljd2M4y3L8AaW8hCIA/ySn1nW2KkB?= =?us-ascii?Q?Yb1FJY/Fx5M3V0AcTFoFZbwfoqbQRdsNtrhY6aA9H9oufg2ajSMM4NLkEs8t?= =?us-ascii?Q?tPrErf+bZLg6Qc/F9EPJO6LzmFVG+Ys0bKfz+B0DB42691eiuQre2kSvY/K9?= =?us-ascii?Q?yD3nD7pDcpGU3PJUTZrO3gX3UjSts6HrZevRltzdxV5EBJ34ggekpWNIResq?= =?us-ascii?Q?YX4seI0rIswpk0bLSJC3Gl7MGJaq/fKgGTKbZp/2B7r+cRL+MQNoaJjQ4L/Z?= =?us-ascii?Q?lV06HnhyCKL+DknzvDKOamLkwnpKTzBeqy/qqwpcrfMjPU6tfYTK1n+Sg0OG?= =?us-ascii?Q?gY2lDJTZrCKYDAUGIeE1MHiuQ1BkAnIv1Vk9oRW6hh1xsBEW9EBbsoM8CYgf?= =?us-ascii?Q?I3F42GYmJKrtt5IU75f7qfS9LEUOZKwUjxbz8TgFbJjaZMcgznhUZ9KRIPK2?= =?us-ascii?Q?5O7N8R4x9uqOfw/BM+8TrD57CvksyVvMOv6c65P4L1P1U6ymifl59iP4RQDp?= =?us-ascii?Q?3iyosmil9C8cT9YmZEk6o2vRWFPhoO/BBQGR+oB2TR15fEY7kRm1/oTVy3nB?= =?us-ascii?Q?lg5dU8T7Tvrt+RpELKeDqrKehqKbm/JN0P7qcvrHS+WjhUZEvNfE9+ruSqmO?= =?us-ascii?Q?3Eh+k5aqLPFJz0VR9yEO49LkOnjHtOc=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6177ca94-703c-4b1e-efe3-08dee9791eb4 X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jul 2026 11:45:54.9958 (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: ndd9Kk+NdgYG/e+OOJWPmGp3sq4N+13GIICy1L+npeKyNj2yzr9cRI1k/VXXwdmqqryJnEBfUcPyz/cf4XN/ZZEFDbciAaQnO+EWRHgbKsw= X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI0PR08MB11775 Content-Type: text/plain; charset="utf-8" From: Pavel Tikhomirov This ioctl is needed for QEMU's CPR (checkpoint-restore) migration of the guest with vhost-vsock device. For this to work, we need to reset the device ownership on the source side by calling RESET_OWNER, and then claim it on the dest side by calling SET_OWNER. We expect not to lose any AF_VSOCK connection while this happens. To that end, unlike the release path, RESET_OWNER keeps the guest CID hashed: established connections survive, and host sends issued while the device is between owners simply stay on send_pkt_queue until the next device start drains them. Since the device stays reachable through the CID hash, the lockless send/cancel paths can race with the worker teardown in vhost_workers_free(). The previous commit ("vhost: synchronize with RCU readers when freeing workers") makes that safe. Signed-off-by: Pavel Tikhomirov Signed-off-by: Andrey Drobyshev --- drivers/vhost/vsock.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/drivers/vhost/vsock.c b/drivers/vhost/vsock.c index 87309c68af15..906cec7b5afd 100644 --- a/drivers/vhost/vsock.c +++ b/drivers/vhost/vsock.c @@ -903,6 +903,36 @@ static int vhost_vsock_set_features(struct vhost_vsock= *vsock, u64 features) return -EFAULT; } =20 +static long vhost_vsock_reset_owner(struct vhost_vsock *vsock) +{ + struct vhost_iotlb *umem; + long err; + + mutex_lock(&vsock->dev.mutex); + err =3D vhost_dev_check_owner(&vsock->dev); + if (err) + goto done; + umem =3D vhost_dev_reset_owner_prepare(); + if (!umem) { + err =3D -ENOMEM; + goto done; + } + vhost_vsock_drop_backends(vsock); + vhost_vsock_flush(vsock); + vhost_dev_stop(&vsock->dev); + + /* + * vsock keeps the CID hashed across RESET_OWNER, so a lockless sender + * can still reach the device while its workers are freed. Pass + * sync=3Dtrue so vhost_workers_free() fences RCU readers and flushes + * before freeing them. + */ + vhost_dev_reset_owner(&vsock->dev, umem, true); +done: + mutex_unlock(&vsock->dev.mutex); + return err; +} + static long vhost_vsock_dev_ioctl(struct file *f, unsigned int ioctl, unsigned long arg) { @@ -946,6 +976,8 @@ static long vhost_vsock_dev_ioctl(struct file *f, unsig= ned int ioctl, return -EOPNOTSUPP; vhost_set_backend_features(&vsock->dev, features); return 0; + case VHOST_RESET_OWNER: + return vhost_vsock_reset_owner(vsock); default: mutex_lock(&vsock->dev.mutex); r =3D vhost_dev_ioctl(&vsock->dev, ioctl, argp); --=20 2.47.1