From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from MRWPR03CU001.outbound.protection.outlook.com (mail-francesouthazon11021122.outbound.protection.outlook.com [40.107.130.122]) by lore.virtuozzo.com (Postfix) with ESMTPS id 5BFD3802A7 for ; Fri, 2 Oct 2026 16:49:03 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=f3X3uaPAhqt87Wok/wvTQWIU75xEWBSWARiVrEw1XaeY/O0v2r5UYexI3vIPv3m3NS/LRjzja3aiE6vNXRsPxtrCCZFR5j4jPP5L3Dy4YOCbwzsAKx9euK0k+SpuFHB8yxupQ7HTiq/njgCqZLBOF0LFzdUi2sCvI0GCYet0IkvzpshrdSVCjCVeeJPY0JvxXtNcDvmAuMMIzuXkiSU+SeIHA6um/dBcNm0cT3CV2Ee3lFJcnPUzbxyJXGXaRCCIS+rWsqde7Fb98JztSC8de23+xWHRvpbJ2dgRjKEiSymsroY/4k9xYEwDLDagOpRS3WuCm/r+4cWoO4TUWN5APQ== 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=m4YjqhEvrAp4D9CLtaBVFtxQ8Oyzfo99CJROsegZb28=; b=pkbwREumTM49CajEUV1bXEV699JDLf5dPk/3anViIQ7ScUvxw8/cEhQ9bR9PkNsL+/vpF3hUd8V/kQ+Gr2KXs8QDmxLm0AJXro1UkeoSOoAY86mCFEf0qjyM8dsD+yRGU1DniePxh0/oVQourk8whmOHphdoFUWbH1EUaloQ+GZdIJ3XQfLFEZ2eH4gxrDuJMbShv4jK1Z++NECU+PjFZoyIzbJ+7o7OKfOBrV4CoO6aRt/+OQ1IDHdfq1K02/kyVi94fbybFs54ap9nySha0J2irNFIbHqPQOmVXI53+onjcnTG+xxqpcj7FWzrsHDg0A4I9baU7wYb/7TG8n6ggw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 2a00:1450:4864:30::e) smtp.rcpttodomain=virtuozzo.com smtp.mailfrom=openvz.org; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=openvz.org; dkim=pass (signature was verified) header.d=openvz.org; arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.onmicrosoft.com; s=selector2-virtuozzo-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=m4YjqhEvrAp4D9CLtaBVFtxQ8Oyzfo99CJROsegZb28=; b=aefwcsDTjz7tEQvErp5jOsbQWm/39OCb+irN0K+DpcVy6QMtHSZjPEzDo/xR+vCkl43YcYoZtYmIELppl5RLAdc2yxvVRonXrrhIgz0BaH/UiM8qD30dBvMbAdJi6CabOZDPC7a2ykUulGHWkSXakgfvvw4B5sDJxVQwxfwgMVc= Received: from AS4PR10CA0013.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:20b:5dc::20) by MI9PR08MB051927.eurprd08.prod.outlook.com (2603:10a6:290:84::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.472.18; Fri, 2 Oct 2026 16:49:00 +0000 Received: from AMS1EPF0000009B.eurprd02.prod.outlook.com (2603:10a6:20b:5dc:cafe::47) by AS4PR10CA0013.outlook.office365.com (2603:10a6:20b:5dc::20) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.472.19 via Frontend Transport; Fri, 2 Oct 2026 16:49:00 +0000 Authentication-Results: mx.microsoft.com 1; spf=pass (sender IP is 2a00:1450:4864:30::e) smtp.mailfrom=openvz.org; dkim=pass (signature was verified) header.d=openvz.org;dmarc=pass action=none header.from=openvz.org; Received-SPF: Pass (protection.outlook.com: domain of openvz.org designates 2a00:1450:4864:30::e as permitted sender) receiver=protection.outlook.com; client-ip=2a00:1450:4864:30::e; helo=mail-wr2-x0e.google.com; pr=C Received: from mail-wr2-x0e.google.com (2a00:1450:4864:30::e) by AMS1EPF0000009B.mail.protection.outlook.com (2603:10a6:20f:fff8::208) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.472.14 via Frontend Transport; Fri, 2 Oct 2026 16:48:59 +0000 Received: by mail-wr2-x0e.google.com with SMTP id ffacd0b85a97d-48aef5d66c1so42282f8f.3 for ; Fri, 02 Oct 2026 09:48:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=openvz.org; s=google; t=1790959739; x=1791564539; darn=virtuozzo.com; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=m4YjqhEvrAp4D9CLtaBVFtxQ8Oyzfo99CJROsegZb28=; b=lVqamG1Zkjy+Pi1ksvUhxAwEvZj74BB3noSEhE8pkRgbzgF4w0URY/tLw1fTi+7QQs KBgoA92D3ESknDwMTM15TVEAg0k7t4MmwFdNExigQBEBMOD4xZ5Z/CEkRKag9eN7j5QL M7EVMxf/IjB8OTfs49AMZvZsjdMB6/Txfyqep5poxLRENCWJ9yJkvQpEFZSVXKzOdZh4 MHlVSL77cHry/Mz0hd69LTi0jmxt5gSRpfe8p7+gz6HeXCnIE/qapKU5FkOaFgNDIA0X HMSuhqmDCSTFwrnhoOP2k1GqIqMDTiGxOcz6JSv/wf6FIYhbKbKPKTQCBCPWU81ljTTi z0OQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790959739; x=1791564539; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=m4YjqhEvrAp4D9CLtaBVFtxQ8Oyzfo99CJROsegZb28=; b=EjcyiijtxAd/0jyxHeSJA/FZX+MrPaeW8F4JJIQvLh+go+E4NC82o+ik/Jl7tM6nuu cHWk0HsZ3tVLLZUPWFqAXkPBOw2HSGmtZ8CVLm5RvEGFyTHQe3JHuS1QbYioxXekQgS9 hHLYcDkK9n+wgYIChBjiti47nBoXS7VnOFC5vjz2yOXiPbH4n8IUEyuaL8ihSi3Y59MR M1+CHXxmCu52uBE0eEAO9KO/qNWbEyRNXQnaj9M3F6ZZpVATE1N7wtsn8qNS0kI6cM4H nVr73zwWfMIs/7g+MH/U+axWTOqJQtrIlYgbyHFW16mbH+A0s1Jge5f/bEf1f0xCEZHr bA4w== X-Gm-Message-State: AFq9FYJHjkLETL/giiRJP+ydvcJGk0BPvIbhHk3uW3+q/BLOUbXvrTTa 9YH8+czy2RxGyUl+K0Aswr9Dp1bdfCQB3+yA5bOxyC6Y2y53HrqoEK3o7lMWXHqWaTI2ZbUT1Ax 3Tvy3NjM= X-Gm-Gg: AYBFou2ZXNuRdI+4uUyOaWaQ5kX8v0C/uaZfkEulryh3ojkPeoA2/1L0mPNWWVMj65D cHgCW9TDZGCxM1G5YnCBT08sVgthJLkEtNsQpniWXOwtIjt2gZF663zHsY99OB0C2u4djrSJdvW z5Q6xQdxaihe7wp0SYDNloXJCupPwKb7d7o+ecBIiHUVT1cP+lBpSGeVymIrHE5Mt8d4YfjK/i9 Xb4pm1Rs8/+n8/wfH9+S4R2IX4UUpm2E+szXWilnQajm4/zQCGhDvsUqKnogkABr80kKoUG7pLL qtcBMQGdGzXH1aspRd6PSk3aHLWK40m7jXC6HOeWJZhhntJZ3uUx18KNpiJqc9t0qe1Ux/wY9A3 AHmxxgkge4WIQBNcC7FTdQ/D19KtDxVglsiOCRa+02239npzwYsqLdnhBiiv7v2X9IWClGiIeat wYRaHEMy5isT9E84AS+t+410Gl1r9OOaXP/stYPx9rPo3Ffb2nRyGfS0xcKufhJFRoVQ== X-Received: by 2002:a05:6000:2511:b0:48c:455a:1c81 with SMTP id ffacd0b85a97d-48c455a1d5cmr2145377f8f.17.1790959739176; Fri, 02 Oct 2026 09:48:59 -0700 (PDT) Received: from athena.sw.ru ([2a06:5b06:b600:300:e2e:474b:392b:33f7]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-48b380fada5sm6442174f8f.24.2026.10.02.09.48.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 02 Oct 2026 09:48:58 -0700 (PDT) From: "Denis V. Lunev" To: svt-core@virtuozzo.com Cc: andrey.drobyshev@virtuozzo.com, den@virtuozzo.com Subject: [PATCH 2/3] chardev: preserve the logfile fd across cpr-exec #VSTOR-148304 Date: Fri, 2 Oct 2026 18:48:52 +0200 Message-ID: <20261002164853.2130337-3-den@openvz.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20261002164853.2130337-1-den@openvz.org> References: <20261002164853.2130337-1-den@openvz.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-EOPAttributedMessage: 0 X-EOPTenantAttributedMessage: 0bc7f26d-0264-416e-a6fc-8352af79c58f:0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AMS1EPF0000009B:EE_|MI9PR08MB051927:EE_ X-MS-Office365-Filtering-Correlation-Id: ac995828-b0d6-4e2c-2ce8-08df20a50eb2 X-LD-Processed: 0bc7f26d-0264-416e-a6fc-8352af79c58f,ExtAddr X-MS-Exchange-AtpMessageProperties: SA X-MS-Exchange-SenderADCheck: 0 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|82310400026|61400799027|48200799018|9140799003|376014|6059299003|43022699015|3023799007|56012099006|5063699009|10067099003|16102099003|55112099003|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?Z3uBQNhEnyckD7AwtJSY70IzXK4l+Hi3RKhNtN+56Qi8q7VIeANhd7Pynv3I?= =?us-ascii?Q?mmsPZ4JzWJ85spcYEx3kJrbjsDaSfLNRwXew1LsXFR+7vmOcNrAre5M8sIBz?= =?us-ascii?Q?CyAMnYiLGb3yykS7TuYSigxds+d1V3kchl+qGqpU7BauJWo76Ra+G2e8VGfd?= =?us-ascii?Q?kX16/bYB067w+Gecb5NstlRyeBXyBnqNX5T+LU3KcJS94EY7wtwyJEaYpKQv?= =?us-ascii?Q?fRNy5uQiHPvu0Bd2AV6tm9gqpSW4IqrSNSFRlLI/lhxJ8b6joyIIwrYedyU8?= =?us-ascii?Q?Ckgc6spq581vvSyxqOPuICqgKnn7wF8tWFzJnxnVzWTCKyQ5jVHiJ4tAYaLa?= =?us-ascii?Q?66iuWllGFheNqUzFbXHbkm8tMcXVbJV9TQI4adT+pVNf1Jj7sBktDOGHJLi9?= =?us-ascii?Q?NLpH1ecU7jwzA0WsHLIdY7NKhVUGX40b5EElcs05vw1dZOI7klgfnXOznSUr?= =?us-ascii?Q?4os6c/TSehApJTOXT/SngUIn2xBzrNtYb4OlGGzlLCCS8n/7CkwcsiR7PptR?= =?us-ascii?Q?C+gtjkjP95e8n129sHSr+5q79MRxfIyKjZ1J8r3+fnU4RFbMe8KINMlWcA+G?= =?us-ascii?Q?oo66eCAB2Nqqbdp6H8T+muouCK2WtJUierzYehUw+yZoyHAJDx+uqMzsth8U?= =?us-ascii?Q?uASj95oQTXsw3A8wCwgJb+RHzX67mY9qnjarK0BzbGWrNpnmuF6hTdPQrjml?= =?us-ascii?Q?tJ86ErQ7kDN5ONBIUI7sv6qgI9L6nmd8jQmHp6OOYpb72ooahIDMQEDSbwyZ?= =?us-ascii?Q?u4pO5bFkCegM0GflWMpZhPeKpDhhO1bKkmQyVS+aXj00mNGl3hgEwa2zT32r?= =?us-ascii?Q?JFlqTIVXHvW4zlZ/xX3iaFTGbmDFUVUufUZkLfnv3hINxDmabA9pn03OKeqh?= =?us-ascii?Q?MbbXdGds5L5RK92I2mmdM5+Kb+6F4pRosr3JYo1P1/0uftBKeHLwkIJk1dxH?= =?us-ascii?Q?fRcl2VloYSJOeaS3k4lX/L3NBtPNaTkFy+khfJERhiM=3D?= X-Forefront-Antispam-Report: CIP:2a00:1450:4864:30::e;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail-wr2-x0e.google.com;PTR:mail-wr2-x0e.google.com;CAT:NONE;SFS:(13230040)(82310400026)(61400799027)(48200799018)(9140799003)(376014)(6059299003)(43022699015)(3023799007)(56012099006)(5063699009)(10067099003)(16102099003)(55112099003)(22082099003)(18002099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: XNPC6X2euxte91PuPea61OZjRy4q/sq9MmMlDyN8Fmdd9lyMWisHx3sv8T54zjpkZcUewwJ/TBqM3tzRFmX8GZslQRMm6indLSDFd9e+pNNPOEitS8rfuPJ1kIfAalml0mQlUT3Mue5gPMH5qUtn84pvyS4JZb9e26Wn7SIjqCjp4vxQxLBM7Egj7fpHeSFWFqaHejp6tGbgQfO4tispsdwEvZLK3VOgn2eKpOuZLRSdhYPOdE3Vsh30lvzOW+Znodkc6D2/ynjzZEqyD4d9u3Ejp/EJ767XSfLaxXE7XxZx/Bh8D9D4oR4Yr2XQo3iiyu7MToBIPD0zzqAyNCGxVJSPtQhj9CLg5GsoAziVeG4qmTunRl3M38pX7MhPALUJCQsGZd1xcbVDKNFzV8iT/YvdI9zabweF5s8XLrm/pTtyMQHEldrn7/3By18hVwBI X-ExternalRecipientOutboundConnectors: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-Auto-Response-Suppress: DR, OOF, AutoReply X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Oct 2026 16:48:59.7831 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ac995828-b0d6-4e2c-2ce8-08df20a50eb2 X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-AuthSource: AMS1EPF0000009B.eurprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: Internet X-MS-Exchange-Transport-CrossTenantHeadersStamped: MI9PR08MB051927 List-Id: From: Denis V. Lunev A chardev with logfile= opens the log in qemu_char_open() on every start, including the start of the new QEMU after cpr-exec. The backend fds are taken from the cpr fd registry there, the log fd is not, so the new process reopens the path itself. libvirt normally opens the log through virtlogd and passes a pipe in an fdset. The qemu-update command line cannot carry that fdset, so it names the log file path. The exec'd QEMU, running as the qemu user, then fails to create a log it has no write access to, e.g. a nova console.log on node-local storage: qemu-kvm: -chardev pty,id=charserial0,logfile=.../console.log, logappend=on: Could not create '.../console.log': Permission denied and the VM is destroyed. Where the open succeeds, the new QEMU writes the file directly, behind virtlogd's back. Save the log fd in the cpr registry under the chardev label and take it from there on cpr-exec incoming, as the backends do. The logfile path is not opened at all then. If the source did not save it, run without a log rather than reopen the path. A failed chardev-change re-claims the log through the base class cpr_claim_fds(), since the replacement's log has displaced the entry. Signed-off-by: Denis V. Lunev --- chardev/char.c | 30 +++++++++++++++++++++++++----- include/migration/cpr.h | 1 + 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/chardev/char.c b/chardev/char.c index b64767f574e..c037d2e7730 100644 --- a/chardev/char.c +++ b/chardev/char.c @@ -40,6 +40,7 @@ #include "qemu/id.h" #include "qemu/coroutine.h" #include "qemu/yank.h" +#include "migration/cpr.h" #include "chardev-internal.h" @@ -261,9 +262,21 @@ static void qemu_char_open(Chardev *chr, ChardevBackend *backend, } else { flags |= O_TRUNC; } - chr->logfd = qemu_create(common->logfile, flags, 0666, errp); - if (chr->logfd < 0) { - return; + if (cpr_exec_is_incoming()) { + chr->logfd = cpr_find_fd(chr->label, CPR_CHARDEV_LOG_ID); + if (chr->logfd < 0) { + warn_report("chardev '%s': log file was not preserved, " + "continuing without it", chr->label); + } + } else { + chr->logfd = qemu_create(common->logfile, flags, 0666, errp); + if (chr->logfd < 0) { + return; + } + if (!cpr_is_incoming()) { + cpr_delete_fd(chr->label, CPR_CHARDEV_LOG_ID); + cpr_save_fd(chr->label, CPR_CHARDEV_LOG_ID, chr->logfd); + } } } @@ -297,6 +310,10 @@ static int null_chr_write(Chardev *chr, const uint8_t *buf, int len) static void char_cpr_claim_fds(Chardev *chr) { + if (chr->logfd >= 0) { + cpr_delete_fd(chr->label, CPR_CHARDEV_LOG_ID); + cpr_save_fd(chr->label, CPR_CHARDEV_LOG_ID, chr->logfd); + } } static void char_class_init(ObjectClass *oc, const void *data) @@ -315,11 +332,14 @@ static void char_finalize(Object *obj) if (chr->be) { chr->be->chr = NULL; } - g_free(chr->filename); - g_free(chr->label); if (chr->logfd != -1) { + if (cpr_find_fd(chr->label, CPR_CHARDEV_LOG_ID) == chr->logfd) { + cpr_delete_fd(chr->label, CPR_CHARDEV_LOG_ID); + } close(chr->logfd); } + g_free(chr->filename); + g_free(chr->label); qemu_mutex_destroy(&chr->chr_write_lock); } diff --git a/include/migration/cpr.h b/include/migration/cpr.h index d74ff1ea602..8fb79eb0a28 100644 --- a/include/migration/cpr.h +++ b/include/migration/cpr.h @@ -15,6 +15,7 @@ #define CPR_LISTENSOCK_ID 0 #define CPR_CONNSOCK_ID 1 +#define CPR_CHARDEV_LOG_ID 2 #define QEMU_CPR_FILE_MAGIC 0x51435052 #define QEMU_CPR_FILE_VERSION 0x00000001 -- 2.53.0