fuse
packageThis package is not in the latest version of its module.
Details
Validgo.mod file
The Go module system was introduced in Go 1.11 and is the official dependency management solution for Go.
Redistributable license
Redistributable licenses place minimal restrictions on how software can be used, modified, and redistributed.
Tagged version
Modules with tagged versions give importers more predictable builds.
Stable version
When a project reaches major version v1 it is considered stable.
- Learn more about best practices
Repository
Links
Documentation¶
Overview¶
Package fuse provides APIs to implement filesystems inuserspace in terms of raw FUSE protocol.
A filesystem is implemented by implementing its server that provides aRawFileSystem interface. Typically the server embedsNewDefaultRawFileSystem() and implements only subset of filesystem methods:
type MyFS struct {fuse.RawFileSystem...}func NewMyFS() *MyFS {return &MyFS{RawFileSystem: fuse.NewDefaultRawFileSystem(),...}}// Mkdir implements "mkdir" request handler.//// For other requests - not explicitly implemented by MyFS - ENOSYS// will be typically returned to client.func (fs *MyFS) Mkdir(...) {...}Then the filesystem can be mounted and served to a client (typically OSkernel) by creating Server:
fs := NewMyFS() // implements RawFileSystemfssrv, err := fuse.NewServer(fs, mountpoint, &fuse.MountOptions{...})if err != nil {...}and letting the server do its work:
// either synchronously - .Serve() blocks until the filesystem is unmounted.fssrv.Serve()// or in the background - .Serve() is spawned in another goroutine, but// before interacting with fssrv from current context we have to wait// until the filesystem mounting is complete.go fssrv.Serve()err = fssrv.WaitMount()if err != nil {...}The server will serve clients by dispatching their requests to thefilesystem implementation and conveying responses back. For example "mkdir"FUSE request dispatches to call
fs.Mkdir(*MkdirIn, ..., *EntryOut)
"stat" to call
fs.GetAttr(*GetAttrIn, *AttrOut)
etc. Please refer to RawFileSystem documentation for details.
Typically, each call of the API happens in its owngoroutine, so take care to make the file system thread-safe.
Higher level interfaces¶
As said above this packages provides way to implement filesystems in terms ofraw FUSE protocol. Additionally packages nodefs and pathfs provide ways toimplement filesystem at higher levels:
Package github.com/hanwen/go-fuse/fuse/nodefs provides way to implementfilesystems in terms of inodes. This resembles kernel's idea of what afilesystem looks like.
Package github.com/hanwen/go-fuse/fuse/pathfs provides way to implementfilesystems in terms of path names. Working with path names is somewhateasier compared to inodes, however renames can be racy. Do not use pathfs ifyou care about correctness.
Index¶
- Constants
- func NewContext(ctx context.Context, caller *Caller) context.Context
- func Print(obj interface{}) string
- func ToStatT(f os.FileInfo) *syscall.Stat_t
- func UtimeToTimespec(t *time.Time) (ts syscall.Timespec)
- type AccessIn
- type Attr
- func (a *Attr) AccessTime() time.Time
- func (a *Attr) ChangeTime() time.Time
- func (a *Attr) FromStat(s *syscall.Stat_t)
- func (a *Attr) IsBlock() bool
- func (a *Attr) IsChar() bool
- func (a *Attr) IsDir() bool
- func (a *Attr) IsFifo() bool
- func (a *Attr) IsRegular() bool
- func (a *Attr) IsSocket() bool
- func (a *Attr) IsSymlink() bool
- func (a *Attr) ModTime() time.Time
- func (a *Attr) SetTimes(access *time.Time, mod *time.Time, chstatus *time.Time)
- func (a *Attr) String() string
- type AttrOut
- type Caller
- type Context
- type CopyFileRangeIn
- type CreateIn
- type CreateOut
- type DirEntry
- type DirEntryList
- type EntryOut
- type FallocateIn
- type FileLock
- type FlushIn
- type ForgetIn
- type FsyncIn
- type GetAttrIn
- type GetXAttrIn
- type GetXAttrOut
- type InHeader
- type InitIn
- type InitOut
- type InterruptIn
- type LatencyMap
- type LinkIn
- type LkIn
- type LkOut
- type LseekIn
- type LseekOut
- type MkdirIn
- type MknodIn
- type MountOptions
- type NotifyInvalDeleteOut
- type NotifyInvalEntryOut
- type NotifyInvalInodeOut
- type NotifyRetrieveIn
- type NotifyRetrieveOut
- type NotifyStoreOut
- type OpenIn
- type OpenOut
- type OutHeader
- type Owner
- type RawFileSystem
- type ReadIn
- type ReadResult
- type ReleaseIn
- type Rename1In
- type RenameIn
- type Server
- func (ms *Server) DebugData() string
- func (ms *Server) DeleteNotify(parent uint64, child uint64, name string) Status
- func (ms *Server) EntryNotify(parent uint64, name string) Status
- func (ms *Server) InodeNotify(node uint64, off int64, length int64) Status
- func (ms *Server) InodeNotifyStoreCache(node uint64, offset int64, data []byte) Status
- func (ms *Server) InodeRetrieveCache(node uint64, offset int64, dest []byte) (n int, st Status)
- func (ms *Server) KernelSettings() *InitIn
- func (ms *Server) RecordLatencies(l LatencyMap)
- func (ms *Server) Serve()
- func (ms *Server) SetDebug(dbg bool)
- func (ms *Server) Unmount() (err error)
- func (ms *Server) Wait()
- func (ms *Server) WaitMount() error
- type SetAttrIn
- type SetAttrInCommon
- func (s *SetAttrInCommon) GetATime() (time.Time, bool)
- func (s *SetAttrInCommon) GetCTime() (time.Time, bool)
- func (s *SetAttrInCommon) GetFh() (uint64, bool)
- func (s *SetAttrInCommon) GetGID() (uint32, bool)
- func (s *SetAttrInCommon) GetMTime() (time.Time, bool)
- func (s *SetAttrInCommon) GetMode() (uint32, bool)
- func (s *SetAttrInCommon) GetSize() (uint64, bool)
- func (s *SetAttrInCommon) GetUID() (uint32, bool)
- type SetXAttrIn
- type StatfsOut
- type Status
- type WriteIn
- type WriteOut
Constants¶
const (FUSE_ROOT_ID = 1FUSE_UNKNOWN_INO = 0xffffffffCUSE_UNRESTRICTED_IOCTL = (1 << 0)FUSE_LK_FLOCK = (1 << 0)FUSE_IOCTL_MAX_IOV = 256FUSE_POLL_SCHEDULE_NOTIFY = (1 << 0)CUSE_INIT_INFO_MAX = 4096S_IFDIR =syscall.S_IFDIRS_IFREG =syscall.S_IFREGS_IFLNK =syscall.S_IFLNKS_IFIFO =syscall.S_IFIFOCUSE_INIT = 4096O_ANYWRITE =uint32(os.O_WRONLY |os.O_RDWR |os.O_APPEND |os.O_CREATE |os.O_TRUNC))
const (OK =Status(0)// EACCESS Permission deniedEACCES =Status(syscall.EACCES)// EBUSY Device or resource busyEBUSY =Status(syscall.EBUSY)// EAGAIN Resource temporarily unavailableEAGAIN =Status(syscall.EAGAIN)// EINTR Call was interruptedEINTR =Status(syscall.EINTR)// EINVAL Invalid argumentEINVAL =Status(syscall.EINVAL)// EIO I/O errorEIO =Status(syscall.EIO)// ENOENT No such file or directoryENOENT =Status(syscall.ENOENT)// ENOSYS Function not implementedENOSYS =Status(syscall.ENOSYS)// ENODATA No data availableENODATA =Status(syscall.ENODATA)// ENOTDIR Not a directoryENOTDIR =Status(syscall.ENOTDIR)// ENOTSUP Not supportedENOTSUP =Status(syscall.ENOTSUP)// EISDIR Is a directoryEISDIR =Status(syscall.EISDIR)// EPERM Operation not permittedEPERM =Status(syscall.EPERM)// ERANGE Math result not representableERANGE =Status(syscall.ERANGE)// EXDEV Cross-device linkEXDEV =Status(syscall.EXDEV)// EBADF Bad file numberEBADF =Status(syscall.EBADF)// ENODEV No such deviceENODEV =Status(syscall.ENODEV)// EROFS Read-only file systemEROFS =Status(syscall.EROFS))
const (FATTR_MODE = (1 << 0)FATTR_UID = (1 << 1)FATTR_GID = (1 << 2)FATTR_SIZE = (1 << 3)FATTR_ATIME = (1 << 4)FATTR_MTIME = (1 << 5)FATTR_FH = (1 << 6)FATTR_ATIME_NOW = (1 << 7)FATTR_MTIME_NOW = (1 << 8)FATTR_LOCKOWNER = (1 << 9)FATTR_CTIME = (1 << 10))
const (// OpenOut.FlagsFOPEN_DIRECT_IO = (1 << 0)FOPEN_KEEP_CACHE = (1 << 1)FOPEN_NONSEEKABLE = (1 << 2)FOPEN_CACHE_DIR = (1 << 3)FOPEN_STREAM = (1 << 4))
const (CAP_ASYNC_READ = (1 << 0)CAP_POSIX_LOCKS = (1 << 1)CAP_FILE_OPS = (1 << 2)CAP_ATOMIC_O_TRUNC = (1 << 3)CAP_EXPORT_SUPPORT = (1 << 4)CAP_BIG_WRITES = (1 << 5)CAP_DONT_MASK = (1 << 6)CAP_SPLICE_WRITE = (1 << 7)CAP_SPLICE_MOVE = (1 << 8)CAP_SPLICE_READ = (1 << 9)CAP_FLOCK_LOCKS = (1 << 10)CAP_IOCTL_DIR = (1 << 11)CAP_AUTO_INVAL_DATA = (1 << 12)CAP_READDIRPLUS = (1 << 13)CAP_READDIRPLUS_AUTO = (1 << 14)CAP_ASYNC_DIO = (1 << 15)CAP_WRITEBACK_CACHE = (1 << 16)CAP_NO_OPEN_SUPPORT = (1 << 17)CAP_PARALLEL_DIROPS = (1 << 18)CAP_HANDLE_KILLPRIV = (1 << 19)CAP_POSIX_ACL = (1 << 20)CAP_ABORT_ERROR = (1 << 21)CAP_MAX_PAGES = (1 << 22)CAP_CACHE_SYMLINKS = (1 << 23)CAP_NO_OPENDIR_SUPPORT = (1 << 24)CAP_EXPLICIT_INVAL_DATA = (1 << 25))
To be set in InitIn/InitOut.Flags.
const (FUSE_IOCTL_COMPAT = (1 << 0)FUSE_IOCTL_UNRESTRICTED = (1 << 1)FUSE_IOCTL_RETRY = (1 << 2))
const (X_OK = 1W_OK = 2R_OK = 4F_OK = 0)
For AccessIn.Mask.
const (//NOTIFY_POLL = -1 // notify kernel that a poll waiting for IO on a file handle should wake upNOTIFY_INVAL_INODE = -2// notify kernel that an inode should be invalidatedNOTIFY_INVAL_ENTRY = -3// notify kernel that a directory entry should be invalidatedNOTIFY_STORE_CACHE = -4// store data into kernel cache of an inodeNOTIFY_RETRIEVE_CACHE = -5// retrieve data from kernel cache of an inodeNOTIFY_DELETE = -6// notify kernel that a directory entry has been deleted)
const (WRITE_CACHE = (1 << 0)WRITE_LOCKOWNER = (1 << 1))
const (ENOATTR =Status(syscall.ENODATA)// On Linux, ENOATTR is an alias for ENODATA.// EREMOTEIO Remote I/O errorEREMOTEIO =Status(syscall.EREMOTEIO))
const (// Mask for GetAttrIn.Flags. If set, GetAttrIn has a file handle set.FUSE_GETATTR_FH = (1 << 0))const (// The kernel caps writes at 128k.MAX_KERNEL_WRITE = 128 * 1024)const (READ_LOCKOWNER = (1 << 1))const RELEASE_FLUSH = (1 << 0)Variables¶
This section is empty.
Functions¶
Types¶
typeAttr¶
type Attr struct {Inouint64Sizeuint64// Blocks is the number of 512-byte blocks that the file occupies on disk.Blocksuint64Atimeuint64Mtimeuint64Ctimeuint64Atimensecuint32Mtimensecuint32Ctimensecuint32Modeuint32Nlinkuint32OwnerRdevuint32// Blksize is the preferred size for file system operations.Blksizeuint32Paddinguint32}func (*Attr)AccessTime¶
func (*Attr)ChangeTime¶
typeAttrOut¶
func (*AttrOut)SetTimeout¶
typeCaller¶
Caller has data on the process making the FS call.
The UID and GID are effective UID/GID, except for the ACCESSopcode, where UID and GID are the real UIDs
typeContext¶
type Context struct {CallerCancel <-chan struct{}}Context passes along cancelation signal and request data (PID, GID,UID). The name of this class predates the standard "context"package from Go, but it does implement the context.Contextinterface.
When a FUSE request is canceled, the API routine should respond byreturning the EINTR status code.
typeCopyFileRangeIn¶
typeDirEntry¶
type DirEntry struct {// Mode is the file's mode. Only the high bits (eg. S_IFDIR)// are considered.Modeuint32// Name is the basename of the file in the directory.Namestring// Ino is the inode number.Inouint64}DirEntry is a type for PathFileSystem and NodeFileSystem to returndirectory contents in.
typeDirEntryList¶
type DirEntryList struct {// contains filtered or unexported fields}DirEntryList holds the return value for READDIR and READDIRPLUSopcodes.
funcNewDirEntryList¶
func NewDirEntryList(data []byte, offuint64) *DirEntryList
NewDirEntryList creates a DirEntryList with the given data bufferand offset.
func (*DirEntryList)AddDirEntry¶
func (l *DirEntryList) AddDirEntry(eDirEntry)bool
AddDirEntry tries to add an entry, and reports whether itsucceeded.
func (*DirEntryList)AddDirLookupEntry¶
func (l *DirEntryList) AddDirLookupEntry(eDirEntry) *EntryOut
AddDirLookupEntry is used for ReadDirPlus. If reserves and zeroizes spacefor an EntryOut struct and serializes a DirEntry.On success, it returns pointers to both structs.If not enough space was left, it returns two nil pointers.
The resulting READDIRPLUS output buffer looks like this in memory:1) EntryOut{}2) _Dirent{}3) Name (null-terminated)4) Padding to align to 8 bytes[repeat]
func (*DirEntryList)FixMode¶added inv2.0.3
func (l *DirEntryList) FixMode(modeuint32)
FixMode overrides the file mode of the last direntry that was added. This canbe needed when a directory changes while READDIRPLUS is running.Only the file type bits of mode are considered, the rest is masked out.
typeEntryOut¶
type EntryOut struct {NodeIduint64Generationuint64EntryValiduint64AttrValiduint64EntryValidNsecuint32AttrValidNsecuint32Attr}EntryOut holds the result of a (directory,name) lookup. It has twoTTLs, one for the (directory, name) lookup itself, and one for theattributes (eg. size, mode). The entry TTL also applies if thelookup result is ENOENT ("negative entry lookup")
func (*EntryOut)AttrTimeout¶
func (*EntryOut)EntryTimeout¶
EntryTimeout returns entry timeout currently
func (*EntryOut)SetAttrTimeout¶
func (*EntryOut)SetEntryTimeout¶
typeFallocateIn¶
typeFileLock¶
func (*FileLock)FromFlockT¶
typeGetAttrIn¶
typeGetXAttrIn¶
typeGetXAttrOut¶
typeInitIn¶
func (*InitIn)SupportsNotify¶
SupportsNotify returns whether a certain notification type issupported. Pass any of the NOTIFY_* types as argument.
func (*InitIn)SupportsVersion¶
SupportsVersion returns true if the kernel supports the givenprotocol version or newer.
typeInterruptIn¶
typeLatencyMap¶
This type may be provided for recording latencies of each FUSEoperation.
typeMountOptions¶
type MountOptions struct {AllowOtherbool// Options are passed as -o string to fusermount.Options []string// Default is _DEFAULT_BACKGROUND_TASKS, 12. This numbers// controls the allowed number of requests that relate to// async I/O. Concurrency for synchronous I/O is not limited.MaxBackgroundint// Write size to use. If 0, use default. This number is// capped at the kernel maximum.MaxWriteint// Max read ahead to use. If 0, use default. This number is// capped at the kernel maximum.MaxReadAheadint// If IgnoreSecurityLabels is set, all security related xattr// requests will return NO_DATA without passing through the// user defined filesystem. You should only set this if you// file system implements extended attributes, and you are not// interested in security labels.IgnoreSecurityLabelsbool// ignoring labels should be provided as a fusermount mount option.// If RememberInodes is set, we will never forget inodes.// This may be useful for NFS.RememberInodesbool// Values shown in "df -T" and friends// First column, "Filesystem"FsNamestring// Second column, "Type", will be shown as "fuse." + NameNamestring// If set, wrap the file system in a single-threaded locking wrapper.SingleThreadedbool// If set, return ENOSYS for Getxattr calls, so the kernel does not issue any// Xattr operations at all.DisableXAttrsbool// If set, print debugging information.Debugbool// If set, ask kernel to forward file locks to FUSE. If using,// you must implement the GetLk/SetLk/SetLkw methods.EnableLocksbool// If set, ask kernel not to do automatic data cache invalidation.// The filesystem is fully responsible for invalidating data cache.ExplicitDataCacheControlbool// If set, fuse will first attempt to use syscall.Mount instead of// fusermount to mount the filesystem. This will not update /etc/mtab// but might be needed if fusermount is not available.DirectMountbool// Options passed to syscall.Mount, the default value used by fusermount// is syscall.MS_NOSUID|syscall.MS_NODEVDirectMountFlagsuintptr}typeRawFileSystem¶
type RawFileSystem interface {String()string// If called, provide debug output through the log package.SetDebug(debugbool)// Lookup is called by the kernel when the VFS wants to know// about a file inside a directory. Many lookup calls can// occur in parallel, but only one call happens for each (dir,// name) pair.Lookup(cancel <-chan struct{}, header *InHeader, namestring, out *EntryOut) (statusStatus)// Forget is called when the kernel discards entries from its// dentry cache. This happens on unmount, and when the kernel// is short on memory. Since it is not guaranteed to occur at// any moment, and since there is no return value, Forget// should not do I/O, as there is no channel to report back// I/O errors.Forget(nodeid, nlookupuint64)// Attributes.GetAttr(cancel <-chan struct{}, input *GetAttrIn, out *AttrOut) (codeStatus)SetAttr(cancel <-chan struct{}, input *SetAttrIn, out *AttrOut) (codeStatus)// Modifying structure.Mknod(cancel <-chan struct{}, input *MknodIn, namestring, out *EntryOut) (codeStatus)Mkdir(cancel <-chan struct{}, input *MkdirIn, namestring, out *EntryOut) (codeStatus)Unlink(cancel <-chan struct{}, header *InHeader, namestring) (codeStatus)Rmdir(cancel <-chan struct{}, header *InHeader, namestring) (codeStatus)Rename(cancel <-chan struct{}, input *RenameIn, oldNamestring, newNamestring) (codeStatus)Link(cancel <-chan struct{}, input *LinkIn, filenamestring, out *EntryOut) (codeStatus)Symlink(cancel <-chan struct{}, header *InHeader, pointedTostring, linkNamestring, out *EntryOut) (codeStatus)Readlink(cancel <-chan struct{}, header *InHeader) (out []byte, codeStatus)Access(cancel <-chan struct{}, input *AccessIn) (codeStatus)// GetXAttr reads an extended attribute, and should return the// number of bytes. If the buffer is too small, return ERANGE,// with the required buffer size.GetXAttr(cancel <-chan struct{}, header *InHeader, attrstring, dest []byte) (szuint32, codeStatus)// ListXAttr lists extended attributes as '\0' delimited byte// slice, and return the number of bytes. If the buffer is too// small, return ERANGE, with the required buffer size.ListXAttr(cancel <-chan struct{}, header *InHeader, dest []byte) (uint32,Status)// SetAttr writes an extended attribute.SetXAttr(cancel <-chan struct{}, input *SetXAttrIn, attrstring, data []byte)Status// RemoveXAttr removes an extended attribute.RemoveXAttr(cancel <-chan struct{}, header *InHeader, attrstring) (codeStatus)// File handling.Create(cancel <-chan struct{}, input *CreateIn, namestring, out *CreateOut) (codeStatus)Open(cancel <-chan struct{}, input *OpenIn, out *OpenOut) (statusStatus)Read(cancel <-chan struct{}, input *ReadIn, buf []byte) (ReadResult,Status)Lseek(cancel <-chan struct{}, in *LseekIn, out *LseekOut)Status// File lockingGetLk(cancel <-chan struct{}, input *LkIn, out *LkOut) (codeStatus)SetLk(cancel <-chan struct{}, input *LkIn) (codeStatus)SetLkw(cancel <-chan struct{}, input *LkIn) (codeStatus)Release(cancel <-chan struct{}, input *ReleaseIn)Write(cancel <-chan struct{}, input *WriteIn, data []byte) (writtenuint32, codeStatus)CopyFileRange(cancel <-chan struct{}, input *CopyFileRangeIn) (writtenuint32, codeStatus)Flush(cancel <-chan struct{}, input *FlushIn)StatusFsync(cancel <-chan struct{}, input *FsyncIn) (codeStatus)Fallocate(cancel <-chan struct{}, input *FallocateIn) (codeStatus)// Directory handlingOpenDir(cancel <-chan struct{}, input *OpenIn, out *OpenOut) (statusStatus)ReadDir(cancel <-chan struct{}, input *ReadIn, out *DirEntryList)StatusReadDirPlus(cancel <-chan struct{}, input *ReadIn, out *DirEntryList)StatusReleaseDir(input *ReleaseIn)FsyncDir(cancel <-chan struct{}, input *FsyncIn) (codeStatus)StatFs(cancel <-chan struct{}, input *InHeader, out *StatfsOut) (codeStatus)// This is called on processing the first request. The// filesystem implementation can use the server argument to// talk back to the kernel (through notify methods).Init(*Server)}RawFileSystem is an interface close to the FUSE wire protocol.
Unless you really know what you are doing, you should not implementthis, but rather the nodefs.Node or pathfs.FileSystem interfaces; thedetails of getting interactions with open files, renames, and threadingright etc. are somewhat tricky and not very interesting.
Each FUSE request results in a corresponding method called by Server.Several calls may be made simultaneously, because the server typically callseach method in separate goroutine.
A null implementation is provided by NewDefaultRawFileSystem.
After a successful FUSE API call returns, you may not read input orwrite output data: for performance reasons, memory is reused forfollowing requests, and reading/writing the request data will leadto race conditions. If you spawn a background routine from a FUSEAPI call, any incoming request data it wants to reference should becopied over.
If a FUSE API call is canceled (which is signaled by closing the`cancel` channel), the API call should return EINTR. In this case,the outstanding request data is not reused, so the API call mayreturn EINTR without ensuring that child contexts have successfullycompleted.
funcNewDefaultRawFileSystem¶
func NewDefaultRawFileSystem()RawFileSystem
NewDefaultRawFileSystem returns ENOSYS (not implemented) for alloperations.
typeReadResult¶
type ReadResult interface {// Returns the raw bytes for the read, possibly using the// passed buffer. The buffer should be larger than the return// value from Size.Bytes(buf []byte) ([]byte,Status)// Size returns how many bytes this return value takes at most.Size()int// Done() is called after sending the data to the kernel.Done()}The result of Read is an array of bytes, but for performancereasons, we can also return data as a file-descriptor/offset/sizetuple. If the backing store for a file is another filesystem, thisreduces the amount of copying between the kernel and the FUSEserver. The ReadResult interface captures both cases.
funcReadResultData¶
func ReadResultData(b []byte)ReadResult
funcReadResultFd¶
func ReadResultFd(fduintptr, offint64, szint)ReadResult
typeServer¶
type Server struct {// contains filtered or unexported fields}Server contains the logic for reading from the FUSE device andtranslating it to RawFileSystem interface calls.
funcNewServer¶
func NewServer(fsRawFileSystem, mountPointstring, opts *MountOptions) (*Server,error)
NewServer creates a server and attaches it to the given directory.
func (*Server)DeleteNotify¶
DeleteNotify notifies the kernel that an entry is removed from adirectory. In many cases, this is equivalent to EntryNotify,except when the directory is in use, eg. as working directory ofsome process. You should not hold any FUSE filesystem locks, as thatcan lead to deadlock.
func (*Server)EntryNotify¶
EntryNotify should be used if the existence status of an entrywithin a directory changes. You should not hold any FUSE filesystemlocks, as that can lead to deadlock.
func (*Server)InodeNotify¶
InodeNotify invalidates the information associated with the inode(ie. data cache, attributes, etc.)
func (*Server)InodeNotifyStoreCache¶
InodeNotifyStoreCache tells kernel to store data into inode's cache.
This call is similar to InodeNotify, but instead of only invalidating a dataregion, it gives updated data directly to the kernel.
func (*Server)InodeRetrieveCache¶
InodeRetrieveCache retrieves data from kernel's inode cache.
InodeRetrieveCache asks kernel to return data from its cache for inode at[offset:offset+len(dest)) and waits for corresponding reply. If kernel cachehas fewer consecutive data starting at offset, that fewer amount is returned.In particular if inode data at offset is not cached (0, OK) is returned.
The kernel returns ENOENT if it does not currently have entry for this inodein its dentry cache.
func (*Server)KernelSettings¶
KernelSettings returns the Init message from the kernel, sofilesystems can adapt to availability of features of the kerneldriver. The message should not be altered.
func (*Server)RecordLatencies¶
func (ms *Server) RecordLatencies(lLatencyMap)
RecordLatencies switches on collection of timing for each requestcoming from the kernel.P assing a nil argument switches off the
func (*Server)Serve¶
func (ms *Server) Serve()
Serve initiates the FUSE loop. Normally, callers should run Serve()and wait for it to exit, but tests will want to run this in agoroutine.
Each filesystem operation executes in a separate goroutine.
func (*Server)Unmount¶
Unmount calls fusermount -u on the mount. This has the effect ofshutting down the filesystem. After the Server is unmounted, itshould be discarded.
typeSetAttrIn¶
type SetAttrIn struct {SetAttrInCommon}typeSetAttrInCommon¶
type SetAttrInCommon struct {InHeaderValiduint32Paddinguint32Fhuint64Sizeuint64LockOwneruint64Atimeuint64Mtimeuint64Ctimeuint64Atimensecuint32Mtimensecuint32Ctimensecuint32Modeuint32Unused4uint32OwnerUnused5uint32}func (*SetAttrInCommon)GetFh¶
func (s *SetAttrInCommon) GetFh() (uint64,bool)
GetFh returns the file handle if available, or 0 if undefined.
func (*SetAttrInCommon)GetGID¶
func (s *SetAttrInCommon) GetGID() (uint32,bool)
func (*SetAttrInCommon)GetMode¶
func (s *SetAttrInCommon) GetMode() (uint32,bool)
func (*SetAttrInCommon)GetSize¶
func (s *SetAttrInCommon) GetSize() (uint64,bool)
func (*SetAttrInCommon)GetUID¶
func (s *SetAttrInCommon) GetUID() (uint32,bool)
typeSetXAttrIn¶
typeStatfsOut¶
type StatfsOut struct {Blocksuint64Bfreeuint64Bavailuint64Filesuint64Ffreeuint64Bsizeuint32NameLenuint32Frsizeuint32Paddinguint32Spare [6]uint32}func (*StatfsOut)FromStatfsT¶
typeStatus¶
type Statusint32
Status is the errno number that a FUSE call returns to the kernel.
Source Files¶
Directories¶
| Path | Synopsis |
|---|---|
This package is deprecated. | This package is deprecated. |
This package is deprecated. | This package is deprecated. |
Package test holds the tests for Go-FUSE and is not for end-user consumption. | Package test holds the tests for Go-FUSE and is not for end-user consumption. |