summaryrefslogtreecommitdiff
path: root/internal/fusefrontend/file.go
diff options
context:
space:
mode:
authorJakob Unterwurzacher2016-10-25 22:37:45 +0200
committerJakob Unterwurzacher2016-10-25 22:37:45 +0200
commitd64ccf7cf4d110d515b07b7f95127f12ecd4d318 (patch)
tree948bd0615bd80a028d4ec38640fa4e5680d50dd9 /internal/fusefrontend/file.go
parent6538dc15afb7a7a159f070a57a1e9073ca076661 (diff)
fusefrontend: move hole padding check out of Write()
The details of the hole handling don't have to be in Write, so move it away.
Diffstat (limited to 'internal/fusefrontend/file.go')
-rw-r--r--internal/fusefrontend/file.go18
1 files changed, 4 insertions, 14 deletions
diff --git a/internal/fusefrontend/file.go b/internal/fusefrontend/file.go
index 9fb9f7e..ee48930 100644
--- a/internal/fusefrontend/file.go
+++ b/internal/fusefrontend/file.go
@@ -297,21 +297,11 @@ func (f *file) Write(data []byte, off int64) (uint32, fuse.Status) {
}
wlock.lock(f.ino)
defer wlock.unlock(f.ino)
-
tlog.Debug.Printf("ino%d: FUSE Write: offset=%d length=%d", f.ino, off, len(data))
-
- fi, err := f.fd.Stat()
- if err != nil {
- tlog.Warn.Printf("Write: Fstat failed: %v", err)
- return 0, fuse.ToStatus(err)
- }
- plainSize := f.contentEnc.CipherSizeToPlainSize(uint64(fi.Size()))
- if f.createsCiphertextHole(plainSize, off) {
- status := f.zeroPad(plainSize)
- if status != fuse.OK {
- tlog.Warn.Printf("zeroPad returned error %v", status)
- return 0, status
- }
+ // If the write creates a file hole, we have to zero-pad the last block.
+ status := f.writePadHole(off)
+ if !status.Ok() {
+ return 0, status
}
return f.doWrite(data, off)
}