<feed xmlns='http://www.w3.org/2005/Atom'>
<title>gocryptfs/internal/fusefrontend, branch v0.11</title>
<subtitle>Mirror of gocryptfs source code on Github</subtitle>
<id>http://nuetzlich.net/cgit/gocryptfs/atom?h=v0.11</id>
<link rel='self' href='http://nuetzlich.net/cgit/gocryptfs/atom?h=v0.11'/>
<link rel='alternate' type='text/html' href='http://nuetzlich.net/cgit/gocryptfs/'/>
<updated>2016-06-09T20:21:00+00:00</updated>
<entry>
<title>fusefrontend: Utimens: convert ENOENT to EBADF</title>
<updated>2016-06-09T20:21:00+00:00</updated>
<author>
<name>Jakob Unterwurzacher</name>
</author>
<published>2016-06-08T20:39:35+00:00</published>
<link rel='alternate' type='text/html' href='http://nuetzlich.net/cgit/gocryptfs/commit/?id=5b1eed35eea57655b36be163f0aeadb55d89cf40'/>
<id>urn:sha1:5b1eed35eea57655b36be163f0aeadb55d89cf40</id>
<content type='text'>
If /proc/self/fd/X did not exist, the actual error is that the file
descriptor was invalid.

go-fuse's pathfs prefers using an open fd even for path-based operations
but does not take any locks to prevent the fd from being closed.
Instead, it retries the operation by path if it get EBADF. So this
change allows the retry logic to work correctly.

This fixes the error

    rsync: failed to set times on "/tmp/ping.Kgw.mnt/linux-3.0/[...]/.dvb_demux.c.N7YlEM":
    No such file or directory (2)

that was triggered by pingpong-rsync.bash.
</content>
</entry>
<entry>
<title>fusefrontend: fix chown on dangling symlinks</title>
<updated>2016-06-07T22:32:44+00:00</updated>
<author>
<name>Jakob Unterwurzacher</name>
</author>
<published>2016-06-07T22:17:18+00:00</published>
<link rel='alternate' type='text/html' href='http://nuetzlich.net/cgit/gocryptfs/commit/?id=5da292828c3a58254560bb47d700186ff8c3ca9c'/>
<id>urn:sha1:5da292828c3a58254560bb47d700186ff8c3ca9c</id>
<content type='text'>
We (actually, go-fuse) used to call Chown() instead of Lchown()
which meant that the operation would fail on dangling symlinks.

Fix this by calling os.Lchown() ourself. Also add a test case
for this.
</content>
</entry>
<entry>
<title>fusefrontend: report an error if all files in a directory were invalid</title>
<updated>2016-06-04T14:39:27+00:00</updated>
<author>
<name>Jakob Unterwurzacher</name>
</author>
<published>2016-06-04T14:39:27+00:00</published>
<link rel='alternate' type='text/html' href='http://nuetzlich.net/cgit/gocryptfs/commit/?id=a602e798b1a65fdfe5e7f0260a34e17ea7ab0615'/>
<id>urn:sha1:a602e798b1a65fdfe5e7f0260a34e17ea7ab0615</id>
<content type='text'>
Just presenting an empty directory means that the user does not know
that things went wrong unless he checks the syslog or tries to delete
the directory.

It would be nice to report the error even if only some files were
invalid. However, go-fuse does not allow returning the valid
directory entries AND an error.
</content>
</entry>
<entry>
<title>fusefrontend: replace unreliable "fd &lt; 0" check</title>
<updated>2016-05-30T07:36:06+00:00</updated>
<author>
<name>Jakob Unterwurzacher</name>
</author>
<published>2016-05-30T07:29:30+00:00</published>
<link rel='alternate' type='text/html' href='http://nuetzlich.net/cgit/gocryptfs/commit/?id=5dd9576a11bb166e5b3cad70047a46038daf32d6'/>
<id>urn:sha1:5dd9576a11bb166e5b3cad70047a46038daf32d6</id>
<content type='text'>
... with the "released" boolean.

For some reason, the "f.fd.Fd() &lt; 0" check did not work reliably,
leading to nil pointer panics on the following wlock.lock().

The problem was discovered during fsstress testing and is unlikely
to happen in normal operations.

With this change, we passed 1700+ fsstress iterations.
</content>
</entry>
<entry>
<title>fusefrontend: use sync.Once for one-time warnings</title>
<updated>2016-05-29T20:50:03+00:00</updated>
<author>
<name>Jakob Unterwurzacher</name>
</author>
<published>2016-05-29T20:50:03+00:00</published>
<link rel='alternate' type='text/html' href='http://nuetzlich.net/cgit/gocryptfs/commit/?id=1648c54adb9b7d9d8984857a35c6092bbae6bdec'/>
<id>urn:sha1:1648c54adb9b7d9d8984857a35c6092bbae6bdec</id>
<content type='text'>
Using a simple boolean was racy (which was harmless
in this case) and non-idomatic.
</content>
</entry>
<entry>
<title>fusefronted: check Fstat return value on file create</title>
<updated>2016-05-29T20:43:48+00:00</updated>
<author>
<name>Jakob Unterwurzacher</name>
</author>
<published>2016-05-29T20:41:46+00:00</published>
<link rel='alternate' type='text/html' href='http://nuetzlich.net/cgit/gocryptfs/commit/?id=fd53dfd2ad88d9d277e5ab93fba1b81a5f2255d4'/>
<id>urn:sha1:fd53dfd2ad88d9d277e5ab93fba1b81a5f2255d4</id>
<content type='text'>
The Fstat call should never fail, but still, if it does return an error
it should be handled properly.
</content>
</entry>
<entry>
<title>fusefrontend: simplify wlockMap</title>
<updated>2016-05-29T20:40:05+00:00</updated>
<author>
<name>Jakob Unterwurzacher</name>
</author>
<published>2016-05-29T20:40:05+00:00</published>
<link rel='alternate' type='text/html' href='http://nuetzlich.net/cgit/gocryptfs/commit/?id=77813bdc13118fd08bbff7a68c9d5268080a2a15'/>
<id>urn:sha1:77813bdc13118fd08bbff7a68c9d5268080a2a15</id>
<content type='text'>
mapMutex can be anonymous and using an RWMutex is overkill
because the lock protects very short sections.
</content>
</entry>
<entry>
<title>fusefrontend: remove unused "forgotten" variable</title>
<updated>2016-05-29T11:46:47+00:00</updated>
<author>
<name>Jakob Unterwurzacher</name>
</author>
<published>2016-05-29T11:46:47+00:00</published>
<link rel='alternate' type='text/html' href='http://nuetzlich.net/cgit/gocryptfs/commit/?id=4c0cb37c50c66b03be43063d77a52b74f24ec9f7'/>
<id>urn:sha1:4c0cb37c50c66b03be43063d77a52b74f24ec9f7</id>
<content type='text'>
The functionality has long been replaced by the fd &lt; 0
check.
</content>
</entry>
<entry>
<title>Encrypt path in statfs() calls</title>
<updated>2016-05-12T21:24:39+00:00</updated>
<author>
<name>David Gnedt</name>
</author>
<published>2016-05-12T17:51:13+00:00</published>
<link rel='alternate' type='text/html' href='http://nuetzlich.net/cgit/gocryptfs/commit/?id=a93bcabe9c1dea14bf29b94cbddf62c1bec4d315'/>
<id>urn:sha1:a93bcabe9c1dea14bf29b94cbddf62c1bec4d315</id>
<content type='text'>
Paths in statfs() calls were not encrypted resulting in
an Function not implemented error, when the unencrypted
path didn't exist in the underlying (encrypted)
filesystem.

$ df plain/existingdir
df: ‘plain/existingdir’: Function not implemented
</content>
</entry>
<entry>
<title>fusefrontend: fix panic due to concurrently unregistered wlock</title>
<updated>2016-05-08T21:21:20+00:00</updated>
<author>
<name>Jakob Unterwurzacher</name>
</author>
<published>2016-05-08T21:16:40+00:00</published>
<link rel='alternate' type='text/html' href='http://nuetzlich.net/cgit/gocryptfs/commit/?id=ba7c798418269e6d496af206bdebd2204a07155f'/>
<id>urn:sha1:ba7c798418269e6d496af206bdebd2204a07155f</id>
<content type='text'>
Commit 730291feab properly freed wlock when the file descriptor is
closed. However, concurrently running Write and Truncates may
still want to lock it. Check if the fd has been closed first.
</content>
</entry>
</feed>
