A Go package for implementing a FUSE file system (fork with 'almost' zero-copy read/write)
Go to file
Doychin Atanasov 37d63df227
Add support for the FUSE_BATCH_FORGET operation (#123)
There are certain Kernel versions which do not send individual
Forget operations after they receive "not implemented" for Batch Forget.
One example is "5.4.0-110-generic" on Ubuntu 20.04. I am sure there are
plenty of others.

This leads to inode "leaks". Where reference counts are never decreased
and the inodes were left hanging around long after they are not needed
any more.

The best way to fix that was adding support for batch operations to the
lib. This way all users will be able to benefit from the batching
optimization.

Co-authored-by: Doychin Atanasov <doychin.atanasov@chaosgroup.com>
2022-05-27 08:49:15 +02:00
.github/workflows GitHub Actions: upgrade to latest stable version of Go 1.17 2022-03-03 09:31:36 +01:00
fsutil remove naked returns across the code base (#75) 2020-01-28 10:10:08 +01:00
fuseops Add support for the FUSE_BATCH_FORGET operation (#123) 2022-05-27 08:49:15 +02:00
fusetesting remove naked returns across the code base (#75) 2020-01-28 10:10:08 +01:00
fuseutil Add support for the FUSE_BATCH_FORGET operation (#123) 2022-05-27 08:49:15 +02:00
internal Add support for the FUSE_BATCH_FORGET operation (#123) 2022-05-27 08:49:15 +02:00
samples GitHub Actions: upgrade to latest stable version of Go 1.17 2022-03-03 09:31:36 +01:00
.gitignore Add configuration to control async reads (#105) 2021-09-04 17:48:39 +02:00
LICENSE Upated the license file. 2015-07-24 15:40:31 +10:00
README.md Switch from Travis CI to GitHub Actions (#111) 2021-11-07 17:30:55 +01:00
connection.go Implement vectored read support 2022-03-03 09:25:18 +01:00
conversions.go Add support for the FUSE_BATCH_FORGET operation (#123) 2022-05-27 08:49:15 +02:00
debug.go Implement vectored read support 2022-03-03 09:25:18 +01:00
doc.go Added a callout to fuseutil.NewFileSystemServer. 2015-03-25 09:18:56 +11:00
errors.go added tests and enhanced comments 2017-05-11 14:45:40 -07:00
freelists.go InMessage is initialized with a storage allocated before reads (#110) 2021-10-28 23:41:51 +02:00
go.mod update go.mod to pull in latest x/sys and x/net 2022-05-27 08:33:30 +02:00
go.sum update go.mod to pull in latest x/sys and x/net 2022-05-27 08:33:30 +02:00
mount.go Use newer mounting method (similar to fusermount) with macfuse 4.x (#106) 2021-10-19 18:50:09 +02:00
mount_config.go Implement vectored read support 2022-03-03 09:25:18 +01:00
mount_darwin.go Add gofmt CI step (#115) 2021-11-08 15:02:43 +01:00
mount_linux.go Use newer mounting method (similar to fusermount) with macfuse 4.x (#106) 2021-10-19 18:50:09 +02:00
mount_test.go Remove TestNonEmptyMountPoint; libfuse3 allows non-empty mountpoints 2021-06-05 23:14:29 +02:00
mounted_file_system.go replace imports of "golang.org/x/net/context" with "context" 2018-02-07 19:18:23 +00:00
ops.go Add support for max_pages and increase to 256 (#96) 2021-08-02 23:29:12 +02:00
unmount.go Update documentation for Go style. 2017-01-03 10:47:18 +11:00
unmount_linux.go prefer fusermount3 (from FUSE 3), fall back to old fusermount 2020-04-23 21:10:43 +02:00
unmount_std.go GitHub Actions: upgrade to latest stable version of Go 1.17 2022-03-03 09:31:36 +01:00
writev.go Implement vectored read support 2022-03-03 09:25:18 +01:00

README.md

ci GoDoc

This package allows for writing and mounting user-space file systems from Go. Install it as follows:

go get -u github.com/jacobsa/fuse

Afterward, see the documentation for the following three packages:

  • Package fuse provides support for mounting a new file system and reading requests from the kernel.

  • Package fuseops enumerates the supported requests from the kernel, and provides documentation on their semantics.

  • Package fuseutil, in particular the FileSystem interface, provides a convenient way to create a file system type and export it to the kernel via fuse.Mount.

Make sure to also see the sub-packages of the samples package for examples and tests.

This package owes its inspiration and most of its kernel-related code to bazil.org/fuse.