From nobody Sat Feb 7 18:20:25 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=1770157365; cv=none; d=zohomail.com; s=zohoarc; b=kFuDG5fTd8RFdt6ZguAXlTPIJ5tlPreSdYBIz8lvhc3SXKpVYu0xfcbLzNEasDxeD7YrWUf/2b3dsIRvdVLMrJhOI212ROo/68drToZq6ZQZrg7YU2YKaj4si9TiKdiI8lu4bri1gtDIjxdynwuhgAgv8EUAdj1CkQ6c2ooEW88= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1770157365; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=L5wNg3dzMz5TL/Zip0gERa3btpkL3/ZtaT9APv8fckA=; b=IfI2jy0Xu4Yg76LLeSTHOTsTWbyy4jwbn/iCGaAdDAaIRGa4lHwo3kxc7SqnsBTyNVsYu8zF/1eE7acQaGvjFS0OcFIQGCHK+E07HY6yTsLi3qcE4bz26mDOULDOchb+WaoH0mri1DSml3HABRZhwTkDQJsagwy7PelXraT2TM8= 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 1770157365870615.2491572572712; Tue, 3 Feb 2026 14:22:45 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 993) id CCF55419D4; Tue, 3 Feb 2026 17:22:44 -0500 (EST) Received: from [172.19.199.6] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id 8A6CE41B5C; Tue, 3 Feb 2026 17:22:09 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 993) id 344563FA6C; Tue, 3 Feb 2026 17:22:06 -0500 (EST) Received: from mail-ej1-f48.google.com (mail-ej1-f48.google.com [209.85.218.48]) (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 5BE203FA6C for ; Tue, 3 Feb 2026 17:22:05 -0500 (EST) Received: by mail-ej1-f48.google.com with SMTP id a640c23a62f3a-b8710c9cddbso777134866b.2 for ; Tue, 03 Feb 2026 14:22:05 -0800 (PST) Received: from ?IPV6:2a02:a46c:6903:0:6387:4afb:48c3:4fe8? (2a02-a46c-6903-0-6387-4afb-48c3-4fe8.fixed6.kpn.net. [2a02:a46c:6903:0:6387:4afb:48c3:4fe8]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b8ea0024583sm32983166b.51.2026.02.03.14.22.03 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 03 Feb 2026 14:22:03 -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=1770157324; x=1770762124; darn=lists.libvirt.org; h=content-transfer-encoding:in-reply-to:to:content-language :references:subject:from:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=L5wNg3dzMz5TL/Zip0gERa3btpkL3/ZtaT9APv8fckA=; b=InG9EYom6DEBmnsyjqJuZt9JviC8sikYiTQVGrgcFdDmBPQq43xJdRJAokye9QPqkX 7eF6+QUcOJCSFJnhsG73Pvs9o1xoiUudOq/61dpyyAJxC6c9Be/gCzvChDkqoddhcuOV P2Qkc2dLIlQwkB7focrTeIyf9AZvg5T7p1JIilJtWqW8fC0787EAlbMzYOpgh7tBQmoo uO+4W8cNu7klMJWrGDpsVfhhAa23nLO5kCMJ2FRoxvyWlzAgAOqPkbZbiEcO5KNsD+jK pOt4tsxDwqWHGVidXAYZzZThXyAxx2dLGvc0IwMTMjaKYAo0Pop8fBwmb3BZ4zQ9cISb rGrg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770157324; x=1770762124; h=content-transfer-encoding:in-reply-to:to:content-language :references:subject:from:user-agent:mime-version:date:message-id :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=L5wNg3dzMz5TL/Zip0gERa3btpkL3/ZtaT9APv8fckA=; b=HqVz8dGbGCtQy/gp7N7x3Od3ym8UCBAT8fGxU0YtdbkQAyxKIRKq4pNeyUccLwEa0I br99gQIUsEst41PtR/TV9PrdkaUR9HtKNPYYe8uC5uIaIKg+jSqvDG6ImWOSNmuqJzWp 6o4H+GSVEt5IRzc3HaGoPhAvXuxEWX2eAGiy7Zzl2hNRZnaaiDdTu8EE1Kjsb4taP+/Z upcREGilwmUqaHHkQYYqKqwfavTdl7Se2vWZJ7J27TcHw3XdtDRTeH7ahgEUeUBHveSE p8k+qcZtubUhEjctSi2jOX3fttzKwBaZL/Y2cOH7gCPlfjeUqokGoZBT4tbTBkNqaKdV AxCw== X-Gm-Message-State: AOJu0Yws0O6NtPHOVDdg/WRkZoxjM/KZPw/BvDYw/vqmzXMtRzxWjehn bEegHlwVijdlWg0VkqTAJkR2b0eWyhBONWTTlrgABhoqwR0SqixYfCoczOeU X-Gm-Gg: AZuq6aLI3XHPVijhi4q8ckXYposGe8H0IRG9zLDZduIkzPTF6mAAIW9brCUUvgornZi XR7p5yGlIji2GOEbNt38fUgBRlax80PT/6mPiCTgdWPtYsM1P3jUQugCPygF0FJH6oklqutTRSc zosXQioFkKJrAl2oubdWhgNk3WohC2CP0XInxaoZkM+8XfICq/UcLEl+0vgjlkjV933yNMQYBDD 95gjpAQTJxTyFxJgYORh0rINE3TA/+PfnTTe5CfATYlQ195feOYeyACo8mvt+A3YcqzfAdhLv9G 5D68QSSUFgr01yBr4ttoVZtkayry+yzz9BUrlATbDhhHLmGaHQG4n2PwbGYCj4Ub8xrR4iz3b3m p/O+1Ow9qD6RiN1r6LAqVI7uni5zVr0/WFewLBHpUr/j1eIM0d3NjqZg80hUrHSHOrOj6CaAvEY X+dsySFqnEzYhSJHzdR4xb404XW98GxMyvi1kWGhi2Rj7RKsRAgY3P9rMsuRnOKjwc5foTbO1R2 mVV6KmwVcV4HrXgFR4ykozQCGEXrqoi540w88wCu1BzQvk+kf7ccsGZqCidJdKvBMexGvJBNMh2 eSuWvZToB5ShosQCFeH4hBNW2g37v1g= X-Received: by 2002:a17:906:4793:b0:b8a:f7fb:4f4d with SMTP id a640c23a62f3a-b8e9f08179amr78836466b.16.1770157323994; Tue, 03 Feb 2026 14:22:03 -0800 (PST) Message-ID: <748c50b6-c080-455e-b274-9425b59492df@gmail.com> Date: Tue, 3 Feb 2026 23:22:02 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird From: Erik Hulsmann Subject: [PATCH] In virFDStreamRead(), fill buffer from this and next messages References: <> Content-Language: en-US To: devel@lists.libvirt.org In-Reply-To: <> Content-Transfer-Encoding: quoted-printable Message-ID-Hash: 3QF6CPWXSFTPY3GSGENCGKRCI4MWTDQT X-Message-ID-Hash: 3QF6CPWXSFTPY3GSGENCGKRCI4MWTDQT 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 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: 1770157368608154100 Content-Type: text/plain; charset="utf-8"; format="flowed" 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 --- 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=20 *bytes, size_t nbytes) if (fdst->thread) { virFDStreamMsg *msg =3D NULL; + size_t got =3D 0; + size_t bsz =3D 0; + more: while (!(msg =3D fdst->msg)) { if (fdst->threadQuit || fdst->threadErr) { if (nbytes) { @@ -917,7 +920,7 @@ static int virFDStreamRead(virStreamPtr st, char=20 *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=20 *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; } @@ -942,21 +945,26 @@ static int virFDStreamRead(virStreamPtr st, char=20 *bytes, size_t nbytes) goto cleanup; } - 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; - memcpy(bytes, + memcpy(bytes + got, msg->stream.data.buf + msg->stream.data.offset, - nbytes); + bsz); + got +=3D bsz; + nbytes -=3D bsz; - 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); } - ret =3D nbytes; - + ret =3D got; + if (nbytes > 0) { + goto more; + } } else { retry: ret =3D read(fdst->fd, bytes, nbytes); --=20 2.43.0