From nobody Wed Apr 15 07:01:09 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1770911992; cv=none; d=zohomail.com; s=zohoarc; b=Jz57SO4tzBbX/UszHClC3JkquZTlYjEfHSiBq8Pawoabkr3v20vuceR+wcWw/n2k2uhz1USbCDk2anLE2HkC2St55fkO/OTddPZnY2ejl76VVN013Gv1r0hiN1aeCuz3leO0caIsrkphUezJ5zWn8BWUgSXA/uN6d6ozqmM9bL4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1770911992; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Subject:Subject:To:To:Message-Id:Reply-To; bh=zqYVCbLGdF8oMUpAphWKFg26RR1mhglq+08sl1RLx10=; b=KUjy+ZgHdhGzqKggupvP1ZX7B7un17ltB7TlhBf1ZaepzxO56WYbN99XFX+kuu233tmLRXh37PqCqzHoFkyfnACEctyT7GSpBtYx93TSfVpZr0iMCZZjGCssrJOGPU8vNNoTJS3dG3QCWBzAeGW9oHUEiB7fIbyDM3FvFbUtZFQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1770911992391315.618820460944; Thu, 12 Feb 2026 07:59:52 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 993) id 89A0A44CEF; Thu, 12 Feb 2026 10:59:51 -0500 (EST) Received: from [172.19.199.6] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id 5571A44DD2; Thu, 12 Feb 2026 10:59:11 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 993) id AB47C4477F; Thu, 12 Feb 2026 10:59:06 -0500 (EST) Received: from mail-lf1-f41.google.com (mail-lf1-f41.google.com [209.85.167.41]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 5A00544775 for ; Thu, 12 Feb 2026 10:59:06 -0500 (EST) Received: by mail-lf1-f41.google.com with SMTP id 2adb3069b0e04-59e64657f0cso1099845e87.2 for ; Thu, 12 Feb 2026 07:59:06 -0800 (PST) Received: from localhost.localdomain (2a02-a46c-6903-0-b7ef-605e-c68c-daa3.fixed6.kpn.net. [2a02:a46c:6903:0:b7ef:605e:c68c:daa3]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b8f6e9cd6d4sm81050566b.23.2026.02.11.09.36.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Feb 2026 09:36:10 -0800 (PST) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-5.3 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_PASS autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770911945; x=1771516745; darn=lists.libvirt.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=zqYVCbLGdF8oMUpAphWKFg26RR1mhglq+08sl1RLx10=; b=J2H8WQZDyIwVJHB91YIo0upEEetO9UwLWGqEX8YSDV9Jj/A2Qa8Ixfq1b9N/czD0j9 ExYMQFcEJZF/nRDWHXDyXDE0HSc3QMZ0txxKBh4Kxq1+YM6c9/5SXSqTxdpaby6vKerl 5jJp8ybcYMOuUJRFm/VHn4Ku+6OjWIDzxTcOrtvK9Svgg6AK3TznX0WzqJ4/Dhe5wZ4E R1MPJFwJnRcsnCnLzirm2zU0JYF2ld/CbAb8iCj5nRNLpnhoC4zFY21ZpRRGWVxZu9an 03HB0WxGPbWhgA54owpRPAbF7Pl6zfzGx1bvN3PDAKkRMTSR3I1AXEDVAJfQmaH9kIxf UnZg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770911945; x=1771516745; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=zqYVCbLGdF8oMUpAphWKFg26RR1mhglq+08sl1RLx10=; b=Z3hogjdhHIRKi8JiG21ajtVQl+CiAL9efREE3gnyxrHjviB6DaJRjE24x2fwdOxBHK 4+bfHhzzVEqDjZqmdT7ds/6jljtk+HXaf+QbIjCBdhUjdDg6jVOWsCFX9YXIgvC9cwSG PwIX6Jh9A5cEu91J+PiSvZWrzjqhv9jO41249TetDl7HNqqyla0bq5WP6aUs5DZJSJc6 giu9xXlb08mG6hyRARXOdcWyuripXYKIpWYe7ENC2HkkB5LnZcxxOG8PtpjMS97gb4Yh F0OIgcHAfUq+4mzDJrsEeu67Ri32TxKahbxTxcdHqCaS8nBqI8M9WEASJzKVQ0vjENME Ibtw== X-Gm-Message-State: AOJu0Yx+CpkvaWC7CvWlauhUbCdzTjaNhhGpDaZ4Ndiw81dRz1Ps/HfS UwkiluxQNBM2pylAIRUq+9z/OpUKtjPhKGbgN890DbT+vp7R5LokYPFdVHKV X-Gm-Gg: AZuq6aKYHBAAPpiCqF90z6b7IxRgWzSRKXVN7CZ3sRniUqkq7Hfg4xovuNTAdyGQ399 BGPr+RGpDF6q5RvuAx0BV1iLzJznmhauL9nBmm+/f2yZ8wRBthbndbyZtBtrwk4N5AulUAigjBM DWUTeS0rJufI74l5q8gzDXcYnl9tOtowC5coHt07gmYmnyh6BK9scftBGPOSxcHxubc1cGc58nC woNRXzE3m8xuzhEy5hPso81eT9VXA5lNPu04uTE3Kr6/VrJOHw4TELKn6huF2lbPbjYBCxml1zU StwiysRcuAGkv/HqNLaM5RFMcuEtqxBavQnXXi5gfBUZLHN8J6X7+8Y13uznD6f5WofiWF0cCKU YyzoedWO9Mcckg/5VzQC5fS9CeOs2Deww9TubRXYR9CqKMJLQRwXiWFE07XkVtNCEtynprfnwoS Se6avWcyqVfNKty74J6+8uSBzv5aaehvRR69cRsdsoXAnlHDNSbhdDIZqNNgJ7tGl2dE5tTZwQQ KDhBp8OXwsSSLPnkXM6CS168u1LdiJgHidIqmUsq+7299ttf8KSZCFZjGsdnN6WuLAp3qcyPL8c 12U= X-Received: by 2002:a17:907:7251:b0:b8e:d260:caf8 with SMTP id a640c23a62f3a-b8f6ae075a5mr230155266b.33.1770831370720; Wed, 11 Feb 2026 09:36:10 -0800 (PST) From: Erik Huelsmann To: devel@lists.libvirt.org Subject: [PATCH resend] In virFDStreamRead(), fill buffer from this and next messages Date: Wed, 11 Feb 2026 18:36:06 +0100 Message-ID: <20260211173606.3145076-1-ehuels@gmail.com> X-Mailer: git-send-email 2.43.0 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: SHKX7LXYQXJAIWBOIR6PBUYALBM3ZPOA X-Message-ID-Hash: SHKX7LXYQXJAIWBOIR6PBUYALBM3ZPOA X-MailFrom: ehuels@gmail.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: Erik Huelsmann X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1770911993568154100 Content-Type: text/plain; charset="utf-8" Before this change, buffers returned from virFDStreamRead() would alternate in size (262120 and 24), because it only consumed the bytes remaining from the current background thread message. As the background thread reads 262144 bytes (256kB) of data in each chunk, where the maximum size returned from virFDStreamRead() to be transferred over the remote protocol is only 262120, 24 bytes would be left in the buffer on each iteration. The next iteration leaves 24 bytes, which used to be returned without considering messages waiting in the queue. Signed-off-by: Erik Huelsmann Reviewed-by: Daniel P. Berrang=C3=A9 --- src/util/virfdstream.c | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/src/util/virfdstream.c b/src/util/virfdstream.c index 26a1f00..4c974ba 100644 --- a/src/util/virfdstream.c +++ b/src/util/virfdstream.c @@ -905,7 +905,10 @@ static int virFDStreamRead(virStreamPtr st, char *byte= s, size_t nbytes) =20 if (fdst->thread) { virFDStreamMsg *msg =3D NULL; + size_t got =3D 0; + size_t bsz =3D 0; =20 + more: while (!(msg =3D fdst->msg)) { if (fdst->threadQuit || fdst->threadErr) { if (nbytes) { @@ -917,7 +920,7 @@ static int virFDStreamRead(virStreamPtr st, char *bytes= , size_t nbytes) virReportSystemError(EBADF, "%s", _("stream is not open")); } else { - ret =3D 0; + ret =3D got; } goto cleanup; } else { @@ -931,7 +934,7 @@ static int virFDStreamRead(virStreamPtr st, char *bytes= , size_t nbytes) * return 0 immediately. */ if (msg->type =3D=3D VIR_FDSTREAM_MSG_TYPE_HOLE && msg->stream.hole.len =3D=3D 0) { - ret =3D 0; + ret =3D got; goto cleanup; } =20 @@ -942,21 +945,26 @@ static int virFDStreamRead(virStreamPtr st, char *byt= es, size_t nbytes) goto cleanup; } =20 - if (nbytes > msg->stream.data.len - msg->stream.data.offset) - nbytes =3D msg->stream.data.len - msg->stream.data.offset; + bsz =3D msg->stream.data.len - msg->stream.data.offset; + if (nbytes < bsz) + bsz =3D nbytes; =20 - memcpy(bytes, + memcpy(bytes + got, msg->stream.data.buf + msg->stream.data.offset, - nbytes); + bsz); + got +=3D bsz; + nbytes -=3D bsz; =20 - msg->stream.data.offset +=3D nbytes; + msg->stream.data.offset +=3D bsz; if (msg->stream.data.offset =3D=3D msg->stream.data.len) { virFDStreamMsgQueuePop(fdst, fdst->fd, "pipe"); virFDStreamMsgFree(msg); } =20 - ret =3D nbytes; - + ret =3D got; + if (nbytes > 0) { + goto more; + } } else { retry: ret =3D read(fdst->fd, bytes, nbytes); --=20 2.43.0