From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from MRWPR03CU001.outbound.protection.outlook.com (mail-francesouthazon11021140.outbound.protection.outlook.com [40.107.130.140]) by lore.virtuozzo.com (Postfix) with ESMTPS id 9BCFE803C4 for ; Fri, 4 Sep 2026 13:24:59 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=aTtQ69BGLB+agZuzyddXoe7xnmyNtnMBB672BaYUR6ak44S2Bt4QnP0i5QrQxw+/ZHw6MkolAXNlkLzEi6IufoJIlvDsX/p0vGasuUfraFmWjeq084uYjdX88Xk+gllQH/A4LVxohmTpa8eSPKSmYT5QNB3yCgqWUu/vaCbgx0ah15We0F4T7gqwMQ7a25JsvhxJDod8S2d10wEnuP3c/Gafm0zAPKqSQ7DfrqaPnojbLFBypZvPRoGpovGvhYH6rnWOLUAf0SgZ+yJCmcwyFLk9+w0Nheevo6KGd9fjwjZL/gYPVNPMcWyQWqdAuZ4C9KK6BAphdg20nPW6SY9diA== 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=4NP49GlSf5iCOGEjPymC2FD9esWmveJKifWv1/I/hFQ=; b=gZR4VvZQ094mwAsicT5Hb8WOtI3f0FAY/9n+n7xzxmrFdHUau9C5DdAo+BDsXN+9U1uGKzAuyNbOA0pRBUrndlY9H/DOhPucEQgis8bTS68zUsWVWq1BnHJ/E1Ub3+n79ALCPHaK2oDL0FCjeyNQD+Q8kF++phJd0t8e9GdKBb9FPy4UeEDlQcxG/4XF5kmvcDejVjUkrg2O+zw8Pwehv1/5ZsLxpGx1sI+p86o990OzG7qDRH5kGJLvJyp/xNS5Iz9/BIExsak8zE1W8BJCWL+2VZSR4Ioa859WxDE6qMwKLxKGbELCjdXuLfqj7dlMyl0NwqHGLAHLgZfXSwPj9A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 130.117.225.111) smtp.rcpttodomain=virtuozzo.com smtp.mailfrom=virtuozzo.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=virtuozzo.com; dkim=pass (signature was verified) header.d=virtuozzo.com; arc=none (0) 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=4NP49GlSf5iCOGEjPymC2FD9esWmveJKifWv1/I/hFQ=; b=v8DXrn/+/b/Bw0bEgNJvvL5sCEte4GEyV5Xa+0rnoMGGjQU3w31M3x7GJRUBRM7aNSzOVvDE8pfP7coezvKZNuUbw+RliDhhBCxQqKotMIng4UEVBEqHg2f0ynOG1Kg8BLYPu76w6tEeh5w8jJ9liJSQTGbUT99bxyWgonddChXjFP53UbrgCL9qHkFVA8HeAF92uJD/QP4dRQPzv70tqIIJeUdn587iJGOoGN6CE6NjEQ6E1RIijiP0SgPeya+s6+6JJAnTcTxvzqNC7oPB2DdDCIv500UvM8QuczKnTMWP7R2XP1PGqGd8x+Ila9C+/JnNaOdM2ElRdPPMz5mhAQ== Received: from DU2PR04CA0289.eurprd04.prod.outlook.com (2603:10a6:10:28c::24) by DU0PR08MB9322.eurprd08.prod.outlook.com (2603:10a6:10:41d::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.406.4; Fri, 4 Sep 2026 13:24:55 +0000 Received: from DB1PEPF0003922F.eurprd03.prod.outlook.com (2603:10a6:10:28c:cafe::4) by DU2PR04CA0289.outlook.office365.com (2603:10a6:10:28c::24) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.382.12 via Frontend Transport; Fri, 4 Sep 2026 13:24:55 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 130.117.225.111) smtp.mailfrom=virtuozzo.com; dkim=pass (signature was verified) header.d=virtuozzo.com;dmarc=pass action=none header.from=virtuozzo.com; Received-SPF: Pass (protection.outlook.com: domain of virtuozzo.com designates 130.117.225.111 as permitted sender) receiver=protection.outlook.com; client-ip=130.117.225.111; helo=relay.virtuozzo.com; pr=C Received: from relay.virtuozzo.com (130.117.225.111) by DB1PEPF0003922F.mail.protection.outlook.com (10.167.8.102) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.360.3 via Frontend Transport; Fri, 4 Sep 2026 13:24:54 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=virtuozzo.com; s=relay; h=MIME-Version:Message-ID:Date:Subject:From: Content-Type; bh=4NP49GlSf5iCOGEjPymC2FD9esWmveJKifWv1/I/hFQ=; b=rAEXAW5gPoiz EBUiKwGZSRaSKmRdsNt0AORYte6kW784VoIfHbNad4UwW2GqOrT3NpFf/cO/pDe9n/ZuNwk3nOeex m0aZoRmREzmTqJSF7kR9sF2/fwLiss83aMoyNATmNX8sHQl6AII87GpthVO5krjK9/638b/uGowK2 Uh+CGP+s0WR5o9jM15Zer64AGVdIiqoXzljNmggJWzgxCG17IYRkH/rlQVI1GDicw9i+LzvKi4Z1c MiYrGx+2Vd2Kp/YrmYut6gKNrfsPwcImMqwzmAtHM7jkq4XPC8e2niRdCjpGc9yS20eJwxdArQ+QT w8Vr0Wxr+5tNkImyLC/9Aw==; Received: from [130.117.225.5] (helo=vz9-demens-1.aci.vzint.dev) by relay.virtuozzo.com with esmtp (Exim 4.96) (envelope-from ) id 1x2Ts6-004ouQ-0h; Fri, 04 Sep 2026 15:24:50 +0200 From: Andrey Zhadchenko To: svt-core@virtuozzo.com Cc: den@openvz.org, andrey.drobyshev@virtuozzo.com Subject: [QEMU HCI-8.0 PATCH v2 5/5] vhost-blk: preserve the uevent socket across cpr-exec Date: Fri, 4 Sep 2026 16:21:55 +0300 Message-ID: <20260904132155.180581-6-andrey.zhadchenko@virtuozzo.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20260904132155.180581-1-andrey.zhadchenko@virtuozzo.com> References: <20260904132155.180581-1-andrey.zhadchenko@virtuozzo.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DB1PEPF0003922F:EE_|DU0PR08MB9322:EE_ X-MS-Office365-Filtering-Correlation-Id: cc7c7403-40fd-482d-a417-08df0a87e896 List-Id: svt-core@virtuozzo.com X-LD-Processed: 0bc7f26d-0264-416e-a6fc-8352af79c58f,ExtAddr X-MS-Exchange-Transport-Rules-Loop: 1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|82310400026|36860700016|23010399003|376014|1800799024|10067099003|5113699003|22082099003|18002099003|57112099003; X-Microsoft-Antispam-Message-Info: 3+B4SX8MzjCaQ8Y0ED0IxJFf4mXht56rRbSDz1NRl3rcms/wvlT9j8jboKB6qEOb9lmY2ViFwbhlE3xPjdcNe/jXLXqMA8Bqcjab36SuWhL1UJhXdlpfKT2iT/mxVkKGczIqMl9WAYlrQtlN3jYe/4nR7IWlKuI/GTHsst+5C+mfDn/BoTH/bNUIOw/fIsXL0V1Yd8KUkwz99PhksdZuo9MPu9X+Lrgc+NDq/sWQPEmKRGVpKaeczlqR9vCYJZ7iBs83f/t62xjzQ5IbHs97jJHmF3/9GzJbgYM1n1TuJ8vGpxwtMYxhjtblhSw9AOVrK68VNdu7g7TA+qCmfcWmXzIYBSDmG9ufL36GAnschUXCoQn3TeYqNAQLrNo3lQcmP9lwZs2XVjsHiZX1RGcBiPA0U6uYbkjAPUGrujXTitoYK/EF3K8JnsjNsKhFts9NG09JmseEHeeJ49Owzo+NX7icHTzJXBPb7l7BkbuNt/GVVlFUmrHSDCSd87Iq2nbhnQEgR/zrD+8Z+Oyk8ceGOZUUuUxwAnn9xRotTNIaeFIIEWMbKkDBC34PqJFeGVWC7cnobrzpnMebVVHVi1t8m2upcKy7aJVpyXgTjrWDyad4UXAcofWJ/XVNK4+mXo3VIqSdkIcbl8mU7Gi7P0c2q2ClrQhaUalWUwdw4PFUafiC+wHd1QQR46tF6IhxZafVhn9E4t0nGtFH7nkgxx9xvzyd1a5LihCU3eRpykFsd/247acdaAgU/y/EiFIe4wtgF4V65v3JN+mqwHgjYGDMs8QqVOnrbihCAyMrsk+pBGFFmGFL9fhZbf7ERo4O6lZGnAGZ/0glQgOAqtEcuxwsQ/7L+uu9npU2y9lIlgsufU91b+utmtPsMLWUYkfAfkHSqJOXrnNaju+Uu648xWhLZw== X-Forefront-Antispam-Report: CIP:130.117.225.111;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:relay.virtuozzo.com;PTR:relay.virtuozzo.com;CAT:NONE;SFS:(13230040)(82310400026)(36860700016)(23010399003)(376014)(1800799024)(10067099003)(5113699003)(22082099003)(18002099003)(57112099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 2bkhPSIsEAqU9iFFkBdoQGtYjRTYA65aDoBRI31431BoJuUiJEnqxRp6A4pmslosvX5JNJYN8lBKS01EqN/QRDI3Bq6BC0vcVaUHxnYqmqGLsSYfStEil8buH3sgdcPaOSNTRa44G+pAiV4ZVULvFe3a4LwEWGzAt5Cziscql5AX/HMJXU4Ia+0kchuvdSY3r6Miz0+bFLFC9lPYkeVUyKGvc6G8E4o/aBGZxORBoorQlh3/G9WrWjziqNMRbeywhpyYAxiesub9wJhFKPQWjmEkXg2RCmIyN6XyqxiTvo1GtTZWFtmHM4KQZawQYZTKuj+DnyJk+yV2JAn1kGkZeBVRB1RyecbsqVlxRZGx6HNXFeFHnbhCWW9qqhNbOYaTf9q76rKy/uEArinOIcfkUV/fO9gd5xN7P0K2Otww5XnDyAjuoEzOKN3Vm1Lu4/iC X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Sep 2026 13:24:54.8287 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: cc7c7403-40fd-482d-a417-08df0a87e896 X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=0bc7f26d-0264-416e-a6fc-8352af79c58f;Ip=[130.117.225.111];Helo=[relay.virtuozzo.com] X-MS-Exchange-CrossTenant-AuthSource: DB1PEPF0003922F.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU0PR08MB9322 qemu-update uses cpr-exec migration: QEMU re-execs itself in place. A plain monitor fdset descriptor like our uevent socket does not survive that (unlike the cpr_save_fd()'d tap/vhost fds), so without help the resized-device notifications would silently stop until the next full VM start. Preserve it the same way the net backends do: on cold boot cpr_save_fd() the socket under the device's canonical path, and on the re-exec'd (incoming) side adopt it with cpr_find_fd() instead of reopening a command line fd that no longer resolves. The management layer passes a placeholder for the "ueventfd" property in that case. Drop the saved descriptor on teardown so it does not outlive the device. https://virtuozzo.atlassian.net/browse/VSTOR-143437 Signed-off-by: Andrey Zhadchenko --- hw/block/vhost-blk.c | 39 ++++++++++++++++++++++++++++++--------- 1 file changed, 30 insertions(+), 9 deletions(-) diff --git a/hw/block/vhost-blk.c b/hw/block/vhost-blk.c index 7cb842a859..eca12356ae 100644 --- a/hw/block/vhost-blk.c +++ b/hw/block/vhost-blk.c @@ -28,6 +28,7 @@ #include #include #include +#include "migration/cpr.h" #include "system/runstate.h" static int vhost_blk_start(VirtIODevice *vdev) @@ -364,20 +365,36 @@ static bool vhost_blk_uevent_check(int fd, const char *src, Error **errp) static bool vhost_blk_uevent_attach(VHostBlk *s, Error **errp) { + g_autofree char *cpr_name = NULL; + if (!s->conf.ueventfd) { return true; } - s->uevent_fd = qemu_open(s->conf.ueventfd, O_RDWR, errp); - if (s->uevent_fd < 0) { - error_prepend(errp, "vhost-blk: unable to open uevent socket: "); - return false; - } + cpr_name = object_get_canonical_path(OBJECT(s)); - if (!vhost_blk_uevent_check(s->uevent_fd, s->conf.ueventfd, errp)) { - qemu_close(s->uevent_fd); - s->uevent_fd = -1; - return false; + if (cpr_is_incoming()) { + s->uevent_fd = cpr_find_fd(cpr_name, 0); + if (s->uevent_fd < 0) { + error_setg(errp, + "vhost-blk: no preserved uevent socket to restore"); + return false; + } + } else { + s->uevent_fd = qemu_open(s->conf.ueventfd, O_RDWR, errp); + if (s->uevent_fd < 0) { + error_prepend(errp, "vhost-blk: unable to open uevent socket: "); + return false; + } + + if (!vhost_blk_uevent_check(s->uevent_fd, s->conf.ueventfd, errp)) { + qemu_close(s->uevent_fd); + s->uevent_fd = -1; + return false; + } + + /* Preserve the socket across a future cpr-exec qemu-update. */ + cpr_save_fd(cpr_name, 0, s->uevent_fd); } s->resize_bh = qemu_bh_new(vhost_blk_resize_bh, s); @@ -387,10 +404,14 @@ static bool vhost_blk_uevent_attach(VHostBlk *s, Error **errp) static void vhost_blk_uevent_detach(VHostBlk *s) { + g_autofree char *cpr_name = NULL; + if (s->uevent_fd < 0) { return; } + cpr_name = object_get_canonical_path(OBJECT(s)); + cpr_delete_fd(cpr_name, 0); qemu_set_fd_handler(s->uevent_fd, NULL, NULL, NULL); qemu_bh_delete(s->resize_bh); s->resize_bh = NULL; -- 2.43.5