diff options
| author | Jakob Unterwurzacher | 2017-10-21 18:06:55 +0200 | 
|---|---|---|
| committer | Jakob Unterwurzacher | 2017-10-21 18:06:55 +0200 | 
| commit | 4954c87979efaf5b8184efccc7d9a38c21e4209b (patch) | |
| tree | 88dd50522544cce6da9ad86f1d4413317790a117 | |
| parent | 268e0484e24c3ecf9ec8df189a18cbbf36f81d1a (diff) | |
Always set "max_read" kernel option
We use fixed-size byte slice pools (sync.Pool) and cannot
handle larger requests. So ask the kernel to not send
bigger ones.
Fixes https://github.com/rfjakob/gocryptfs/issues/145
| -rw-r--r-- | mount.go | 10 | 
1 files changed, 8 insertions, 2 deletions
| @@ -2,6 +2,7 @@ package main  import (  	"encoding/json" +	"fmt"  	"log/syslog"  	"net"  	"os" @@ -250,9 +251,14 @@ func initFuseFrontend(masterkey []byte, args *argContainer, confFile *configfile  	}  	conn := nodefs.NewFileSystemConnector(pathFs.Root(), fuseOpts)  	mOpts := fuse.MountOptions{ -		// Bigger writes mean fewer calls and better throughput. -		// Capped to 128KiB on Linux. +		// Writes and reads are usually capped at 128kiB on Linux through +		// the FUSE_MAX_PAGES_PER_REQ kernel constant in fuse_i.h. Our +		// sync.Pool buffer pools are sized acc. to the default. Users may set +		// the kernel constant higher, and Synology NAS kernels are known to +		// have it >128kiB. We cannot handle more than 128kiB, so we tell +		// the kernel to limit the size explicitely.  		MaxWrite: fuse.MAX_KERNEL_WRITE, +		Options:  []string{fmt.Sprintf("max_read=%d", fuse.MAX_KERNEL_WRITE)},  	}  	if args.allow_other {  		tlog.Info.Printf(tlog.ColorYellow + "The option \"-allow_other\" is set. Make sure the file " + | 
