Subject: Re: [PATCH 2/2] upload-pack: reduce lock contention when writing packfile data

From: "brian m. carlson" <[email-masked]>
Date: Fri, 27 Feb 2026 13:04:05 +0000

On 2026-02-27 at 11:23:01, Patrick Steinhardt wrote:
> diff --git a/upload-pack.c b/upload-pack.c
> index c2643c0295..f8ba245616 100644
> --- a/upload-pack.c
> +++ b/upload-pack.c
> @@ -270,6 +270,13 @@ static int relay_pack_data(int pack_objects_out, struct output_state *os,
>  		}
>  	}
>  
> +	/*
> +	 * Make sure that we buffer some data before sending it to the client.
> +	 * This significantly reduces the number of write(3p) syscalls.
> +	 */
> +	if (readsz && os->used < (LARGE_PACKET_DATA_MAX * 2 / 3))
> +		return readsz;
> +
>  	if (os->used > 1) {
>  		send_client_data(1, os->buffer, os->used - 1, use_sideband);
>  		os->buffer[0] = os->buffer[os->used - 1];

This seems mostly reasonable and well-explained.  The one question I
have is this: how does this work when packfile generation is actually
very slow (or when the connection is slow) and we need to send data
every so often to keep the connection alive?

I just want to make sure we're not breaking the keepalive sideband case
when that's necessary, but of course I have no objections to improving
performance and reducing overhead.
-- 
brian m. carlson (they/them)
Toronto, Ontario, CA