Documentation
¶
Index ¶
- Constants
- type AccessIn
- type Attr
- type BMapIn
- type BMapOut
- type BatchForgetIn
- type Callbacks
- type CreateIn
- type CreateOut
- type DirEnt
- type DirEntPlus
- type EntryOut
- type FAllocateIn
- type FSyncDirIn
- type FSyncIn
- type FileLock
- type FlushIn
- type ForgetIn
- type ForgetOne
- type GetAttrIn
- type GetAttrOut
- type GetLKIn
- type GetLKOut
- type GetXAttrIn
- type GetXAttrOut
- type InHeader
- type InitIn
- type InitInFrom736On
- type InitInMin
- type InitInUpThru735
- type InitOut
- type InitOut717
- type InitOut718Thru720
- type InitOut721Thru722
- type InitOut723Thru727
- type InitOut728Thru731a
- type InitOut731bThru735
- type InitOut736Thru739
- type InitOut740Thru742
- type InitOut743AndBeyond
- type InterruptIn
- type IoCtlIn
- type IoCtlOut
- type IoctlIovec
- type KStatFS
- type LSeekIn
- type LSeekOut
- type LinkIn
- type LinkOut
- type ListXAttrIn
- type ListXAttrOut
- type LookupIn
- type LookupOut
- type MkDirIn
- type MkDirOut
- type MkNodIn
- type MkNodOut
- type OpenDirIn
- type OpenDirOut
- type OpenIn
- type OpenOut
- type OutHeader
- type PollIn
- type PollOut
- type ReadDirIn
- type ReadDirOut
- type ReadDirPlusIn
- type ReadDirPlusOut
- type ReadIn
- type ReadLinkOut
- type ReadOut
- type ReleaseDirIn
- type ReleaseIn
- type RemoveXAttrIn
- type Rename2In
- type RenameIn
- type RmDirIn
- type SXTime
- type SetAttrIn
- type SetAttrOut
- type SetLKIn
- type SetLKWIn
- type SetXAttrIn
- type StatFSOut
- type StatX
- type StatXIn
- type StatXOut
- type SymLinkIn
- type SymLinkOut
- type UnlinkIn
- type Volume
- type VolumeConfig
- type WriteIn
- type WriteOut
Constants ¶
const ( StatXMaskType = uint32(0x00000001) StatXMaskMode = uint32(0x00000002) StatXMaskNLink = uint32(0x00000004) StatXMaskUID = uint32(0x00000008) StatXMaskGID = uint32(0x00000010) StatXMaskATime = uint32(0x00000020) StatXMaskMTime = uint32(0x00000040) StatXMaskCTime = uint32(0x00000080) StatXMaskIno = uint32(0x00000100) StatXMaskSize = uint32(0x00000200) StatXMaskBlocks = uint32(0x00000400) StatXMaskBasicStats = uint32(0x000007FF) StatXMaskBTime = uint32(0x00000800) )
const ( SetAttrInValidMode = uint32(1) << 0 SetAttrInValidUID = uint32(1) << 1 SetAttrInValidGID = uint32(1) << 2 SetAttrInValidSize = uint32(1) << 3 SetAttrInValidATime = uint32(1) << 4 SetAttrInValidMTime = uint32(1) << 5 SetAttrInValidFH = uint32(1) << 6 SetAttrInValidATimeNow = uint32(1) << 7 SetAttrInValidMTimeNow = uint32(1) << 8 SetAttrInValidLockOwner = uint32(1) << 9 SetAttrInValidCTime = uint32(1) << 10 // not supported SetAttrInValidKillSuidGID = uint32(1) << 11 // not supported )
const ( SetXAttrInCreate = uint32(1) SetXAttrInReplace = uint32(2) )
const ( FOpenRequestRDONLY = uint32(syscall.O_RDONLY) FOpenRequestWRONLY = uint32(syscall.O_WRONLY) FOpenRequestRDWR = uint32(syscall.O_RDWR) FOpenRequestAPPEND = uint32(syscall.O_APPEND) FOpenRequestCREAT = uint32(syscall.O_CREAT) FOpenRequestEXCL = uint32(syscall.O_EXCL) FOpenRequestSYNC = uint32(syscall.O_SYNC) FOpenRequestTRUNC = uint32(syscall.O_TRUNC) )
const ( FOpenResponseDirectIO = uint32(1) << 0 FOpenResponseKeepCache = uint32(1) << 1 FOpenResponseNonSeekable = uint32(1) << 2 FOpenResponseCacheDir = uint32(1) << 3 FOpenResponseStream = uint32(1) << 4 FOpenResponseNoFlush = uint32(1) << 5 FOpenResponseParallelDirectWrites = uint32(1) << 6 FOpenResponsePassThrough = uint32(1) << 7 )
const ( InitFlagsAsyncRead = uint32(1) << 0 InitFlagsPosixLocks = uint32(1) << 1 InitFlagsFileOps = uint32(1) << 2 InitFlagsAtomicOTrunc = uint32(1) << 3 InitFlagsExportSupport = uint32(1) << 4 InitFlagsBigWrites = uint32(1) << 5 InitFlagsDontMask = uint32(1) << 6 InitFlagsSpliceWrite = uint32(1) << 7 InitFlagsSpliceMove = uint32(1) << 8 InitFlagsSpliceRead = uint32(1) << 9 InitFlagsFLockLocks = uint32(1) << 10 InitFlagsHasIoctlDir = uint32(1) << 11 InitFlagsAutoInvalData = uint32(1) << 12 InitFlagsDoReadDirPlus = uint32(1) << 13 InitFlagsReaddirplusAuto = uint32(1) << 14 InitFlagsAsyncDio = uint32(1) << 15 InitFlagsWritebackCache = uint32(1) << 16 InitFlagsNoOpenSupport = uint32(1) << 17 InitFlagsParallelDirops = uint32(1) << 18 InitFlagsHandleKillpriv = uint32(1) << 19 InitFlagsPosixACL = uint32(1) << 20 InitFlagsAbortError = uint32(1) << 21 InitFlagsMaxPages = uint32(1) << 22 InitFlagsCacheSymlinks = uint32(1) << 23 InitFlagsNoOpendirSupport = uint32(1) << 24 InitFlagsExplicitInvalData = uint32(1) << 25 InitFlagsMapAlignment = uint32(1) << 26 InitFlagsSubMounts = uint32(1) << 27 InitFlagsHandleKillprivV2 = uint32(1) << 28 InitFlagsSetXattrExt = uint32(1) << 29 InitFalgsInitExt = uint32(1) << 30 InitFlagsInitReserved = uint32(1) << 31 InitFlags2SecurityCtx = uint32(1) << 0 InitFlags2HasInodeDAX = uint32(1) << 1 InitFlags2CreateSuppGroup = uint32(1) << 2 InitFlags2HasExpireOnly = uint32(1) << 3 InitFlags2DirectIoAllowMmap = uint32(1) << 4 InitFlags2Passthrough = uint32(1) << 5 InitFlags2NoExportSupport = uint32(1) << 6 InitFlags2HasResend = uint32(1) << 7 InitFlags2AllowIdmap = uint32(1) << 8 InitFlags2OverIoUring = uint32(1) << 9 InitFlags2RequestTimeout = uint32(1) << 10 )
const ( ReleaseFlush = uint32(1) << iota ReleaseFLockUnlock )
const ( WriteCache = uint32(1) << iota WriteLockOwner WriteKillPriv )
const ( IoctlCompat = uint32(1) << iota IoctlUnrestricted IoctlRetry Ioctl32Bit IoctlDir IoctlCompatX32 )
const ( NofifyPoll = iota + 1 NotifyInvalInode NotifyInvalEntry NotifyStore NotifyRetrieve NotifyDelete NotifyResent NotifyIncEpoch NotifyCodeMax )
const ( OpCodeLookup = uint32(1) OpCodeForget = uint32(2) // no reply OpCodeGetAttr = uint32(3) OpCodeSetAttr = uint32(4) OpCodeReadLink = uint32(5) OpCodeSymLink = uint32(6) OpCodeMkNod = uint32(8) OpCodeMkDir = uint32(9) OpCodeUnlink = uint32(10) OpCodeRmDir = uint32(11) OpCodeRename = uint32(12) OpCodeLink = uint32(13) OpCodeOpen = uint32(14) OpCodeRead = uint32(15) OpCodeWrite = uint32(16) OpCodeStatFS = uint32(17) OpCodeRelease = uint32(18) OpCodeFSync = uint32(20) OpCodeSetXAttr = uint32(21) OpCodeGetXAttr = uint32(22) OpCodeListXAttr = uint32(23) OpCodeRemoveXAttr = uint32(24) OpCodeFlush = uint32(25) OpCodeInit = uint32(26) OpCodeOpenDir = uint32(27) OpCodeReadDir = uint32(28) OpCodeReleaseDir = uint32(29) OpCodeFSyncDir = uint32(30) OpCodeGetLK = uint32(31) OpCodeSetLK = uint32(32) OpCodeSetLKW = uint32(33) OpCodeAccess = uint32(34) OpCodeCreate = uint32(35) OpCodeInterrupt = uint32(36) // no reply OpCodeBMap = uint32(37) OpCodeDestroy = uint32(38) OpCodeIoCtl = uint32(39) // unsupported OpCodePoll = uint32(40) OpCodeNotifyReply = uint32(41) // unsupported OpCodeBatchForget = uint32(42) // no reply OpCodeFAllocate = uint32(43) OpCodeReadDirPlus = uint32(44) OpCodeRename2 = uint32(45) OpCodeLSeek = uint32(46) OpCodeCopyFileRange = uint32(47) // unsupported OpCodeSetupMapping = uint32(48) // unsupported OpCodeRemoveMapping = uint32(49) // unsupported OpCodeSyncFS = uint32(50) // unsupported OpCodeTmpFile = uint32(51) // unsupported OpCodeStatX = uint32(52) OpCodeCuseInit = uint32(4096) // unsupported )
const AccessInSize = 8
const AttrSize = 88
const BMapInSize = 16
const BMapOutSize = 8
const BatchForgetInFixedPortionSize = 8 // + (Count * ForgetOneSize)
const CreateInFixedPortionSize = 16 // + len(Name)
const CreateOutSize = EntryOutSize + 16
const DirEntAlignment = 8 // applies to both DirEnt and DirEntPlus
const DirEntFixedPortionSize = 24 // + len(Name) and rounded up to DirEntAlignment boundary
const DirEntPlusFixedPortionSize = EntryOutSize + DirEntFixedPortionSize // + len(DirEnt.Name) and rounded up to DirEntAlignment boundary
const EntryOutSize = 40 + AttrSize
const FAllocateInSize = 32
const FSyncDirInSize = 16
const (
FSyncFDataSync = uint32(1) << iota
)
const FSyncInSize = 16
const FileLockSize = 24
const FlushInSize = 24
const ForgetInSize = 8
const ForgetOneSize = 16
const ( // FuseDevIocClone is the ioctl to clone a FUSE device FD. // Derived from _IOR(229, 0, uint32_t) // 229 is the FUSE device "magic" (0xE5) FuseDevIocClone = 0x8004e500 )
const (
GetAttrFH uint32 = uint32(1) << iota
)
const GetAttrInSize = 16
const GetAttrOutSize = 16 + AttrSize
const GetLKInSize = 16 + FileLockSize + 8
const GetLKOutSize = FileLockSize
const GetXAttrInFixedPortionSize = 8 // + len(Name)
const GetXAttrOutSizeOnlySize = 8
const InHeaderSize = 40
const InitInFrom736OnSize = 64
const InitInMinSize = 8
const InitInSize = 64
const InitInUpThru735Size = 16
const InitOut717Size = 24
const InitOut718Thru720Size = 72
const InitOut721Thru722Size = 24
const InitOut723Thru727Size = 64
const InitOut728Thru731aSize = 64
const InitOut731bThru735Size = 64
const InitOut736Thru739Size = 64
const InitOut740Thru742Size = 64
const InitOut743AndBeyondSize = 64
const InitOutSize = 64
const InterruptInSize = 8
const IoCtlInFixedPortionSize = 32 // + len(InBuf) a.k.a. InSize
const IoCtlOutFixedPortionSize = 16 // + (InIovs * IoctlIovecSize) + (OutIovs * IoctlIovecSize)
const IoctlIovecSize = 16
const IoctlMaxIOV = 256
const KStatFSSize = 80
const (
LKFLock uint32 = uint32(1) << iota
)
const LSeekInSize = 24
const LSeekOutSize = 8
const LinkInFixedPortionSize = 8 // + len(Name)
const LinkOutSize = EntryOutSize
const ListXAttrInSize = 8
const ListXAttrOutSizeOnlySize = 8
const LookupOutSize = EntryOutSize
const MkDirInFixedPortionSize = 8 // + len(Name)
const MkDirOutSize = EntryOutSize
const MkNodInFixedPortionSize = 16 // + len(Name)
const MkNodOutSize = EntryOutSize
const OpenDirInSize = 8
const OpenDirOutSize = 16
const OpenInSize = 8
const OpenOutSize = 16
const OutHeaderSize = 16
const PollInSize = 24
const PollOutSize = 8
const (
PollScheduleNotify = uint32(1) << iota
)
const ReadDirInSize = 40
const ReadDirPlusInSize = 40
const ReadInSize = 40
const (
ReadLockOwner = uint32(1) << (iota + 1)
)
const ReleaseDirInSize = 24
const ReleaseInSize = 24
const Rename2InFixedPortionSize = 16 // + len(OldName) + 1 + len(NewName)
const RenameInFixedPortionSize = 8 // + len(OldName) + 1 + len(NewName)
const SXTimeSize = 16
const SetAttrInSize = 88
const SetAttrOutSize = 16 + AttrSize
const SetLKInSize = 16 + FileLockSize + 8
const SetLKWInSize = 16 + FileLockSize + 8
const SetXAttrInFixedPortionSize = 16 // + len(Name) + 1 + len(Data)
const StatFSOutSize = KStatFSSize
const StatXInSize = 24
const StatXOutSize = 16 + (2 * 8) + StatXSize
const StatXSize = 30 + (1 * 2) + 32 + (4 * SXTimeSize) + 16 + (14 * 8)
const SymLinkOutSize = EntryOutSize
const WriteInFixedPortionSize = 40 // + len(Data) a.k.a. Size
const WriteOutSize = 8
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type BatchForgetIn ¶
type Callbacks ¶
type Callbacks interface {
DoLookup(inHeader *InHeader, lookupIn *LookupIn) (lookupOut *LookupOut, errno syscall.Errno)
DoForget(inHeader *InHeader, forgetIn *ForgetIn)
DoGetAttr(inHeader *InHeader, getAttrIn *GetAttrIn) (getAttrOut *GetAttrOut, errno syscall.Errno)
DoSetAttr(inHeader *InHeader, setAttrIn *SetAttrIn) (setAttrOut *SetAttrOut, errno syscall.Errno)
DoReadLink(inHeader *InHeader) (readLinkOut *ReadLinkOut, errno syscall.Errno)
DoSymLink(inHeader *InHeader, symLinkIn *SymLinkIn) (symLinkOut *SymLinkOut, errno syscall.Errno)
DoMkNod(inHeader *InHeader, mkNodIn *MkNodIn) (mkNodOut *MkNodOut, errno syscall.Errno)
DoMkDir(inHeader *InHeader, mkDirIn *MkDirIn) (mkDirOut *MkDirOut, errno syscall.Errno)
DoUnlink(inHeader *InHeader, unlinkIn *UnlinkIn) (errno syscall.Errno)
DoRmDir(inHeader *InHeader, rmDirIn *RmDirIn) (errno syscall.Errno)
DoRename(inHeader *InHeader, renameIn *RenameIn) (errno syscall.Errno)
DoLink(inHeader *InHeader, linkIn *LinkIn) (linkOut *LinkOut, errno syscall.Errno)
DoOpen(inHeader *InHeader, openIn *OpenIn) (openOut *OpenOut, errno syscall.Errno)
DoRead(inHeader *InHeader, readIn *ReadIn) (readOut *ReadOut, errno syscall.Errno)
DoWrite(inHeader *InHeader, writeIn *WriteIn) (writeOut *WriteOut, errno syscall.Errno)
DoStatFS(inHeader *InHeader) (statFSOut *StatFSOut, errno syscall.Errno)
DoRelease(inHeader *InHeader, releaseIn *ReleaseIn) (errno syscall.Errno)
DoFSync(inHeader *InHeader, fSyncIn *FSyncIn) (errno syscall.Errno)
DoSetXAttr(inHeader *InHeader, setXAttrIn *SetXAttrIn) (errno syscall.Errno)
DoGetXAttr(inHeader *InHeader, getXAttrIn *GetXAttrIn) (getXAttrOut *GetXAttrOut, errno syscall.Errno)
DoListXAttr(inHeader *InHeader, listXAttrIn *ListXAttrIn) (listXAttrOut *ListXAttrOut, errno syscall.Errno)
DoRemoveXAttr(inHeader *InHeader, removeXAttrIn *RemoveXAttrIn) (errno syscall.Errno)
DoFlush(inHeader *InHeader, flushIn *FlushIn) (errno syscall.Errno)
DoInit(inHeader *InHeader, initIn *InitIn) (initOut *InitOut, errno syscall.Errno)
DoOpenDir(inHeader *InHeader, openDirIn *OpenDirIn) (openDirOut *OpenDirOut, errno syscall.Errno)
DoReadDir(inHeader *InHeader, readDirIn *ReadDirIn) (readDirOut *ReadDirOut, errno syscall.Errno)
DoReleaseDir(inHeader *InHeader, releaseDirIn *ReleaseDirIn) (errno syscall.Errno)
DoFSyncDir(inHeader *InHeader, fSyncDirIn *FSyncDirIn) (errno syscall.Errno)
DoGetLK(inHeader *InHeader, getLKIn *GetLKIn) (getLKOut *GetLKOut, errno syscall.Errno)
DoSetLK(inHeader *InHeader, setLKIn *SetLKIn) (errno syscall.Errno)
DoSetLKW(inHeader *InHeader, setLKWIn *SetLKWIn) (errno syscall.Errno)
DoAccess(inHeader *InHeader, accessIn *AccessIn) (errno syscall.Errno)
DoCreate(inHeader *InHeader, createIn *CreateIn) (createOut *CreateOut, errno syscall.Errno)
DoInterrupt(inHeader *InHeader, interruptIn *InterruptIn)
DoBMap(inHeader *InHeader, bMapIn *BMapIn) (bMapOut *BMapOut, errno syscall.Errno)
DoDestroy(inHeader *InHeader) (errno syscall.Errno)
DoPoll(inHeader *InHeader, pollIn *PollIn) (pollOut *PollOut, errno syscall.Errno)
DoBatchForget(inHeader *InHeader, batchForgetIn *BatchForgetIn)
DoFAllocate(inHeader *InHeader, fAllocateIn *FAllocateIn) (errno syscall.Errno)
DoReadDirPlus(inHeader *InHeader, readDirPlusIn *ReadDirPlusIn) (readDirPlusOut *ReadDirPlusOut, errno syscall.Errno)
DoRename2(inHeader *InHeader, rename2In *Rename2In) (errno syscall.Errno)
DoLSeek(inHeader *InHeader, lSeekIn *LSeekIn) (lSeekOut *LSeekOut, errno syscall.Errno)
DoStatX(inHeader *InHeader, statXIn *StatXIn) (statXOut *StatXOut, errno syscall.Errno)
}
Callbacks is the interface declaring the various callbacks that will be issued in response to a Volume instance while it is mounted. Note that some callbacks are expected to return both an error as well as a struct pointer. In the case of an error, the struct pointer should be <nil> as it will not be written to /dev/fuse. Finally, one callback is special: DoInit(). Provisioning a Volume instance involved providing the InitOut.MaxWrite to allow configuring the buffer pool used by the /dev/fuse read loop (including, of course, the reception of the InitIn up-call). The implementation of DoInit, therefore, should not expect returning an InitOut with a different MaxWrite to be honored.
type DirEntPlus ¶
type FAllocateIn ¶
type FSyncDirIn ¶
type GetAttrOut ¶
type GetXAttrIn ¶
type GetXAttrOut ¶
type InitInFrom736On ¶
type InitInUpThru735 ¶
type InitOut ¶
type InitOut struct {
Major uint32
Minor uint32
MaxReadAhead uint32
Flags uint32 // mask of const InitFlags* bits
MaxBackground uint16
CongestionThreshhold uint16
MaxWrite uint32
TimeGran uint32
MaxPages uint16
MapAlignment uint16
Flags2 uint32
MaxStackDepth uint32
RequestTimeout uint16
Unused [11]uint16
}
type InitOut717 ¶
type InitOut718Thru720 ¶
type InitOut721Thru722 ¶
type InitOut723Thru727 ¶
type InitOut728Thru731a ¶
type InitOut731bThru735 ¶
type InitOut736Thru739 ¶
type InitOut740Thru742 ¶
type InitOut743AndBeyond ¶
type InitOut743AndBeyond struct {
Major uint32
Minor uint32
MaxReadAhead uint32
Flags uint32 // mask of const InitFlags* bits
MaxBackground uint16
CongestionThreshhold uint16
MaxWrite uint32
TimeGran uint32
MaxPages uint16
MapAlignment uint16
Flags2 uint32
MaxStackDepth uint32
RequestTimeout uint16
Unused [11]uint16
}
type InterruptIn ¶
type InterruptIn struct {
Unique uint64
}
type IoCtlOut ¶
type IoCtlOut struct {
Result uint32
Flags uint32
InIovs uint32
OutIovs uint32
InIov []IoctlIovec // len(IoIov) == InIovs
OutIov []IoctlIovec // len(OutIov) == OutIovs
}
type IoctlIovec ¶
type ListXAttrIn ¶
type ListXAttrOut ¶
type OpenDirOut ¶
type ReadDirOut ¶
type ReadDirOut struct {
DirEnt []DirEnt // aligned on DirEntAlignment boundaries
}
type ReadDirPlusIn ¶
type ReadDirPlusOut ¶
type ReadDirPlusOut struct {
DirEntPlus []DirEntPlus // aligned on DirEntAlignment boundaries
}
type ReadLinkOut ¶
type ReadLinkOut struct {
Data []byte
}
type ReleaseDirIn ¶
type RemoveXAttrIn ¶
type RemoveXAttrIn struct {
Name []byte
}
type SetAttrOut ¶
type SetXAttrIn ¶
type StatX ¶
type StatX struct {
Mask uint32 // mask of StatXMask* bits
BlkSize uint32
Attributes uint64
NLink uint32
UID uint32
GID uint32
Mode uint16
Spare0 [1]uint16
Ino uint64
Size uint64
Blocks uint64
AttributesMask uint64
ATime SXTime
BTime SXTime
CTime SXTime
MTime SXTime
RDevMajor uint32
RDevMinor uint32
DevMajor uint32
DevMinor uint32
Spare2 [14]uint64
}
type SymLinkOut ¶
type SymLinkOut struct {
EntryOut
}
type Volume ¶
type Volume interface {
// DoMount is invoked on a Volume interface to perform the FUSE mount and
// begin receiving the various callbacks listed in the Callbacks interface.
//
DoMount() (err error)
// DoUnmount is invoked on a Volume interface to perform the FUSE unmount.
// Upon return, no callbacks will be made and the Volume instance may be
// safely discarded.
//
DoUnmount() (err error)
// HighLatencyCallback is called by any of the Callbacks as soon as the
// particular callback knows it is about to enter a high latency operation.
// As a result, a new worker will be launched and the current worker (i.e.
// the worker performing this soon-to-be high latency callback) will be
// marked to terminate once the callback returns thus maintaining the
// desired VolumeConfig.NumWorkers number of low latency workers polling
// /dev/fuse. It is ok to call this multiple times within the same callback
// context if it is inconvenient to remember if it has already been called.
//
HighLatencyCallback(inHeader *InHeader)
}
Volume represents a file system instance. A Volume is provisioned by calling NewVolume(). After recording the returned interface from NewVolume(), a single call to DoMount() kicks off the mounting process and the caller should expect to see the various callbacks listed in the Callbacks interface. This will continue a single call to DoUnmount() is made after which the Volume instance may be safely discarded.
func NewVolume ¶
func NewVolume(volumeConfig *VolumeConfig) (volume Volume)
NewVolume is called to create a Volume instance as described by the supplied VolumeConfig.
type VolumeConfig ¶
type VolumeConfig struct {
VolumeName string //
MountpointDirPath string //
FuseSubtype string // The type of the file system, once mounted, will be "fuse" and, if non-empty, followed by a "." and this .fuseSubtype
MaxRead uint32 //
MaxWrite uint32 //
DefaultPermissions bool //
AllowOther bool // Non-root users may want to specify this as TRUE to enable other non-root users access to the mount point
NumWorkers int // Number of low-latency workers to poll /dev/fuse; If == 0, defaults to runtime.NumCPU()
PerWorkerFD bool // If true, each worker will get a unique cloned /dev/fuse file descriptor
Callbacks Callbacks // Various callbacks listed in the Callbacks interface will be made while the Volume is mounted
Logger *log.Logger //
ErrChan chan error // Enables the Volume to indicate that it is no longer servicing FUSE upcalls (e.g. as a result of an intentional DoUnmount() call or some unexpected error reading from /dev/fuse)
}
VolumeConfig is used to specify details about a Volume to be created via NewVolume.
Directories
¶
| Path | Synopsis |
|---|---|
|
examples
|
|
|
fission-hellofs
command
|
|
|
fission-ramfs
command
|
|
|
fission-s3rofs
command
|
|
|
fission-swiftfs
command
|