From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from AS8PR04CU009.outbound.protection.outlook.com (mail-westeuropeazon11021107.outbound.protection.outlook.com [52.101.70.107]) by lore.virtuozzo.com (Postfix) with ESMTPS id CBFC080474 for ; Fri, 23 Oct 2026 16:55:21 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Ia+ft2PPzBxtI0br4p9Q+xZTugA9g2vt7SMubtVsU6jDsMo98eXQ45jmmQkTRlIKGDBaoerYAgYVUjtElyt3zJhAavK68qXOKxemKBd2wTftDX9Bi15QyfvH/dT2dN4oWzhv7nz79n3DL5xzSBr4v/jKxYl87IMlVida4mxTYtiqdVwrVj5HgLnwlzge4ndxpfenfZtc3u9EQyvKr2FBs+fCIkHAPwYN8USbAHhbA3zlPeX9F+rWzBtxSH1BRh0cVG06KyCoj1kBwTVBX4/mv2275352kOVWz/S8qFs1vEF36Olg38lhSS+v5pfNHgjsggfdqikZNElmFz6mXYHt9g== 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=Q5OBkqDmoMT5hOFJsl+5qQusN1G8oqggsnrBlSYDb4U=; b=WXbbU12XjIfqc1ClSHDDBeI7qw7HAi62UBGGimBMML+O7saACq40h+aBTHDtGiLa+ldTgm7UkAtp3i6FycMsBCs/pRCsBV+xz6ti2/bG3DgGXZhggUycRZ5QXq7mJEcjeNOTPQYjKEsvlVP9Dz2eSBDozzYUsNwKo2fWGStT7gwV+HKK+TqK+sbNIRmGb0tultWoJ+C5tbzo5Kn+R3k53J8BidIwnSPpASaFehQurKpspCcSCUCON1DhT9YvxjhBQpptsHOv0mWkGqZv8lUjXlxQ6k2WUkeNJHHZqOmtvuOvMLxoJtu8mK+yqNNNoW3GtWj2ZqUFwL+u75h6jY9Shw== 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=Q5OBkqDmoMT5hOFJsl+5qQusN1G8oqggsnrBlSYDb4U=; b=J6TdOqlek6FwmiIiI2aKNmcZDKoWli7FH7uriVj6K3NCB9GSAoRicrl7wOkvD19bzyqYovo/k5WV38suRLUwUPFeP6cLu90dQEDOx0O0VqQ8wGlTi5JKt4mrD+Qs4lUnwbnSyRtMwEkeySsbbhBz+P3HQHPDhWIuASktnwunQQ1fVgOVQP7H+XDdPN9e1wankz4NJ6PiJ7lMcWkE6wrCv2ZHG3zu8DEtNGcNCDJqgYQxqTLvsPex/C+cYwGMhKzbTsa/JbhxwdQ8V9fHFkZdZZklaDCMyXoXm4lcouiPFvaWX8RbLKO+Q1QMD91RzseMM2G2NhnduZmkMU6f4Rhliw== Authentication-Results: mx.microsoft.com 1; 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 AS8PR08MB6373.eurprd08.prod.outlook.com (2603:10a6:20b:33a::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.546.18; Fri, 23 Oct 2026 16:55:20 +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.0546.017; Fri, 23 Oct 2026 16:55:20 +0000 From: Andrey Drobyshev Date: Fri, 23 Oct 2026 19:54:08 +0300 Subject: [PATCH QEMU HCI-8.1 v5 31/36] VZ: migration/cpr-exec: don't exec if a vhost-net device can't be released Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20261023-vfio_v1-v5-31-ba0bf3c6d122@virtuozzo.com> References: <20261023-vfio_v1-v5-0-ba0bf3c6d122@virtuozzo.com> In-Reply-To: <20261023-vfio_v1-v5-0-ba0bf3c6d122@virtuozzo.com> To: svt-core@virtuozzo.com Cc: Andrey Drobyshev X-Mailer: b4 0.16.0 X-ClientProxiedBy: VI1PR0902CA0027.eurprd09.prod.outlook.com (2603:10a6:802:1::16) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|AS8PR08MB6373:EE_ X-MS-Office365-Filtering-Correlation-Id: 0a857c06-d3ac-4d95-1d51-08df31265740 X-LD-Processed: 0bc7f26d-0264-416e-a6fc-8352af79c58f,ExtAddr List-Id: svt-core@virtuozzo.com X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|52116014|376014|366016|23010399003|1800799024|5023799004|38350700014|56012099006|261009223027099003|261021123027099003|261021121427099003|261022105027099003|10067099003|18002099003|22082099003|5113699003; X-Microsoft-Antispam-Message-Info: ejnHvcsUE/6iEgEHVdlwR4DE6ajm1f23fn0lcs/vQ1gj5KEbfnwncTNZB0OrxLnDz3hDN65nAC/eQcyX8UFHPdvv323bUg3EHmCs3Tozs06Bl4vvUKdpjD+e60OueS8zt1yjSQ1lW6e7P+KxGC6/v2N8/MH8dhnt6sbMtBN2HYnUdEIcRsUy9utlrRiWk9RZGsv6I8KNlpFBq5NCc1mq4h5Pp5Nm5yWuWmBjJy7LVj4V9f8FYQFYQqH3BvnymWH2VqvfEjXrSeBo94JaHgoXfDK7q4v/77Aq10GLd7Cgo7ohCJQ9aOY/owQRLiA7n8DJM3pDac3u7gjwKipAxvGkf/ALv1czzlQ9a1IXqA4tY0xgwcR0nLdfVlM5FMn1DmXlA/5B46FdP3dKXCESsa9KKn0PLlWi3hr4V23JkaImwtCZWFZSWHqL0LXxG9P/gV57R1rnRNFiAi+H2TlKH2y9SbrcT0RT8X/eEoM5e6Yem2Wu01qOHR8HY6pamYtIuTSoYTF6w5skeH4ETS/rCvOkHEU5Nsg4d4+yI8z27L9Sbrb0hVCYlhUTnNoWeR1GNstktmfT/cXPXqFgnwQFjnDOWTUx+GOx7jo/giSyaDLSgR/zCb0LQxXNWWtIAcijFKIWzBKb86/UETFc80cWU+pG3QfSlotQxXPua9l9EfNE/IhsO+lzk1r66p3z7qvw9x40hUy+IzHtD5hbYJtu02q6eIGsl48Sm98nBXuW+8IgteU= 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)(376014)(366016)(23010399003)(1800799024)(5023799004)(38350700014)(56012099006)(261009223027099003)(261021123027099003)(261021121427099003)(261022105027099003)(10067099003)(18002099003)(22082099003)(5113699003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?dU9rUGpqb2dwYXJsQkgwamVZQTZ5eVpYeHR4bzdBMHFZb09TTjRNTFpmWUVB?= =?utf-8?B?dU5Ma2d6TFk0RlBHdFdOY2FyS2RtTzZhTXgrNkczSURldlF2SVB3aWkvdFgz?= =?utf-8?B?VmNKUkZESk1Ya01JT0t6UHYxU0s2Z2UvcFp3dkhKcHhObUpwSU5nbG1jQ3Fq?= =?utf-8?B?L0kycmRZY2FIN3BaSE5TeUxnSnV0M3R2Rmo5S0FSNUNBQmFsakFDNERwenVh?= =?utf-8?B?UGg5bGltYTQ4SjY1blhVT1JJSmdPQ2xGZ2g1YzdCQVBPYmIvZERVTS91Ujd4?= =?utf-8?B?eUc2VGxUTlI3WTE4Q3dlZzJrM3lkMnV5MExQNUZFRXpZWEh6ZTlHNFlHdWJn?= =?utf-8?B?WVcrWVMxSDRhTVdpWklTeWhraXdFd2ZiVXN0UmlKMUQrMFlvMm90NElNZUVm?= =?utf-8?B?eHdOYzFVM3h6K3pUMnQ4aFpxeVpnQlNVQys2SkZUclE3U1BzV3pyTFZ0b0Y5?= =?utf-8?B?dDQ5MmdZN2FVK2pQczFwb0NnNFpnSzBmaDJuYjZpT0ZMMWlLWitxbTZkR3JK?= =?utf-8?B?dlZqcXcxb09tdU9mK0syM2o1TXNYYXlpWG9RbmU4TkR1cTNEdHRrcFJkUUlO?= =?utf-8?B?a2JUVUtIaWpkR0lyd3I0aFhhYlZQbTFuYTdFb2NxcEhEYWF1dkJiZ0VFRUsv?= =?utf-8?B?NHlBSjBUM2k5QzRVSk1KZ1dqbHdPcUZTaDVsQ014RXhiYVlmcWtsYTZyZU81?= =?utf-8?B?dTVVUkVzM3gzSk1SbGE0VVVvelNWS085VDlyUWh6QlBlK1VpRlpTNmUxV05X?= =?utf-8?B?emhCN3NHZUF3VlZvQUJ2cHp3aWt1dm1RSjN4azRrMUcyZEZsc25UcUIwNkMv?= =?utf-8?B?Vmg2RXdrWit4bGFrdWxnNSsvV2V4azluM3Y4cXcrNVFEWXJHNXpCb0JZdnRQ?= =?utf-8?B?TlorbXhGd0N6Q2M4bmZyNndiNlBCSmdyR004V3dudDF1YkMrd013bTQwN29n?= =?utf-8?B?Q043RlNmRXpXc0g0S1RiaHBBeGsyVXNSSWhXUEZGQVFZQVVXNWlIUFRvZk5E?= =?utf-8?B?RmJRV29xL3NJcHN3Z2pzc3dMUTVUb2txZ0U0enVYcUZYQTRhOEhwL2FPZTc5?= =?utf-8?B?ekZOSHlVS1NXamV5QU5uVTdIOEZNTGdLTUowU1lBQmsyZWdyQk8xSFpZL2Nv?= =?utf-8?B?WHRtRkR1dnU2NFFnNDQ3K3A1MnFsWlFxdG1oZ05PaE5vZ3MxTnZLNEVmOUlK?= =?utf-8?B?dUVYYlpRNlhPNDRvUVk1SXpzUUZtWlcxOU41dnoxN0JHWm8xakErSU1rcytN?= =?utf-8?B?V2Z3RG12azdub0hpSTBPaXdPSlN2anpZRms1RTgrdnp6S2hkOFFzL2F1OWtB?= =?utf-8?B?WE0xUDdQV3VOeVB3cGFZdHlueTR6Smc3NGQrVEhCUGtIcnJzNG90M2U4dmll?= =?utf-8?B?TnhKQzhBeEFBcEpSc21udWhwaVoxUkVndHpZektKY3VkS2h5SUlpTUNsVDNq?= =?utf-8?B?ZWNkZHZWTWlxdjBJSExWOWVXK1ZBNXd3VHErM0V1UjlyRHhnQUxKKzhCbGJm?= =?utf-8?B?SGl5QTBidVI0ZGN6RzNNeDNuTTdVRGI3SDlpbzJXMGU3bDg2OUo3TXd3NE5N?= =?utf-8?B?UlNaSTN5QkFzdHRHTVFiYVJaWGVVTlpSQlBieUVUQ1BZcHlhenpleFc2OVhi?= =?utf-8?B?YTQ5YXhlRjVNQzJxQ1pOaXowemtOai9xa2sySEFSZzZKWHBKVHlpRXMzaktp?= =?utf-8?B?ZGZLcW02bGpOTHpIck9YYTFXazBDZFdJOW9nemJuUnZwUkpwQm12cUljNUN2?= =?utf-8?B?eE1rK0lscnRGTThvaW1rSUJ0Q0cyRUZTZ1A0TTBka2htdkw4Y1VobUtUWHMy?= =?utf-8?B?TFFVdDdYaU5Qb2NWelM3VU52Kys5Tm1qMGdVU2ExN1hQUWRndWdKblQ0MDZh?= =?utf-8?B?aHNhT2ljc1VLOUlWWTBUTFVrRVRhV0d4eDhDMkJQMEhvK0FKYnZmd0FmMGlE?= =?utf-8?B?UFVxM2RqOS9Dd2xBTXN1VGVVVzZPV3JFMnkwYmloaVVnNE9idUk5U0hoUGc0?= =?utf-8?B?cTd4L080amFveE5wNllCWVBXUDd2MEpYR3pXcjA5bk5kWXBKQVl0M2ttZEVE?= =?utf-8?B?anNZd2xtTjFkV1BOdUZrNk5LSXNDdlE5TWQzLzhOTXlOQVJXYlVhK3dhV1NC?= =?utf-8?B?WU1ycndDaFZ0YnVHcGhKSUJWVnNva3hFUG11MjlZYnZyeVNhVTVzNnMvVzVh?= =?utf-8?B?RlpqVFNSNFVGcmdncURmRUFrVUMxVk9URW9BOXFWa3FKaWVDUWc5UVhMMmRl?= =?utf-8?B?TXlGT3gyejhEN3ZoTTJ1dmozNlNnOEFWdDhqanFZcHJBL1F3MlpjN3JINENs?= =?utf-8?B?Q0IvZTVnT25RN3pGNXp0Z3FTYTQ5NFR0UWUzZURoN2FTaTh4c2t1UTdxL0hS?= =?utf-8?Q?HZXJkf1IuFHI+jT8=3D?= X-Auto-Response-Suppress: DR, OOF, AutoReply X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0a857c06-d3ac-4d95-1d51-08df31265740 X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Oct 2026 16:54:45.4034 (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: t9/zD+gOh5HHeluRUGl6agDEjmWehjNRgT8NdHiQlkQ/tali3aqmJR8Zhpkz1HqyrEBCny06i5l9Vcgp9yvyV9siQaszbhxGKNyNNLEHlvM= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB6373 vhost_net_cpr_reset_owners() only warns when VHOST_RESET_OWNER fails for a device, and the exec goes on. But the new QEMU can't take such a device: it is still owned by the old mm, so VHOST_SET_OWNER fails with EBUSY, and the guest is left without network after the update. Stop at the first device that can't be released and abort the cpr-exec instead. The VM goes on in the old QEMU, with the devices released so far taken back. vhost-vsock already does that in its pre_save. Fixes: 1278e4830052 ("VZ: migration/cpr-exec: vhost-net: send RESET_OWNER before cpr-exec") Signed-off-by: Andrey Drobyshev --- hw/net/vhost_net.c | 19 +++++++++++++------ include/net/vhost_net.h | 2 +- migration/cpr-exec.c | 7 ++++++- 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/hw/net/vhost_net.c b/hw/net/vhost_net.c index fae6b060c6f..9110dc43d23 100644 --- a/hw/net/vhost_net.c +++ b/hw/net/vhost_net.c @@ -579,8 +579,12 @@ void vhost_net_config_mask(VHostNetState *net, VirtIODevice *dev, bool mask) * EBUSY. Called right before execve(), when the VM is stopped and the * devices have already been stopped, so nothing is in flight. The device is * fully re-initialized from the migrated state by the new QEMU. + * + * Stops at the first device that can't be released, since the new QEMU + * couldn't take it. The caller then takes back the ones already released + * with vhost_net_cpr_set_owners(). */ -void vhost_net_cpr_reset_owners(void) +void vhost_net_cpr_reset_owners(Error **errp) { NetClientState *nc; @@ -591,12 +595,15 @@ void vhost_net_cpr_reset_owners(void) net->dev.vhost_ops->backend_type == VHOST_BACKEND_TYPE_KERNEL) { int r = vhost_dev_reset_owner(&net->dev); - if (r < 0 && r != -ENOSYS) { - warn_report("cpr: failed to reset vhost-net owner for %s: %s", - nc->name, strerror(-r)); - } else if (r == 0) { - net->cpr_owner_reset = true; + if (r == -ENOSYS) { + continue; + } + if (r < 0) { + error_setg_errno(errp, -r, "cpr: failed to reset vhost-net " + "owner for %s", nc->name); + return; } + net->cpr_owner_reset = true; } } } diff --git a/include/net/vhost_net.h b/include/net/vhost_net.h index cdfefa81500..679edefa1d3 100644 --- a/include/net/vhost_net.h +++ b/include/net/vhost_net.h @@ -89,6 +89,6 @@ int vhost_net_virtqueue_restart(VirtIODevice *vdev, NetClientState *nc, void vhost_net_save_acked_features(NetClientState *nc); -void vhost_net_cpr_reset_owners(void); +void vhost_net_cpr_reset_owners(Error **errp); void vhost_net_cpr_set_owners(void); #endif diff --git a/migration/cpr-exec.c b/migration/cpr-exec.c index e4ea160698c..b41dcc46494 100644 --- a/migration/cpr-exec.c +++ b/migration/cpr-exec.c @@ -230,7 +230,10 @@ static void cpr_exec_cb(void *opaque) * Hand the preserved vhost-net devices over to the new QEMU: they are * still owned by this mm, which is about to be replaced by execve(). */ - vhost_net_cpr_reset_owners(); + vhost_net_cpr_reset_owners(&err); + if (err) { + goto fail_with_err; + } trace_cpr_exec(); execvp(argv[0], argv); @@ -240,6 +243,8 @@ static void cpr_exec_cb(void *opaque) * or the system is very short on resources. */ error_setg_errno(&err, errno, "execvp %s failed", argv[0]); + +fail_with_err: error_report_err(error_copy(err)); migrate_set_state(&s->state, s->state, MIGRATION_STATUS_FAILED); migrate_set_error(s, err); -- 2.47.1