From a99051b32452c9a781efe248c0014b65d4abddf7 Mon Sep 17 00:00:00 2001 From: Jakob Unterwurzacher Date: Mon, 30 Aug 2021 09:53:36 +0200 Subject: Reimplement -serialize_reads flag using new SyncRead mount flag Let the kernel do the work for us. See https://github.com/hanwen/go-fuse/commit/15a8bb029a4e1a51e10043c370970596b1fbb737 for more info. --- internal/fusefrontend/args.go | 2 -- mount.go | 9 ++++++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/internal/fusefrontend/args.go b/internal/fusefrontend/args.go index 677ffd6..8e28d14 100644 --- a/internal/fusefrontend/args.go +++ b/internal/fusefrontend/args.go @@ -26,8 +26,6 @@ type Args struct { ConfigCustom bool // NoPrealloc disables automatic preallocation before writing NoPrealloc bool - // Try to serialize read operations, "-serialize_reads" - SerializeReads bool // Force decode even if integrity check fails (openSSL only) ForceDecode bool // Exclude is a list of paths to make inaccessible, starting match at diff --git a/mount.go b/mount.go index 44d5878..60ff1ba 100644 --- a/mount.go +++ b/mount.go @@ -273,7 +273,6 @@ func initFuseFrontend(args *argContainer) (rootNode fs.InodeEmbedder, wipeKeys f LongNames: args.longnames, ConfigCustom: args._configCustom, NoPrealloc: args.noprealloc, - SerializeReads: args.serialize_reads, ForceDecode: args.forcedecode, ForceOwner: args._forceOwner, Exclude: args.exclude, @@ -377,6 +376,14 @@ func initGoFuse(rootNode fs.InodeEmbedder, args *argContainer) *fuse.Server { MaxWrite: fuse.MAX_KERNEL_WRITE, Options: []string{fmt.Sprintf("max_read=%d", fuse.MAX_KERNEL_WRITE)}, Debug: args.fusedebug, + // The kernel usually submits multiple read requests in parallel, + // which means we serve them in any order. Out-of-order reads are + // expensive on some backing network filesystems + // ( https://github.com/rfjakob/gocryptfs/issues/92 ). + // + // Setting SyncRead disables FUSE_CAP_ASYNC_READ. This makes the kernel + // do everything in-order without parallelism. + SyncRead: args.serialize_reads, } mOpts := &fuseOpts.MountOptions -- cgit v1.2.3