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

BUG: fast-import, ftruncate, and file mode

From
Elijah Newren <newren@gmail.com>
Date
Feb 23, 2022, 07:47 UTC
Message-ID
<CABPp-BERVCynOVvBq0QL49Ah+gy3W2snUVWBHfzXaVpXX3Dpyg@mail.gmail.com>
Hi,

fast-import makes use of odb_mkstemp(), which creates a secure temporary file and opens it with mode 0444, and then uses it for its packfile writing. Sometimes, fast-import will call its truncate_pack() function, which makes use of ftruncate().

According to my local manpage, "With ftruncate(), the file must be open for writing; with truncate(), the file must be writable."

The writable requirement does not appear to be enforced by the kernel on common filesystems like ext4 or zfs, but this is enforced on some filesystems. Apparently a "VxFS Veritas filesystem" got triggered by this...and some helpful bug reporters tracked this problem down and found a workaround (for the filter-repo usecase, they recompiled a special copy of git using mode 0644 for odb_mkstemp, since it was just an intermediate step anyway and won't be used elsewhere).

I'm not sure if we should (1) just stop calling truncate_pack() in fast-import (it's merely an optimization), or (2) modify odb_mkstemp() to allow specifying a mode and also have something like finalize_object_file() modify the mode before renaming, or (3) if we should do something else entirely. Someone more familiar with the object storage side of things probably knows. But I'm guessing that once someone who knows the area states what should be done, that this might be a small micro-project suitable for the GSoC interns (or anyone else wanting to get involved)?

Original details from here: https://github.com/newren/git-filter-repo/issues/342#issuecomment-1047638304

Next: Phillip Wood
Message 1 of 4 in “BUG: fast-import, ftruncate, and file mode”
  1. Elijah NewrenFeb 23, 2022
  2. Phillip WoodFeb 23, 2022
  3. Elijah NewrenFeb 23, 2022
  4. Junio C HamanoFeb 23, 2022

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.