From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from OSPPR02CU001.outbound.protection.outlook.com (mail-norwayeastazon11023081.outbound.protection.outlook.com [40.107.159.81]) by lore.virtuozzo.com (Postfix) with ESMTPS id 546D880266 for ; Fri, 4 Sep 2026 15:33:29 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=CAsCeBXrORHQyMG9GdeKSKwJyp9U+IxOrZAkIh38CjYIhCSCQfON8Bh7AnojSHG3NiZ8SQldmsWfNmS8GD05pK8wc631o7CZnaXQqzfvA+wdbdvedZDDOeonRAOdh2MA/1qoT/fJstM3KNWTtWJkNgqWldHswi/SfIgwxU81yTn2jrJ9f+p9EB23xfLPhelFmaSWRAf5f4srkd4ufxtDXZkmhdjV6fJhs92nf1Oa4GkQk7iEVUkKeaTnGnRHjKKm9iOwICKohFMjGzuAR9PAJZO45W6/paFKv9K7YOk3Z86/k1b4+hsKHGkX6o+unSJ8oFl3Nn0NPJIVT6H/tYwpsw== 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=DCgxqkLadyVVg74XoB79d1GpMNMLxc3sCWqNOAekSno=; b=DloqF8RS5/EeVKGAIEwMbmKmMHLaRtsER/CPx3CNX+KWPQifY8dqS5Ggv/lrXZ2/50gfjUztaNUHqmAG3jngmrfHU30Acpatw8TVJEYq4BYtkg8w/5gJWjMqKM8Ekhm3Ru6/d8a66n6Xk4cP7arDGJHpfT2gdPtvk1axZpf15748+OEv5IjRSSGyEOAk8myAVsC55WEk6olULOw1q2969uELvwzzWsTD7HYkFVOwTOw+23OTWQg8MNjjkutXpA2d87tj0bHXzMKFdfrxNDwVE+go3vxXInh9Vg3vHMC/c6G+ECmIO2cD6kbUig2biAc3EPgVpKZ3tTeLL8Rr0PE+RQ== 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=DCgxqkLadyVVg74XoB79d1GpMNMLxc3sCWqNOAekSno=; b=Y/KCX5EojaHJCxTM362isCJ9i0eorANjJLCznQg0vEiqrN6upVd+3YHsdfl+FT5vX+pX5piQPoC7P+BwJWnjvMrGHIhaGXf8P3x++kaS1jokRzHAHIGvg71xM6RSjJvSYA4oC58i01eDLbe8IFxq3Yl4eQKiO+RtEpPNj/9veRG9CEco5i0qRGoxAvx1EgDxa+t7ceRHHA5Sz4x9xHCrwMHaiMloqZMV4trF+e1IB61sIh8WVX4RcBhX50N8CJGrtSVIC8/Eqk7i601B5SKXwFAt5S1fHbMWkYxLaE1Sw0bXnGiTJLXOj3kzZIc2l/vBkonNPLy9+TkWyi6OoauTjw== 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 DB9PR08MB9754.eurprd08.prod.outlook.com (2603:10a6:10:45d::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.382.10; Fri, 4 Sep 2026 15:33:26 +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.0382.007; Fri, 4 Sep 2026 15:33:26 +0000 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Subject: Re: [QEMU HCI-8.0 PATCH v2 5/5] vhost-blk: preserve the uevent socket across cpr-exec From: Andrey Drobyshev To: Andrey Zhadchenko Cc: svt-core@virtuozzo.com, den@openvz.org, andrey.drobyshev@virtuozzo.com In-Reply-To: <20260904132155.180581-6-andrey.zhadchenko@virtuozzo.com> References: <20260904132155.180581-1-andrey.zhadchenko@virtuozzo.com> <20260904132155.180581-6-andrey.zhadchenko@virtuozzo.com> Date: Fri, 04 Sep 2026 18:33:18 +0300 Message-Id: <178853599894.728973.3281466897188184281.b4-review@b4> X-Mailer: b4 0.16.0 X-ClientProxiedBy: VI1PR09CA0127.eurprd09.prod.outlook.com (2603:10a6:803:12c::11) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|DB9PR08MB9754:EE_ X-MS-Office365-Filtering-Correlation-Id: 71c52864-a712-428b-8ab9-08df0a99dbf6 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|52116014|1800799024|376014|23010399003|366016|10067099003|5113699003|22082099003|18002099003|56012099006|4143699003|38350700014; X-Microsoft-Antispam-Message-Info: 7Wk65ABakC5/dbvp8qF/vtW8bLHvy8VP2QWwFCyFdEYbNxtLf9n7rS1Fi/IvxElQFYJmos7Uzy3CRsuA7igQS+3QSkB7CpYosU9DRgwnEpZaIespEcN8jj/g6FRshE4Y2DO3fkrnLYyK0fDbglA2NzGaXvu6dadwQwhKMmU0NLCcPyWRM9MX+sKir8pSic3rWzBmLJuINjpZFNhhItWvMTTTCwX8s2bVrMjVHrDVJrYtkoDoxc99NGjET2n3ebWii2uMPLLGs8H6QLmdE2Mmh6LbM6udstyxF6EMyvuBIC/fCgcIxQI9ZC0R+sf7CbEx7k5g1TwcpyUuPubmRmGm07jiSa5m/g9u8O6BUuPN3YZyCaaeAa31yay2ix0y3olyHloSVlj5c5im5hl9sAoZJ8DbHknwZEf3z3wQD9j9DnuVpi6DoNR9xa3uJdpcqxKk/znqBPmz/LTgzYj5DdETXkYwQv5paIYlOIdhgWTylWu/b5EEoZ78ag7Cggf2+3+aFPyRRvtyLljiVWiBCnSyyuowlWIVW8pXzVIvQ0I9ZDAVAYFrViH6piot0ZS3C2T0kBuwkOlKOWcP9HsQxLWvYJ+ezkaXXnCbX/83eMXdJTYpujl/r8+RHBwI2Wg3IPWrSpKBsZSLnPPg8ba8MjoKgeryuSs1JnC0P0AjYe1xXC1VXuG0CDrdGfUKVsuEsROHHiVFNBUfmevb68q2yEq6t0tnH6TNuTF+FkZOp/vl61g= 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)(52116014)(1800799024)(376014)(23010399003)(366016)(10067099003)(5113699003)(22082099003)(18002099003)(56012099006)(4143699003)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?dEp4V0RTaDhvaUdZZUpPMnlmSVl6bWZhckMwRkhScmNReVczbVBxRjJUcEZ4?= =?utf-8?B?YlcxZWJtT2hna1RkWWFOTVRYUW8vZWZtT1VJckJ2UThhWlNzRlJRc1Boc2dG?= =?utf-8?B?Y0xTSDQza3FOUFZkWVJ2WUgwMUhhWHNmT21JWmtTdFJWa01qakZoQ3JyeWJa?= =?utf-8?B?eU9FTTducnJMNFdlQ2VVTzJDRmtpeDFVZVZmejJkSDZkM2pqbnQ4U05PT2Fs?= =?utf-8?B?d0k2eG9lclZuTW03dHBDRjA4Q3RiVERTL0oweFVUaXJTUENxbUV0UUVFSWVL?= =?utf-8?B?Vnl1WHhJVUNXS0VhZjVsbjhUNHRibGFnckZuUmdKa2xwNkUvWEhRYkpLZGdC?= =?utf-8?B?MFpIc3NGNmZjODlwMEVjRXcrelJLMzh3ZkpuQVNDeTdvcDJndmc2V1c0QVRi?= =?utf-8?B?R2xYRmFrM096eVhxZS9wU21FcUhUWVNXc3loUUhyaUtJUmlzeVpsLzBEWHo0?= =?utf-8?B?Rjk3WDd5VEthUU9DazFsa1FrZ0NtOVdYRzFyYVRCaVd4eEd5cTUrYXhHVXoy?= =?utf-8?B?K1JOTE9VSWtTTklMc21XWmFGaGZkK3pubHR4NUJiY0NORDNMUVBBRzIxYlBO?= =?utf-8?B?ckZQTG4ybmt0UGkrdlZFWm5HbG96bzZZamV6NjZuRnNRNGwwMlJTc0RVWkZJ?= =?utf-8?B?K2pNWGJsTURDcUNCdjUySVNlMTdGY21SRUFWMUU1VndCUVVEczd6V1dIUity?= =?utf-8?B?TldDZGU4ZEM0UXFFSW5WVjNyVFpGV0toczMxcUtHcHVxdldYRzJRZTN6cThp?= =?utf-8?B?djZNZHBIV2duSUQwcWxnSUJwelFJWEpyRHQzZTMxaVBCYXlnbU9RLzQwMDlu?= =?utf-8?B?SEw3R0svOEFzYjBnT0s1Um1ZNWdDMTFyazVOc094VGpYRU0zS3Yxam9xcnFG?= =?utf-8?B?dmFxaEcwSUR3Y0pJcmNUaERCSDloZWVjNllmY3BGd1dkaGp5TEJqQm5CUEVu?= =?utf-8?B?Uk85ZE13cElaYy9EK2xoNXdhS0UyQmlvSGZnd0ZEL00wSXFBS09WU0oyb0ha?= =?utf-8?B?UFRSVkZQeHMxSGNuV216am1jZ09ONE1FaXZHRDZNblI4NUxVMnAybDFkWlor?= =?utf-8?B?clpPWk8yV29XUTg0OWZGZ2NaaW0yMkRlNjM1K0JlT3hZcEJNM1l1blBlLy9G?= =?utf-8?B?VkRvT2dqQXZEZ2FUa3RyWDJrR3U3M1lWMVdJOUpnM1dqaUF0RGthbUV5VUt5?= =?utf-8?B?cDVGdTJsMkV5QzFoRkRuQVh6ZENlLzJIUC9YdnlnVkxVeTJ4b2VlOEVlcXZx?= =?utf-8?B?OTJhelhZUnZnNUwvZFlYTUF5SUJRckxPN2hHZ1UzeDZBYnUwUlNHbWlOWlZT?= =?utf-8?B?V1M1cUJacjdhcmRkcFAxS1VZNHhTWURvQnBSaFJDdURkeERUUmFhWE84SXJa?= =?utf-8?B?a1VuN0htQ05xeWJBWENYbkRMSGpRaXVGOXhCcndVZUZOZWtuWWVDK0FacXRX?= =?utf-8?B?ODkrUVFwNnRBU3o4QUFqZjB5Ym1nbWdTTkJUekVVRDlPZ3hEdk9xbEI3Y2JO?= =?utf-8?B?VTlZSCs2dG1yS0lUMHU5UUNmbytMdEdZTEtVWTUvUTFsQ2JHeUZKTFFTRHdj?= =?utf-8?B?SEsrYWtZSjllZE40MW4veEJoWUZqWU52c1dYMXhtWlo1RDNsY1RMcStQem8y?= =?utf-8?B?YVMxM2hCL0FqTFVVVDYvOHFmVnhLQU9OQTdObzh2MXl5eUFadlN3eXVnbjhR?= =?utf-8?B?OXdtSjVQUENCeXgyUEQyUlBES1ZpQ0E2TFIveWtRRW9RWVhBK2FCeGgvQy9W?= =?utf-8?B?bG04aEk0Z1Z5ZnhxNktTQW1ERDVqRXhHRjBIWnJqbFp2bnl4NnNyV3lrbkwv?= =?utf-8?B?VU4zSWM5dTNsNXNjcitvdEJvbE51ZllwQUU2Y0VnRTF6TEtKZk11emwwMlk3?= =?utf-8?B?ZlhZSFN5QmhxREM5MFhWU21LeGxFTDloSjdPZ0FRNFFHVW9YNk5vMkl3cjFV?= =?utf-8?B?Q2pBNHBSeHAwT3MvT2p0djk4UEJyajBuckpIVTN3Vk5QV2IvU095WjdORUJD?= =?utf-8?B?SThBUmRJZElXT0ovUkpCWTB4bG9rWVBWQVNhOTcwT3BYaVFwVnhqUWdRL1JF?= =?utf-8?B?THd5c1dQTzZXUlMvRHl5N3FzRmNMVHRTT3h1Mlp5VDV3Z2F2L2RyRjlhM3Uv?= =?utf-8?B?dWFFZUxHdXpSS0IrRXgvVjZjMzkvTFIvNFIyQUNraUdFMmRLUTVsU05aa0dE?= =?utf-8?B?UnFaWm91N0dGMmh5aWNpSnhTZ1QyUlZWMjUrVWhQVVZ4cVViLzFJcW9DZG12?= =?utf-8?B?S2RERHd5U2RyM09kQXd4V1Zzd2xhOHR6YjZwaGZPb0praTkxS1lTSEJ4QUNk?= =?utf-8?B?aS9KOHl3Uyt4aDY5bHBuc2ZMWWYyOVZpdXhveDlYdUJYQ3FDbDNOcHRLL1NX?= =?utf-8?Q?Y/8xlyXwMb4IztqI=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 71c52864-a712-428b-8ab9-08df0a99dbf6 X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Sep 2026 15:33:24.7679 (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: ydQhbiJzZzJC+HVoiZaqjPNZcgvm/xwW62V/ZlXtGCYCZn4dcQCKcB5nADeUhslzEnfyhtsLDxvBot8HjfbZLn8Zbim+o9y6+r9xnEFFHEw= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR08MB9754 > 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 > > diff --git a/hw/block/vhost-blk.c b/hw/block/vhost-blk.c > index 7cb842a859e..eca12356ae5 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)); That name is gonna be "/machine/peripheral/...". Let's do CPR consistently with other devices. E.g. see how it's done in vhost_vsock_device_realize(): DeviceState *proxy = qdev_get_parent_bus(DEVICE(vsock))->parent; ... /* Add migration blockers if proxy->id isn't present */ For vhost-blk proxy->id is likely gonna be "virtio-disk0". Also, in this case, since it's not a vhostfd or backend FD, but an ueventfd, I'd prefer adding it as a suffix, as it's done for other devices. So CPR key should end up looking like "virtio-disk0_ueventfd". > > - 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)) { Don't we want the same validation for cpr_is_incoming() case? Andrey -- Andrey Drobyshev