fuse

Trait Fuse

Source
pub trait Fuse {
Show 43 methods // Provided methods fn lookup( &self, _request: &Request, _name: &LxStr, ) -> Result<fuse_entry_out> { ... } fn forget(&self, _node_id: u64, _lookup_count: u64) { ... } fn get_attr( &self, _request: &Request, _flags: u32, _fh: u64, ) -> Result<fuse_attr_out> { ... } fn set_attr( &self, _request: &Request, _arg: &fuse_setattr_in, ) -> Result<fuse_attr_out> { ... } fn read_link(&self, _request: &Request) -> Result<LxString> { ... } fn symlink( &self, _request: &Request, _name: &LxStr, _target: &LxStr, ) -> Result<fuse_entry_out> { ... } fn mknod( &self, _request: &Request, _name: &LxStr, _arg: &fuse_mknod_in, ) -> Result<fuse_entry_out> { ... } fn mkdir( &self, _request: &Request, _name: &LxStr, _arg: &fuse_mkdir_in, ) -> Result<fuse_entry_out> { ... } fn unlink(&self, _request: &Request, _name: &LxStr) -> Result<()> { ... } fn rmdir(&self, _request: &Request, _name: &LxStr) -> Result<()> { ... } fn rename( &self, _request: &Request, _name: &LxStr, _new_dir: u64, _new_name: &LxStr, _flags: u32, ) -> Result<()> { ... } fn link( &self, _request: &Request, _name: &LxStr, _target: u64, ) -> Result<fuse_entry_out> { ... } fn open(&self, _request: &Request, _flags: u32) -> Result<fuse_open_out> { ... } fn read(&self, _request: &Request, _arg: &fuse_read_in) -> Result<Vec<u8>> { ... } fn write( &self, _request: &Request, _arg: &fuse_write_in, _data: &[u8], ) -> Result<usize> { ... } fn statfs(&self, _request: &Request) -> Result<fuse_kstatfs> { ... } fn release(&self, _request: &Request, _arg: &fuse_release_in) -> Result<()> { ... } fn fsync(&self, _request: &Request, _fh: u64, _flags: u32) -> Result<()> { ... } fn set_xattr( &self, _request: &Request, _name: &LxStr, _value: &[u8], _flags: u32, ) -> Result<()> { ... } fn get_xattr( &self, _request: &Request, _name: &LxStr, _size: u32, ) -> Result<Vec<u8>> { ... } fn get_xattr_size(&self, _request: &Request, _name: &LxStr) -> Result<u32> { ... } fn list_xattr(&self, _request: &Request, _size: u32) -> Result<Vec<u8>> { ... } fn list_xattr_size(&self, _request: &Request) -> Result<u32> { ... } fn remove_xattr(&self, _request: &Request, _name: &LxStr) -> Result<()> { ... } fn flush(&self, _request: &Request, _arg: &fuse_flush_in) -> Result<()> { ... } fn init(&self, _info: &mut SessionInfo) { ... } fn open_dir(&self, _request: &Request, _flags: u32) -> Result<fuse_open_out> { ... } fn read_dir( &self, _request: &Request, _arg: &fuse_read_in, ) -> Result<Vec<u8>> { ... } fn release_dir( &self, _request: &Request, _arg: &fuse_release_in, ) -> Result<()> { ... } fn fsync_dir(&self, _request: &Request, _fh: u64, _flags: u32) -> Result<()> { ... } fn get_lock( &self, _request: &Request, _arg: &fuse_lk_in, ) -> Result<fuse_file_lock> { ... } fn set_lock( &self, _request: &Request, _arg: &fuse_lk_in, _sleep: bool, ) -> Result<()> { ... } fn access(&self, _request: &Request, _mask: u32) -> Result<()> { ... } fn create( &self, _request: &Request, _name: &LxStr, _arg: &fuse_create_in, ) -> Result<CreateOut> { ... } fn block_map( &self, _request: &Request, _block: u64, _block_size: u32, ) -> Result<u64> { ... } fn destroy(&self) { ... } fn ioctl( &self, _request: &Request, _arg: &fuse_ioctl_in, _data: &[u8], ) -> Result<(i32, Vec<u8>)> { ... } fn fallocate( &self, _request: &Request, _arg: &fuse_fallocate_in, ) -> Result<()> { ... } fn read_dir_plus( &self, _request: &Request, _arg: &fuse_read_in, ) -> Result<Vec<u8>> { ... } fn lseek( &self, _request: &Request, _fh: u64, _offset: u64, _whence: u32, ) -> Result<u64> { ... } fn copy_file_range( &self, _request: &Request, _arg: &fuse_copy_file_range_in, ) -> Result<usize> { ... } fn setup_mapping( &self, request: &Request, mapper: &dyn Mapper, arg: &fuse_setupmapping_in, ) -> Result<()> { ... } fn remove_mapping( &self, request: &Request, mapper: &dyn Mapper, moffset: u64, len: u64, ) -> Result<()> { ... }
}
Expand description

Trait that FUSE file systems must implement.

Most operations are loosely based on fuse_lowlevel_ops in libfuse, so check the official libfuse documentation for more information on how these operations should behave.

For many operations, a reply of ENOSYS is taken as permanent failure, preventing the client from ever issuing that operation again.

Provided Methods§

Source

fn lookup(&self, _request: &Request, _name: &LxStr) -> Result<fuse_entry_out>

Looks up a child of an inode.

This increases the lookup count of the found entry by one.

Source

fn forget(&self, _node_id: u64, _lookup_count: u64)

Tells the FUSE file system to reduce the lookup count of an inode by the specified amount.

§Note

The client is not guaranteed to send a forget message for every inode if the file system is unmounted.

Source

fn get_attr( &self, _request: &Request, _flags: u32, _fh: u64, ) -> Result<fuse_attr_out>

Retrieves the attributes of a file.

§Note

If attributes are retrieved through an open file descriptor (i.e. using fstat), the fh parameter will be set to the file handle returned by the open call.

Source

fn set_attr( &self, _request: &Request, _arg: &fuse_setattr_in, ) -> Result<fuse_attr_out>

Changes the attributes of a file.

Reads the target of a symbolic link.

Creates a symbolic link as a child of the specified inode.

Source

fn mknod( &self, _request: &Request, _name: &LxStr, _arg: &fuse_mknod_in, ) -> Result<fuse_entry_out>

Creates a regular file, fifo, socket, or character or block device node as a child of the specified inode.

Source

fn mkdir( &self, _request: &Request, _name: &LxStr, _arg: &fuse_mkdir_in, ) -> Result<fuse_entry_out>

Creates a directory as a child of the specified inode.

Removes a non-directory child from the specified inode.

Source

fn rmdir(&self, _request: &Request, _name: &LxStr) -> Result<()>

Removes a directory child from the specified inode.

Source

fn rename( &self, _request: &Request, _name: &LxStr, _new_dir: u64, _new_name: &LxStr, _flags: u32, ) -> Result<()>

Renames a file.

The file’s original parent is the request’s inode, while the new parent is indicated using new_dir.

Creates a hard-link to an existing inode, as a child of the specified inode..

Source

fn open(&self, _request: &Request, _flags: u32) -> Result<fuse_open_out>

Opens a file.

If not implemented, this call will succeed, which can be used if the file system doesn’t need any state for open files, since the inode number is also provided to functions such as read and write.

Source

fn read(&self, _request: &Request, _arg: &fuse_read_in) -> Result<Vec<u8>>

Reads data from an open file.

Source

fn write( &self, _request: &Request, _arg: &fuse_write_in, _data: &[u8], ) -> Result<usize>

Writes data to an open file.

Source

fn statfs(&self, _request: &Request) -> Result<fuse_kstatfs>

Retrieves the attributes of the file system.

Source

fn release(&self, _request: &Request, _arg: &fuse_release_in) -> Result<()>

Closes an open file.

If not implemented, this call will succeed. Won’t be called if open returned ENOSYS (the default).

Source

fn fsync(&self, _request: &Request, _fh: u64, _flags: u32) -> Result<()>

Synchronize file contents.

Source

fn set_xattr( &self, _request: &Request, _name: &LxStr, _value: &[u8], _flags: u32, ) -> Result<()>

Add or change an extended attribute on an inode.

Source

fn get_xattr( &self, _request: &Request, _name: &LxStr, _size: u32, ) -> Result<Vec<u8>>

Retrieve an extended attribute on an inode.

Source

fn get_xattr_size(&self, _request: &Request, _name: &LxStr) -> Result<u32>

Retrieve the size of an extended attribute on an inode.

Source

fn list_xattr(&self, _request: &Request, _size: u32) -> Result<Vec<u8>>

List all extended attributes on an inode.

Source

fn list_xattr_size(&self, _request: &Request) -> Result<u32>

Retrieve the size of the list of extended attributes on an inode.

Source

fn remove_xattr(&self, _request: &Request, _name: &LxStr) -> Result<()>

Remove an extended attribute from an inode.

Source

fn flush(&self, _request: &Request, _arg: &fuse_flush_in) -> Result<()>

Called on each close() of a file descriptor for an opened file.

This is called for every file descriptor, so may be called more than once.

Use release to know when the last file descriptor was closed.

Source

fn init(&self, _info: &mut SessionInfo)

Negotiate file system parameters with the client.

Source

fn open_dir(&self, _request: &Request, _flags: u32) -> Result<fuse_open_out>

Opens a directory.

If not implemented, this call will succeed, which can be used if the file system doesn’t need any state for open files, since the inode number is also provided to functions such as read_dir.

Source

fn read_dir(&self, _request: &Request, _arg: &fuse_read_in) -> Result<Vec<u8>>

Reads the contents of a directory.

Use DirEntryWriter to create a buffer containing directory entries.

Source

fn release_dir(&self, _request: &Request, _arg: &fuse_release_in) -> Result<()>

Closes a directory.

If not implemented, this call will succeed. Won’t be called if opendir returned ENOSYS (the default).

Source

fn fsync_dir(&self, _request: &Request, _fh: u64, _flags: u32) -> Result<()>

Synchronize directory contents.

Source

fn get_lock( &self, _request: &Request, _arg: &fuse_lk_in, ) -> Result<fuse_file_lock>

Test for a POSIX file lock.

Source

fn set_lock( &self, _request: &Request, _arg: &fuse_lk_in, _sleep: bool, ) -> Result<()>

Acquire, modify or release a POSIX file lock.

If not implemented, the client still allows for local file locking.

Source

fn access(&self, _request: &Request, _mask: u32) -> Result<()>

Check file access permissions.

Source

fn create( &self, _request: &Request, _name: &LxStr, _arg: &fuse_create_in, ) -> Result<CreateOut>

Create and open a file.

If not implemented, the client will use mknod followed by open.

Source

fn block_map( &self, _request: &Request, _block: u64, _block_size: u32, ) -> Result<u64>

Map a file block index to a device block index.

This method is only relevant for file systems mounted using fuseblk.

Source

fn destroy(&self)

Clean up the file system.

For regular FUSE, the client only calls this for file systems mounted using fuseblk, but for other file systems Connection will call it when the /dev/fuse connection is closed.

For virtio-fs, the client will call this when the file system is unmounted. After receiving destroy, another init call can be received if the file system is mounted again.

Source

fn ioctl( &self, _request: &Request, _arg: &fuse_ioctl_in, _data: &[u8], ) -> Result<(i32, Vec<u8>)>

Submit an ioctl.

§Note

This is a somewhat limited subset of the ioctl functionality of libfuse; the additional functionality seems to only apply to CUSE, however.

Source

fn fallocate(&self, _request: &Request, _arg: &fuse_fallocate_in) -> Result<()>

Allocate requested space.

Source

fn read_dir_plus( &self, _request: &Request, _arg: &fuse_read_in, ) -> Result<Vec<u8>>

Reads the contents of a directory, and performs a lookup on each entry.

This function increases the lookup count of each entry in the directory by one.

If you implement this, you must set FUSE_DO_READDIRPLUS in init. If you implement both read_dir_plus and read_dir, also set FUSE_READDIRPLUS_AUTO.

Source

fn lseek( &self, _request: &Request, _fh: u64, _offset: u64, _whence: u32, ) -> Result<u64>

Find data holes in a sparse file.

Source

fn copy_file_range( &self, _request: &Request, _arg: &fuse_copy_file_range_in, ) -> Result<usize>

Copy data from one file to another without needing to send data through the FUSE kernel module.

Source

fn setup_mapping( &self, request: &Request, mapper: &dyn Mapper, arg: &fuse_setupmapping_in, ) -> Result<()>

Create a DAX memory mapping.

Source

fn remove_mapping( &self, request: &Request, mapper: &dyn Mapper, moffset: u64, len: u64, ) -> Result<()>

Remove a DAX memory mapping.

Implementors§