diff options
author | Jakob Unterwurzacher | 2017-10-22 14:43:24 +0200 |
---|---|---|
committer | Jakob Unterwurzacher | 2017-10-22 14:43:24 +0200 |
commit | 8c1b363f74f4db4e413fe17e327a82bd6ef66837 (patch) | |
tree | d6ec1e3d99239c44a91164306902c9a0601b5cc6 | |
parent | a1170be979cb75da11e84f45f67d3f5468d97669 (diff) |
reverse mode: disable ClientInodes (hard link tracking)
Disable hard link tracking to avoid strange breakage on duplicate
inode numbers ( https://github.com/rfjakob/gocryptfs/issues/149 ).
Reverse mode is read-only, so we don't need a working link().
-rw-r--r-- | mount.go | 10 |
1 files changed, 9 insertions, 1 deletions
@@ -221,10 +221,19 @@ func initFuseFrontend(masterkey []byte, args *argContainer, confFile *configfile tlog.Debug.Printf("frontendArgs: %s", string(jsonBytes)) var finalFs pathfs.FileSystem var ctlSockBackend ctlsock.Interface + // pathFsOpts are passed into go-fuse/pathfs + pathFsOpts := &pathfs.PathNodeFsOptions{ClientInodes: true} if args.reverse { + // The dance with the intermediate variables is because we need to + // cast the FS into pathfs.FileSystem *and* ctlsock.Interface. This + // avoids using interface{}. fs := fusefrontend_reverse.NewFS(masterkey, frontendArgs) finalFs = fs ctlSockBackend = fs + // Reverse mode is read-only, so we don't need a working link(). + // Disable hard link tracking to avoid strange breakage on duplicate + // inode numbers ( https://github.com/rfjakob/gocryptfs/issues/149 ). + pathFsOpts.ClientInodes = false } else { fs := fusefrontend.NewFS(masterkey, frontendArgs) finalFs = fs @@ -240,7 +249,6 @@ func initFuseFrontend(masterkey []byte, args *argContainer, confFile *configfile if args._ctlsockFd != nil { go ctlsock.Serve(args._ctlsockFd, ctlSockBackend) } - pathFsOpts := &pathfs.PathNodeFsOptions{ClientInodes: true} pathFs := pathfs.NewPathNodeFs(finalFs, pathFsOpts) fuseOpts := &nodefs.Options{ // These options are to be compatible with libfuse defaults, |