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

Re: [PATCH v1 1/4] builtin/index-pack.c: change xwrite to write_in_full to allow large sizes.

From
Junio C Hamano <gitster@pobox.com>
Date
Feb 26, 2024, 23:46 UTC
Message-ID
<xmqqa5nmkcuz.fsf@gitster.g>
In-Reply-To
<026b01da6906$4d96f530$e8c4df90$@nexbridge.com>
<rsbecker@nexbridge.com> writes:
Show 10 quoted lines
>>The code above loops while input_len is non-zero, and correctly
>>decrements it by the number of bytes written by xwrite() after
>>each iteration.
>>
>>Assuming that xwrite()/write(2) works how I think it does on
>>NonStop, I'm not sure I understand why this change is necessary.
>
> NonStop has a limited SSIZE_MAX. xwrite only handles that much so
> anything beyond that gets dropped (not in the above code but in
> other builtins)

xwrite() caps a single write attempt to MAX_IO_SIZE and can return a short-write, so anything beyound MAX_IO_SIZE will not even be sent to the underlying write(2). There is a heuristic based on the value of SSIZE_MAX to define MAX_IO_SIZE in <git-compat-util.h>, and if the value given by that heuristics is too large for your platform, you can tweak your own MAX_IO_SIZE (see the comments in that header file).

The caller of xwrite() must be prepared to see a write return with value less than the length it used to call the function, either because of this MAX_IO_SIZE cut-off, or because of the underlying write(2) returning after a short write. As long as the caller is prepared, like Taylor pointed out, I am not sure why you'd need to change it.

Previous: rsbecker@nexbridge.comNext: rsbecker@nexbridge.com
Message 5 of 18 in “Change xwrite() to write_in_full() in builtins.”
  1. 0/4 Change xwrite() to write_in_full() in builtins.Randall S. Becker, Feb 26, 2024
  2. 1/4 builtin/index-pack.c: change xwrite to write_in_full to allow large sizes.Randall S. Becker, Feb 26, 2024
  3. Taylor BlauFeb 26, 2024
  4. rsbecker@nexbridge.comFeb 26, 2024
  5. Junio C HamanoFeb 26, 2024
  6. rsbecker@nexbridge.comFeb 27, 2024
  7. rsbecker@nexbridge.comFeb 26, 2024
  8. 2/4 builtin/receive-pack.c: change xwrite to write_in_full to allow large sizes.Randall S. Becker, Feb 26, 2024
  9. rsbecker@nexbridge.comFeb 26, 2024
  10. Junio C HamanoFeb 26, 2024
  11. rsbecker@nexbridge.comFeb 27, 2024
  12. 3/4 builtin/repack.c: change xwrite to write_in_full to allow large sizes.Randall S. Becker, Feb 26, 2024
  13. Junio C HamanoFeb 26, 2024
  14. Jeff KingFeb 27, 2024
  15. Jeff KingFeb 27, 2024
  16. 4/4 builtin/unpack-objects.c: change xwrite to write_in_full to allow large sizes.Randall S. Becker, Feb 26, 2024
  17. Junio C HamanoFeb 26, 2024
  18. rsbecker@nexbridge.comFeb 27, 2024

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.