git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 0/5] Reintroduce writev(3p)

From
Junio C Hamano <gitster@pobox.com>
Date
Jul 27, 2026, 15:44 UTC
Message-ID
<xmqqo6fso2s8.fsf@gitster.g>
In-Reply-To
<f8050598-392f-44c9-8d66-0454740a7a12@kdbg.org>
Johannes Sixt <j6t@kdbg.org> writes:
Show 12 quoted lines
> Am 16.07.26 um 09:52 schrieb Patrick Steinhardt:
>> this patch series reintroduces the writev(3p) wrapper. This wrapper was
>> originally introduced as part of Git 2.54 [1], but was ejected due to
>> issues on NonStop [2].
>
> Please don't call the function "writev" so that nobody associates it
> with the guarantees that only POSIX provides, but none of the
> emulations. Call it "write_gather", for example.
>
> Also, clearly document that its only purpose is to reduce sequences of
> write() calls to a single function call, but that the additional writev
> guarantees are not needed.

It is philosophically more "pure" to have a two-level abstraction where write_gather(), which may be inspired by writev(2) but with specific subset of semantics that the application needs, is used by the application and have platforms with good enough writev(2) to implement it in terms of it. Other platforms may implement it differently, like a series of write(2) calls, and as long as it fulfills the need of write_gather(), we are OK.

Doing so would also help in a minuscule way to avoid adding to the complaints we sometimes hear that our internal implementation assumes platform support for POSIX API and semantics way too much even when we do not need to.

So I do not mind going in that direction. It feels a slightly roundabout approach, but in the longer run, I think it would place us in a much better place.

I think Patrick's writev(2) follows the pattern our previous compat/ routines have taken. We use real writev(2) where it is available, and in the fake implementations in compat/ we have comments that essentially say "the real function offers X, Y, and Z, but we only want X and Z and do not need Y, so this implementation does not support Y". It is harder to maintain because the application side may be tempted over time to start depending on Y. If some platforms cannot easily provide an equivalent of the real function, it is easier for them if the rules explicitly state from the beginning that we do not require and will never require Y, needing only X and Z from either the fake or real implementation.

At that point, we are not describing the real function anymore, so your proposal to give it a specific name is one step away from that, and that step is in the right direction.

Thanks.

PS. I was going over the list of "waiting for response" topics, and this was one of them. I suspect Patrick and the GitLab team are still away at an offsite [*], so this is in no way poking him for an immediate reroll, but rather a note sent while my attention is on these stalled topics.

https://lore.kernel.org/git/amLgMqkqxR8mKIbT@pks.im/
Previous: Johannes SixtNext: Patrick Steinhardt
Message 12 of 27 in “Reintroduce writev(3p)”
  1. 0/5 Reintroduce writev(3p)Patrick Steinhardt, Jul 16, 2026
  2. 1/5 compat/posix: introduce writev(3p) wrapperPatrick Steinhardt, Jul 16, 2026
  3. Simon RichterJul 16, 2026
  4. Junio C HamanoJul 16, 2026
  5. Junio C HamanoJul 16, 2026
  6. Patrick SteinhardtAug 5, 2026
  7. 2/5 wrapper: introduce writev(3p) wrappersPatrick Steinhardt, Jul 16, 2026
  8. 3/5 wrapper: properly handle MAX_IO_SIZE in writev(3p)Patrick Steinhardt, Jul 16, 2026
  9. 4/5 sideband: use writev(3p) to send pktlinesPatrick Steinhardt, Jul 16, 2026
  10. 5/5 fast-import: use writev(3p) to send cat-blob responsesPatrick Steinhardt, Jul 16, 2026
  11. Johannes SixtJul 16, 2026
  12. Junio C HamanoJul 27, 2026
  13. Patrick SteinhardtAug 5, 2026
  14. Junio C HamanoAug 5, 2026
  15. Johannes SixtAug 5, 2026
  16. Junio C HamanoAug 5, 2026
  17. Johannes SixtAug 5, 2026
  18. Junio C HamanoAug 5, 2026
  19. Patrick SteinhardtAug 6, 2026
  20. Junio C HamanoAug 6, 2026
  21. Patrick SteinhardtAug 7, 2026
  22. 0/5 Reintroduce writev(3p)Patrick Steinhardt, Aug 7, 2026
  23. 1/5 compat/posix: introduce writev(3p) wrapperPatrick Steinhardt, Aug 7, 2026
  24. 2/5 wrapper: introduce writev(3p) wrappersPatrick Steinhardt, Aug 7, 2026
  25. 3/5 wrapper: properly handle MAX_IO_SIZE in writev(3p)Patrick Steinhardt, Aug 7, 2026
  26. 4/5 sideband: use writev(3p) to send pktlinesPatrick Steinhardt, Aug 7, 2026
  27. 5/5 fast-import: use writev(3p) to send cat-blob responsesPatrick Steinhardt, Aug 7, 2026

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.