A Go package for implementing a FUSE file system (fork with 'almost' zero-copy read/write)
Go to file
Vitaliy Filippov 694c1bf9db Introduce VectoredReadOp
Read requests can now take vectored responses from the filesystem
implementation and send them to FUSE device via the writev() system call.

This allows file systems to send data without copying it into the
library-provided buffer if the data is already in memory.

The change also speeds up normal ReadFileOps as a side effect because
it removes extra memory allocations.
2022-02-01 21:14:40 +03:00
.github/workflows Add gofmt CI step (#115) 2021-11-08 15:02:43 +01:00
fsutil remove naked returns across the code base (#75) 2020-01-28 10:10:08 +01:00
fuseops Introduce VectoredReadOp 2022-02-01 21:14:40 +03:00
fusetesting remove naked returns across the code base (#75) 2020-01-28 10:10:08 +01:00
fuseutil Introduce VectoredReadOp 2022-02-01 21:14:40 +03:00
internal Introduce VectoredReadOp 2022-02-01 21:14:40 +03:00
samples Add ReadBenchFS to test linear read speed 2022-02-01 21:14:38 +03: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 Introduce VectoredReadOp 2022-02-01 21:14:40 +03:00
conversions.go Introduce VectoredReadOp 2022-02-01 21:14:40 +03:00
debug.go Introduce VectoredReadOp 2022-02-01 21:14:40 +03: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 declare a go module 2021-06-05 22:48:45 +02:00
go.sum declare a go module 2021-06-05 22:48:45 +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 Introduce VectoredReadOp 2022-02-01 21:14:40 +03: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 remove naked returns across the code base (#75) 2020-01-28 10:10:08 +01:00
writev.go Introduce VectoredReadOp 2022-02-01 21:14:40 +03: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.