<feed xmlns='http://www.w3.org/2005/Atom'>
<title>gocryptfs/internal, branch unlinked_fsync</title>
<subtitle>Mirror of gocryptfs source code on Github</subtitle>
<id>http://nuetzlich.net/cgit/gocryptfs/atom?h=unlinked_fsync</id>
<link rel='self' href='http://nuetzlich.net/cgit/gocryptfs/atom?h=unlinked_fsync'/>
<link rel='alternate' type='text/html' href='http://nuetzlich.net/cgit/gocryptfs/'/>
<updated>2026-09-01T20:38:37+00:00</updated>
<entry>
<title>fsync gocryptfs.diriv files</title>
<updated>2026-09-01T20:38:37+00:00</updated>
<author>
<name>Jakob Unterwurzacher</name>
</author>
<published>2026-09-01T20:35:45+00:00</published>
<link rel='alternate' type='text/html' href='http://nuetzlich.net/cgit/gocryptfs/commit/?id=842af4463989ee6808d397433e9aba8517e49c89'/>
<id>urn:sha1:842af4463989ee6808d397433e9aba8517e49c89</id>
<content type='text'>
There is a performance penalty here, but the alternative is
potential data loss on a system crash / power outage as shown in
https://github.com/rfjakob/gocryptfs/issues/1033 .

Also deduplicate the code a little using goto.

Fixes https://github.com/rfjakob/gocryptfs/issues/1033
</content>
</entry>
<entry>
<title>fusefronted: fix mkdir log message on empty gocryptfs.diriv</title>
<updated>2026-09-01T20:38:37+00:00</updated>
<author>
<name>Jakob Unterwurzacher</name>
</author>
<published>2026-09-01T20:26:12+00:00</published>
<link rel='alternate' type='text/html' href='http://nuetzlich.net/cgit/gocryptfs/commit/?id=c7f1fe301a43604cb2eb9d67f389563e8734016c'/>
<id>urn:sha1:c7f1fe301a43604cb2eb9d67f389563e8734016c</id>
<content type='text'>
Before:

$ mkdir asd
mkdir: cannot create directory ‘asd’: Operation not supported

Sep 01 22:24:15 brikett gocryptfs[185344]: go-fuse: can't convert error type: wanted 16 bytes, got 0

After:

$ mkdir asdasd
mkdir: cannot create directory ‘asdasd’: Input/output error

Sep 01 22:25:00 brikett gocryptfs[185784]: prepareAtSyscall: could not read gocryptfs.diriv: wanted 16 bytes, got 0

https://github.com/rfjakob/gocryptfs/issues/1033
</content>
</entry>
<entry>
<title>plaintextnames: don't initialize nametransform</title>
<updated>2026-09-01T19:37:42+00:00</updated>
<author>
<name>Jakob Unterwurzacher</name>
</author>
<published>2026-09-01T19:36:57+00:00</published>
<link rel='alternate' type='text/html' href='http://nuetzlich.net/cgit/gocryptfs/commit/?id=12fa2c54de65e57649e07042b6cf517896a430aa'/>
<id>urn:sha1:12fa2c54de65e57649e07042b6cf517896a430aa</id>
<content type='text'>
We should never call it in -plaintextnames mode.
</content>
</entry>
<entry>
<title>fusefrontend: take ContentLock for truncate through node.Setattr</title>
<updated>2026-08-30T20:49:34+00:00</updated>
<author>
<name>max</name>
</author>
<published>2026-08-17T01:15:41+00:00</published>
<link rel='alternate' type='text/html' href='http://nuetzlich.net/cgit/gocryptfs/commit/?id=9c2130d6c2e54c45c6787fbc49a896a8544a5e47'/>
<id>urn:sha1:9c2130d6c2e54c45c6787fbc49a896a8544a5e47</id>
<content type='text'>
node.Setattr opens its own file handle and called truncate directly,
without ContentLock. truncate ends in doWrite, which documents that the
caller holds that lock, and file.Setattr and Allocate both take it.

Besides leaving a path truncate unserialized against concurrent writes,
this skipped the write-operation counter that ContentLock.Lock()
increments. isConsecutiveWrite() reads that counter to notice foreign
modifications, so an already-open handle kept assuming its next write
appends, skipped writePadHole() and grew the file past a short last
block. That block no longer decrypted, and every later operation on the
file failed with EIO.

Fixes #1024
</content>
</entry>
<entry>
<title>fusefrontend: expose birth time via statx</title>
<updated>2026-07-22T19:57:57+00:00</updated>
<author>
<name>Marios Titas</name>
</author>
<published>2026-07-21T17:27:38+00:00</published>
<link rel='alternate' type='text/html' href='http://nuetzlich.net/cgit/gocryptfs/commit/?id=790362e8f8eabd1bdf75f98328daf94cf623c600'/>
<id>urn:sha1:790362e8f8eabd1bdf75f98328daf94cf623c600</id>
<content type='text'>
Forward the backing filesystem's STATX_BTIME on Linux while preserving
existing metadata translations and fallback behavior.

On Linux 6.6 and newer, this allows statx consumers such as GNU stat
to report birth time when the backing filesystem provides it. Older
kernels and backing filesystems without birth-time support retain the
existing behavior. No on-disk format change or migration is required.

Reverse mode remains unchanged.

Fixes #868.

Related context: #732
</content>
</entry>
<entry>
<title>fusefrontend: make translateSize Stat_t/Statx_t agnostic</title>
<updated>2026-07-22T19:51:40+00:00</updated>
<author>
<name>Jakob Unterwurzacher</name>
</author>
<published>2026-07-22T19:49:43+00:00</published>
<link rel='alternate' type='text/html' href='http://nuetzlich.net/cgit/gocryptfs/commit/?id=b3b292a8a3c1478b769e213e0e590f38cb1b923c'/>
<id>urn:sha1:b3b292a8a3c1478b769e213e0e590f38cb1b923c</id>
<content type='text'>
</content>
</entry>
<entry>
<title>sharedstorage: fix darwin &amp; freebsd build failure</title>
<updated>2026-07-16T20:07:54+00:00</updated>
<author>
<name>Jakob Unterwurzacher</name>
</author>
<published>2026-07-16T19:16:45+00:00</published>
<link rel='alternate' type='text/html' href='http://nuetzlich.net/cgit/gocryptfs/commit/?id=b8e34b1efcb27c772f0d2ca12f5ecdd6b7fc817b'/>
<id>urn:sha1:b8e34b1efcb27c772f0d2ca12f5ecdd6b7fc817b</id>
<content type='text'>
</content>
</entry>
<entry>
<title>fusefrontend: sharedstorage: truncate: error out on failed file lock</title>
<updated>2026-07-16T20:07:54+00:00</updated>
<author>
<name>Jakob Unterwurzacher</name>
</author>
<published>2026-07-16T19:10:14+00:00</published>
<link rel='alternate' type='text/html' href='http://nuetzlich.net/cgit/gocryptfs/commit/?id=ace4b17c63d8d891227fce33ed36569db9472159'/>
<id>urn:sha1:ace4b17c63d8d891227fce33ed36569db9472159</id>
<content type='text'>
</content>
</entry>
<entry>
<title>tests/cluster: fix possible fd exhaustion</title>
<updated>2026-07-16T20:07:54+00:00</updated>
<author>
<name>Jakob Unterwurzacher</name>
</author>
<published>2026-07-16T19:01:01+00:00</published>
<link rel='alternate' type='text/html' href='http://nuetzlich.net/cgit/gocryptfs/commit/?id=67e9abeb2830c517cbcbbd93de184055b2d4227b'/>
<id>urn:sha1:67e9abeb2830c517cbcbbd93de184055b2d4227b</id>
<content type='text'>
...and one typo.
</content>
</entry>
<entry>
<title>fusefrontend: LockSharedStorage: loop on EINTR, add debug output</title>
<updated>2026-07-16T20:07:54+00:00</updated>
<author>
<name>Jakob Unterwurzacher</name>
</author>
<published>2026-07-16T18:47:57+00:00</published>
<link rel='alternate' type='text/html' href='http://nuetzlich.net/cgit/gocryptfs/commit/?id=b89f0dc94bd83857b187a84a0d4ae127000f0b1c'/>
<id>urn:sha1:b89f0dc94bd83857b187a84a0d4ae127000f0b1c</id>
<content type='text'>
</content>
</entry>
</feed>
