pub struct NetFuse<NFS: NetworkFilesystem> { /* private fields */ }
Expand description
Low-level FUSE implementation that is backed by an implementation of NetworkFilesystem
The NetFuse implementation manages the the inode store, including a mapping between inode number and path. It also provides a data cache, and the abstraction that manages read/write offsets and lengths, as well as lazy persistence.
Trait Implementations§
Source§impl<NFS: NetworkFilesystem> Filesystem for NetFuse<NFS>
impl<NFS: NetworkFilesystem> Filesystem for NetFuse<NFS>
Source§fn init(&mut self, _req: &Request<'_>) -> Result<(), c_int>
fn init(&mut self, _req: &Request<'_>) -> Result<(), c_int>
Initialize filesystem
Called before any other filesystem method.
Source§fn lookup(
&mut self,
_req: &Request<'_>,
parent: u64,
name: &Path,
reply: ReplyEntry,
)
fn lookup( &mut self, _req: &Request<'_>, parent: u64, name: &Path, reply: ReplyEntry, )
Look up a directory entry by name and get its attributes.
Source§fn read(
&mut self,
_req: &Request<'_>,
ino: u64,
_fh: u64,
offset: u64,
size: u32,
reply: ReplyData,
)
fn read( &mut self, _req: &Request<'_>, ino: u64, _fh: u64, offset: u64, size: u32, reply: ReplyData, )
Read data
Read should send exactly the number of bytes requested except on EOF or error,
otherwise the rest of the data will be substituted with zeroes. An exception to
this is when the file has been opened in ‘direct_io’ mode, in which case the
return value of the read system call will reflect the return value of this
operation. fh will contain the value set by the open method, or will be undefined
if the open method didn’t set any value.
Source§fn readdir(
&mut self,
_req: &Request<'_>,
ino: u64,
_fh: u64,
offset: u64,
reply: ReplyDirectory,
)
fn readdir( &mut self, _req: &Request<'_>, ino: u64, _fh: u64, offset: u64, reply: ReplyDirectory, )
Read directory
Send a buffer filled using buffer.fill(), with size not exceeding the
requested size. Send an empty buffer on end of stream. fh will contain the
value set by the opendir method, or will be undefined if the opendir method
didn’t set any value.
Source§fn mknod(
&mut self,
_req: &Request<'_>,
parent: u64,
name: &Path,
_mode: u32,
_rdev: u32,
reply: ReplyEntry,
)
fn mknod( &mut self, _req: &Request<'_>, parent: u64, name: &Path, _mode: u32, _rdev: u32, reply: ReplyEntry, )
Create file node
Create a regular file, character device, block device, fifo or socket node.
Source§fn mkdir(
&mut self,
_req: &Request<'_>,
parent: u64,
name: &Path,
_mode: u32,
reply: ReplyEntry,
)
fn mkdir( &mut self, _req: &Request<'_>, parent: u64, name: &Path, _mode: u32, reply: ReplyEntry, )
Create a directory
Source§fn open(&mut self, _req: &Request<'_>, ino: u64, flags: u32, reply: ReplyOpen)
fn open(&mut self, _req: &Request<'_>, ino: u64, flags: u32, reply: ReplyOpen)
Open a file
Open flags (with the exception of O_CREAT, O_EXCL, O_NOCTTY and O_TRUNC) are
available in flags. Filesystem may store an arbitrary file handle (pointer, index,
etc) in fh, and use this in other all other file operations (read, write, flush,
release, fsync). Filesystem may also implement stateless file I/O and not store
anything in fh. There are also some flags (direct_io, keep_cache) which the
filesystem may set, to change the way the file is opened. See fuse_file_info
structure in <fuse_common.h> for more details.
Source§fn release(
&mut self,
_req: &Request<'_>,
ino: u64,
fh: u64,
flags: u32,
_lock_owner: u64,
flush: bool,
reply: ReplyEmpty,
)
fn release( &mut self, _req: &Request<'_>, ino: u64, fh: u64, flags: u32, _lock_owner: u64, flush: bool, reply: ReplyEmpty, )
Release an open file
Release is called when there are no more references to an open file: all file
descriptors are closed and all memory mappings are unmapped. For every open
call there will be exactly one release call. The filesystem may reply with an
error, but error values are not returned to close() or munmap() which triggered
the release. fh will contain the value set by the open method, or will be undefined
if the open method didn’t set any value. flags will contain the same flags as for
open.
Source§fn fsync(
&mut self,
_req: &Request<'_>,
ino: u64,
fh: u64,
datasync: bool,
reply: ReplyEmpty,
)
fn fsync( &mut self, _req: &Request<'_>, ino: u64, fh: u64, datasync: bool, reply: ReplyEmpty, )
Synchronize file contents
If the datasync parameter is non-zero, then only the user data should be flushed,
not the meta data.
Source§fn write(
&mut self,
_req: &Request<'_>,
ino: u64,
fh: u64,
offset: u64,
data: &[u8],
flags: u32,
reply: ReplyWrite,
)
fn write( &mut self, _req: &Request<'_>, ino: u64, fh: u64, offset: u64, data: &[u8], flags: u32, reply: ReplyWrite, )
Write data
Write should return exactly the number of bytes requested except on error. An
exception to this is when the file has been opened in ‘direct_io’ mode, in
which case the return value of the write system call will reflect the return
value of this operation. fh will contain the value set by the open method, or
will be undefined if the open method didn’t set any value.
Source§fn setattr(
&mut self,
_req: &Request<'_>,
ino: u64,
_mode: Option<u32>,
uid: Option<u32>,
gid: Option<u32>,
size: Option<u64>,
_atime: Option<Timespec>,
_mtime: Option<Timespec>,
_fh: Option<u64>,
_crtime: Option<Timespec>,
_chgtime: Option<Timespec>,
_bkuptime: Option<Timespec>,
flags: Option<u32>,
reply: ReplyAttr,
)
fn setattr( &mut self, _req: &Request<'_>, ino: u64, _mode: Option<u32>, uid: Option<u32>, gid: Option<u32>, size: Option<u64>, _atime: Option<Timespec>, _mtime: Option<Timespec>, _fh: Option<u64>, _crtime: Option<Timespec>, _chgtime: Option<Timespec>, _bkuptime: Option<Timespec>, flags: Option<u32>, reply: ReplyAttr, )
Set file attributes
Source§fn rmdir(
&mut self,
_req: &Request<'_>,
parent: u64,
name: &Path,
reply: ReplyEmpty,
)
fn rmdir( &mut self, _req: &Request<'_>, parent: u64, name: &Path, reply: ReplyEmpty, )
Remove a directory
Source§fn unlink(
&mut self,
_req: &Request<'_>,
parent: u64,
name: &Path,
reply: ReplyEmpty,
)
fn unlink( &mut self, _req: &Request<'_>, parent: u64, name: &Path, reply: ReplyEmpty, )
Remove a file
Source§fn forget(&mut self, _req: &Request<'_>, _ino: u64, _nlookup: u64)
fn forget(&mut self, _req: &Request<'_>, _ino: u64, _nlookup: u64)
Forget about an inode
The nlookup parameter indicates the number of lookups previously performed on
this inode. If the filesystem implements inode lifetimes, it is recommended that
inodes acquire a single reference on each lookup, and lose nlookup references on
each forget. The filesystem may ignore forget calls, if the inodes don’t need to
have a limited lifetime. On unmount it is not guaranteed, that all referenced
inodes will receive a forget message.
Source§fn symlink(
&mut self,
_req: &Request<'_>,
_parent: u64,
_name: &Path,
_link: &Path,
reply: ReplyEntry,
)
fn symlink( &mut self, _req: &Request<'_>, _parent: u64, _name: &Path, _link: &Path, reply: ReplyEntry, )
Create a symbolic link
Source§fn rename(
&mut self,
_req: &Request<'_>,
_parent: u64,
_name: &Path,
_newparent: u64,
_newname: &Path,
reply: ReplyEmpty,
)
fn rename( &mut self, _req: &Request<'_>, _parent: u64, _name: &Path, _newparent: u64, _newname: &Path, reply: ReplyEmpty, )
Rename a file
Source§fn link(
&mut self,
_req: &Request<'_>,
_ino: u64,
_newparent: u64,
_newname: &Path,
reply: ReplyEntry,
)
fn link( &mut self, _req: &Request<'_>, _ino: u64, _newparent: u64, _newname: &Path, reply: ReplyEntry, )
Create a hard link
Source§fn flush(
&mut self,
_req: &Request<'_>,
_ino: u64,
_fh: u64,
_lock_owner: u64,
reply: ReplyEmpty,
)
fn flush( &mut self, _req: &Request<'_>, _ino: u64, _fh: u64, _lock_owner: u64, reply: ReplyEmpty, )
Flush method
This is called on each close() of the opened file. Since file descriptors can
be duplicated (dup, dup2, fork), for one open call there may be many flush
calls. Filesystems shouldn’t assume that flush will always be called after some
writes, or that if will be called at all. fh will contain the value set by the
open method, or will be undefined if the open method didn’t set any value.
NOTE: the name of the method is misleading, since (unlike fsync) the filesystem
is not forced to flush pending writes. One reason to flush data, is if the
filesystem wants to return write errors. If the filesystem supports file locking
operations (setlk, getlk) it should remove all locks belonging to ‘lock_owner’.
Source§fn opendir(
&mut self,
_req: &Request<'_>,
_ino: u64,
_flags: u32,
reply: ReplyOpen,
)
fn opendir( &mut self, _req: &Request<'_>, _ino: u64, _flags: u32, reply: ReplyOpen, )
Open a directory
Filesystem may store an arbitrary file handle (pointer, index, etc) in fh, and
use this in other all other directory stream operations (readdir, releasedir,
fsyncdir). Filesystem may also implement stateless directory I/O and not store
anything in fh, though that makes it impossible to implement standard conforming
directory stream operations in case the contents of the directory can change
between opendir and releasedir.
Source§fn releasedir(
&mut self,
_req: &Request<'_>,
_ino: u64,
_fh: u64,
_flags: u32,
reply: ReplyEmpty,
)
fn releasedir( &mut self, _req: &Request<'_>, _ino: u64, _fh: u64, _flags: u32, reply: ReplyEmpty, )
Release an open directory
For every opendir call there will be exactly one releasedir call. fh will
contain the value set by the opendir method, or will be undefined if the
opendir method didn’t set any value.
Source§fn fsyncdir(
&mut self,
_req: &Request<'_>,
_ino: u64,
_fh: u64,
_datasync: bool,
reply: ReplyEmpty,
)
fn fsyncdir( &mut self, _req: &Request<'_>, _ino: u64, _fh: u64, _datasync: bool, reply: ReplyEmpty, )
Synchronize directory contents
If the datasync parameter is set, then only the directory contents should
be flushed, not the meta data. fh will contain the value set by the opendir
method, or will be undefined if the opendir method didn’t set any value.
Source§fn statfs(&mut self, _req: &Request<'_>, _ino: u64, reply: ReplyStatfs)
fn statfs(&mut self, _req: &Request<'_>, _ino: u64, reply: ReplyStatfs)
Get file system statistics
Source§fn setxattr(
&mut self,
_req: &Request<'_>,
_ino: u64,
_name: &OsStr,
_value: &[u8],
_flags: u32,
_position: u32,
reply: ReplyEmpty,
)
fn setxattr( &mut self, _req: &Request<'_>, _ino: u64, _name: &OsStr, _value: &[u8], _flags: u32, _position: u32, reply: ReplyEmpty, )
Set an extended attribute
Source§fn getxattr(
&mut self,
_req: &Request<'_>,
_ino: u64,
_name: &OsStr,
reply: ReplyData,
)
fn getxattr( &mut self, _req: &Request<'_>, _ino: u64, _name: &OsStr, reply: ReplyData, )
Get an extended attribute
Source§fn listxattr(&mut self, _req: &Request<'_>, _ino: u64, reply: ReplyEmpty)
fn listxattr(&mut self, _req: &Request<'_>, _ino: u64, reply: ReplyEmpty)
List extended attribute names
Source§fn removexattr(
&mut self,
_req: &Request<'_>,
_ino: u64,
_name: &OsStr,
reply: ReplyEmpty,
)
fn removexattr( &mut self, _req: &Request<'_>, _ino: u64, _name: &OsStr, reply: ReplyEmpty, )
Remove an extended attribute
Source§fn access(
&mut self,
_req: &Request<'_>,
_ino: u64,
_mask: u32,
reply: ReplyEmpty,
)
fn access( &mut self, _req: &Request<'_>, _ino: u64, _mask: u32, reply: ReplyEmpty, )
Check file access permissions
This will be called for the access() system call. If the ‘default_permissions’
mount option is given, this method is not called. This method is not called
under Linux kernel versions 2.4.x
Source§fn create(
&mut self,
_req: &Request<'_>,
_parent: u64,
_name: &Path,
_mode: u32,
_flags: u32,
reply: ReplyCreate,
)
fn create( &mut self, _req: &Request<'_>, _parent: u64, _name: &Path, _mode: u32, _flags: u32, reply: ReplyCreate, )
Create and open a file
If the file does not exist, first create it with the specified mode, and then
open it. Open flags (with the exception of O_NOCTTY) are available in flags.
Filesystem may store an arbitrary file handle (pointer, index, etc) in fh,
and use this in other all other file operations (read, write, flush, release,
fsync). There are also some flags (direct_io, keep_cache) which the
filesystem may set, to change the way the file is opened. See fuse_file_info
structure in <fuse_common.h> for more details. If this method is not
implemented or under Linux kernel versions earlier than 2.6.15, the mknod()
and open() methods will be called instead.
Source§fn getlk(
&mut self,
_req: &Request<'_>,
_ino: u64,
_fh: u64,
_lock_owner: u64,
_start: u64,
_end: u64,
_typ: u32,
_pid: u32,
reply: ReplyLock,
)
fn getlk( &mut self, _req: &Request<'_>, _ino: u64, _fh: u64, _lock_owner: u64, _start: u64, _end: u64, _typ: u32, _pid: u32, reply: ReplyLock, )
Test for a POSIX file lock
Source§fn setlk(
&mut self,
_req: &Request<'_>,
_ino: u64,
_fh: u64,
_lock_owner: u64,
_start: u64,
_end: u64,
_typ: u32,
_pid: u32,
_sleep: bool,
reply: ReplyEmpty,
)
fn setlk( &mut self, _req: &Request<'_>, _ino: u64, _fh: u64, _lock_owner: u64, _start: u64, _end: u64, _typ: u32, _pid: u32, _sleep: bool, reply: ReplyEmpty, )
Acquire, modify or release a POSIX file lock
For POSIX threads (NPTL) there’s a 1-1 relation between pid and owner, but
otherwise this is not always the case. For checking lock ownership,
‘fi->owner’ must be used. The l_pid field in ‘struct flock’ should only be
used to fill in this field in getlk(). Note: if the locking methods are not
implemented, the kernel will still allow file locking to work locally.
Hence these are only interesting for network filesystems and similar.
Auto Trait Implementations§
impl<NFS> Freeze for NetFuse<NFS>where
NFS: Freeze,
impl<NFS> RefUnwindSafe for NetFuse<NFS>where
NFS: RefUnwindSafe,
impl<NFS> Send for NetFuse<NFS>where
NFS: Send,
impl<NFS> Sync for NetFuse<NFS>where
NFS: Sync,
impl<NFS> Unpin for NetFuse<NFS>where
NFS: Unpin,
impl<NFS> UnwindSafe for NetFuse<NFS>where
NFS: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more