summaryrefslogtreecommitdiff
path: root/internal/fusefrontend
diff options
context:
space:
mode:
authorJakob Unterwurzacher2020-10-14 13:40:12 +0200
committerJakob Unterwurzacher2020-10-14 13:40:12 +0200
commitec3eaf0b8776500a9762555eac754b6c893420fd (patch)
treea230d3aff6bf0c97d8bde0d9715edce5fb39ec6a /internal/fusefrontend
parentaf4c1fb7a3f428ff704af22294ad955d05ed41dd (diff)
syscallcompat: don't retry Close()
After Close() returns, the fd is dead, even if we received EINTR. Don't retry, we could shoot down an unrelated fd that received the same fd number.
Diffstat (limited to 'internal/fusefrontend')
-rw-r--r--internal/fusefrontend/file.go14
1 files changed, 3 insertions, 11 deletions
diff --git a/internal/fusefrontend/file.go b/internal/fusefrontend/file.go
index 0367705..98e5802 100644
--- a/internal/fusefrontend/file.go
+++ b/internal/fusefrontend/file.go
@@ -391,9 +391,9 @@ func (f *File) Release(ctx context.Context) syscall.Errno {
}
f.released = true
openfiletable.Unregister(f.qIno)
- f.fd.Close()
+ err := f.fd.Close()
f.fdLock.Unlock()
- return 0
+ return fs.ToErrno(err)
}
// Flush - FUSE call
@@ -401,15 +401,7 @@ func (f *File) Flush(ctx context.Context) syscall.Errno {
f.fdLock.RLock()
defer f.fdLock.RUnlock()
- // Since Flush() may be called for each dup'd fd, we don't
- // want to really close the file, we just want to flush. This
- // is achieved by closing a dup'd fd.
- newFd, err := syscall.Dup(f.intFd())
-
- if err != nil {
- return fs.ToErrno(err)
- }
- err = syscallcompat.Close(newFd)
+ err := syscallcompat.Flush(f.intFd())
return fs.ToErrno(err)
}