summaryrefslogtreecommitdiff
path: root/internal/fusefrontend/file.go
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/file.go
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/file.go')
-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)
}