diff options
| -rw-r--r-- | internal/contentenc/content.go | 5 | ||||
| -rw-r--r-- | internal/fusefrontend/file.go | 5 | 
2 files changed, 8 insertions, 2 deletions
| diff --git a/internal/contentenc/content.go b/internal/contentenc/content.go index 238683c..188b4e2 100644 --- a/internal/contentenc/content.go +++ b/internal/contentenc/content.go @@ -60,6 +60,8 @@ type ContentEnc struct {  	CReqPool bPool  	// Plaintext block pool. Always returns plainBS-sized byte slices.  	pBlockPool bPool +	// Plaintext request data pool. Slice have size fuse.MAX_KERNEL_WRITE. +	PReqPool bPool  }  // New returns an initialized ContentEnc instance. @@ -80,6 +82,7 @@ func New(cc *cryptocore.CryptoCore, plainBS uint64, forceDecode bool) *ContentEn  		cBlockPool:   newBPool(int(cipherBS)),  		CReqPool:     newBPool(cReqSize),  		pBlockPool:   newBPool(int(plainBS)), +		PReqPool:     newBPool(fuse.MAX_KERNEL_WRITE),  	}  	return c  } @@ -98,7 +101,7 @@ func (be *ContentEnc) CipherBS() uint64 {  func (be *ContentEnc) DecryptBlocks(ciphertext []byte, firstBlockNo uint64, fileID []byte) ([]byte, error) {  	cBuf := bytes.NewBuffer(ciphertext)  	var err error -	var pBuf bytes.Buffer +	pBuf := bytes.NewBuffer(be.PReqPool.Get()[:0])  	for cBuf.Len() > 0 {  		cBlock := cBuf.Next(int(be.cipherBS))  		var pBlock []byte diff --git a/internal/fusefrontend/file.go b/internal/fusefrontend/file.go index 70c8d83..a1f4f15 100644 --- a/internal/fusefrontend/file.go +++ b/internal/fusefrontend/file.go @@ -214,7 +214,10 @@ func (f *file) doRead(dst []byte, off uint64, length uint64) ([]byte, fuse.Statu  	}  	// else: out stays empty, file was smaller than the requested offset -	return append(dst, out...), fuse.OK +	out = append(dst, out...) +	f.fs.contentEnc.PReqPool.Put(plaintext) + +	return out, fuse.OK  }  // Read - FUSE call | 
