diff options
author | Jakob Unterwurzacher | 2016-11-17 20:32:19 +0100 |
---|---|---|
committer | Jakob Unterwurzacher | 2016-11-17 20:32:19 +0100 |
commit | e04dc050126edcf7440ea5412bc74c6ad8b42e95 (patch) | |
tree | 56affe516cc83618152790582d0a8a6b2c870646 /internal/fusefrontend/file_allocate_truncate.go | |
parent | 081015aa746cc2a37284ad545d56d5ceb78164b6 (diff) |
fusefrontend: upgrade wlockMap to use device AND inode number
If there are multiple filesystems backing the gocryptfs filesystems
inode numbers are not guaranteed to be unique.
Diffstat (limited to 'internal/fusefrontend/file_allocate_truncate.go')
-rw-r--r-- | internal/fusefrontend/file_allocate_truncate.go | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/internal/fusefrontend/file_allocate_truncate.go b/internal/fusefrontend/file_allocate_truncate.go index bedbba3..f2fca22 100644 --- a/internal/fusefrontend/file_allocate_truncate.go +++ b/internal/fusefrontend/file_allocate_truncate.go @@ -50,8 +50,8 @@ func (f *file) Allocate(off uint64, sz uint64, mode uint32) fuse.Status { if f.released { return fuse.EBADF } - wlock.lock(f.ino) - defer wlock.unlock(f.ino) + wlock.lock(f.devIno) + defer wlock.unlock(f.devIno) blocks := f.contentEnc.ExplodePlainRange(off, sz) firstBlock := blocks[0] @@ -97,17 +97,17 @@ func (f *file) Truncate(newSize uint64) fuse.Status { defer f.fdLock.RUnlock() if f.released { // The file descriptor has been closed concurrently. - tlog.Warn.Printf("ino%d fh%d: Truncate on released file", f.ino, f.intFd()) + tlog.Warn.Printf("ino%d fh%d: Truncate on released file", f.devIno.ino, f.intFd()) return fuse.EBADF } - wlock.lock(f.ino) - defer wlock.unlock(f.ino) + wlock.lock(f.devIno) + defer wlock.unlock(f.devIno) var err error // Common case first: Truncate to zero if newSize == 0 { err = syscall.Ftruncate(int(f.fd.Fd()), 0) if err != nil { - tlog.Warn.Printf("ino%d fh%d: Ftruncate(fd, 0) returned error: %v", f.ino, f.intFd(), err) + tlog.Warn.Printf("ino%d fh%d: Ftruncate(fd, 0) returned error: %v", f.devIno.ino, f.intFd(), err) return fuse.ToStatus(err) } // Truncate to zero kills the file header @@ -123,7 +123,7 @@ func (f *file) Truncate(newSize uint64) fuse.Status { oldB := float32(oldSize) / float32(f.contentEnc.PlainBS()) newB := float32(newSize) / float32(f.contentEnc.PlainBS()) - tlog.Debug.Printf("ino%d: FUSE Truncate from %.2f to %.2f blocks (%d to %d bytes)", f.ino, oldB, newB, oldSize, newSize) + tlog.Debug.Printf("ino%d: FUSE Truncate from %.2f to %.2f blocks (%d to %d bytes)", f.devIno.ino, oldB, newB, oldSize, newSize) // File size stays the same - nothing to do if newSize == oldSize { @@ -166,7 +166,7 @@ func (f *file) Truncate(newSize uint64) fuse.Status { func (f *file) statPlainSize() (uint64, error) { fi, err := f.fd.Stat() if err != nil { - tlog.Warn.Printf("ino%d fh%d: statPlainSize: %v", f.ino, f.intFd(), err) + tlog.Warn.Printf("ino%d fh%d: statPlainSize: %v", f.devIno.ino, f.intFd(), err) return 0, err } cipherSz := uint64(fi.Size()) |