libgocryptfs/internal/fusefrontend
Jakob Unterwurzacher 84e702126a fusefrontend: implement recursive diriv caching
The new contrib/maxlen.bash showed that we have exponential
runtime with respect to directory depth.

The new recursive diriv caching is a lot smarter as it caches
intermediate lookups. maxlen.bash now completes in a few seconds.

xfstests results same as
2d158e4c82/screenlog.0 :

  Failures: generic/035 generic/062 generic/080 generic/093 generic/099 generic/215 generic/285 generic/319 generic/426 generic/444 generic/467 generic/477 generic/523
  Failed 13 of 580 tests

benchmark.bash results are identical:

  $ ./benchmark.bash
  Testing gocryptfs at /tmp/benchmark.bash.BdQ: gocryptfs v2.0.1-17-g6b09bc0; go-fuse v2.1.1-0.20210611132105-24a1dfe6b4f8; 2021-06-25 go1.16.5 linux/amd64
  /tmp/benchmark.bash.BdQ.mnt is a mountpoint
  WRITE: 262144000 bytes (262 MB, 250 MiB) copied, 0,4821 s, 544 MB/s
  READ:  262144000 bytes (262 MB, 250 MiB) copied, 0,266061 s, 985 MB/s
  UNTAR: 8,280
  MD5:   4,564
  LS:    1,745
  RM:    2,244
2021-06-25 13:56:53 +02:00
..
args.go v2api: -sharestorage: disable hard link tracking & add tests 2021-03-07 17:22:29 +01:00
ctlsock_interface.go v2api: implement ctlsocksrv.Interface 2020-07-17 22:14:40 +02:00
dircache.go fusefrontend: implement recursive diriv caching 2021-06-25 13:56:53 +02:00
file_allocate_truncate.go v2api: rename "File2" to just "File" 2020-08-16 12:50:33 +02:00
file_api_check.go v2api: clean up api TODOs 2020-08-16 13:52:27 +02:00
file_holes.go fusefrontend: rewrite Lseek SEEK_DATA / SEEK_HOLE 2021-05-29 16:05:36 +02:00
file_setattr.go v2api: rename "File2" to just "File" 2020-08-16 12:50:33 +02:00
file.go fusefrontend: catch ReadAt integer overflow 2021-06-02 18:20:05 +02:00
node_api_check.go v2api: implement Getxattr, Setxattr, Removexattr, Listxattr 2020-07-14 19:55:20 +02:00
node_dir_ops.go fusefrontend: implement recursive diriv caching 2021-06-25 13:56:53 +02:00
node_helpers.go fusefrontend: implement recursive diriv caching 2021-06-25 13:56:53 +02:00
node_open_create.go fusefrontend: implement recursive diriv caching 2021-06-25 13:56:53 +02:00
node_prepare_syscall.go fusefrontend: implement recursive diriv caching 2021-06-25 13:56:53 +02:00
node_xattr_darwin.go fusefrontend: implement recursive diriv caching 2021-06-25 13:56:53 +02:00
node_xattr_linux.go fusefrontend: implement recursive diriv caching 2021-06-25 13:56:53 +02:00
node_xattr.go fusefrontend: run acl Setxattr in user context 2021-06-02 19:10:36 +02:00
node.go fusefrontend: implement recursive diriv caching 2021-06-25 13:56:53 +02:00
openbackingdir_test.go tests: fusefronted: fix TestOpenBackingDir 2021-04-03 12:34:18 +02:00
root_node.go fusefrontend: implement recursive diriv caching 2021-06-25 13:56:53 +02:00
xattr_unit_test.go nametransform: pass badname patterns via New 2021-06-20 19:09:46 +02:00