Skip to main content

OverlayFs

Struct OverlayFs 

Source
pub struct OverlayFs { /* private fields */ }

Implementations§

Source§

impl OverlayFs

Source

pub fn new( upper: Option<Arc<dyn Layer>>, lowers: Vec<Arc<dyn Layer>>, params: Config, root_inode: u64, ) -> Result<Self>

Source

pub fn root_inode(&self) -> Inode

Source

pub async fn push_layer(&mut self, layer: Arc<dyn Layer>) -> Result<()>

Add a file layer and stack and merge the previous file layers.

Source

pub async fn import(&self) -> Result<()>

Source

pub async fn extend_inode_alloc(&self, key: u64)

Trait Implementations§

Source§

impl Filesystem for OverlayFs

Source§

async fn init(&self, _req: Request) -> Result<ReplyInit>

initialize filesystem. Called before any other filesystem method.

Source§

async fn destroy(&self, _req: Request)

clean up filesystem. Called on filesystem exit which is fuseblk, in normal fuse filesystem, kernel may call forget for root. There is some discuss for this https://github.com/bazil/fuse/issues/82#issuecomment-88126886, https://sourceforge.net/p/fuse/mailman/message/31995737/

Source§

async fn lookup( &self, req: Request, parent: Inode, name: &OsStr, ) -> Result<ReplyEntry>

look up a directory entry by name and get its attributes.

Source§

async fn forget(&self, _req: Request, inode: Inode, nlookup: u64)

forget 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. When filesystem is normal(not fuseblk) and unmounting, kernel may send forget request for root and this library will stop session after call forget. There is some discussion for this https://github.com/bazil/fuse/issues/82#issuecomment-88126886, https://sourceforge.net/p/fuse/mailman/message/31995737/

Source§

async fn getattr( &self, req: Request, inode: Inode, fh: Option<u64>, flags: u32, ) -> Result<ReplyAttr>

get file attributes. If fh is None, means fh is not set.

Source§

async fn setattr( &self, req: Request, inode: Inode, fh: Option<u64>, set_attr: SetAttr, ) -> Result<ReplyAttr>

set file attributes. If fh is None, means fh is not set.

read symbolic link.

create a symbolic link.

Source§

async fn mknod( &self, req: Request, parent: Inode, name: &OsStr, mode: u32, rdev: u32, ) -> Result<ReplyEntry>

create file node. Create a regular file, character device, block device, fifo or socket node. When creating file, most cases user only need to implement create.

Source§

async fn mkdir( &self, req: Request, parent: Inode, name: &OsStr, mode: u32, umask: u32, ) -> Result<ReplyEntry>

create a directory.

remove a file.

Source§

async fn rmdir(&self, req: Request, parent: Inode, name: &OsStr) -> Result<()>

remove a directory.

Source§

async fn rename( &self, req: Request, parent: Inode, name: &OsStr, new_parent: Inode, new_name: &OsStr, ) -> Result<()>

rename a file or directory.

create a hard link.

Source§

async fn open( &self, req: Request, inode: Inode, flags: u32, ) -> Result<ReplyOpen>

open a file. Open flags (with the exception of O_CREAT, O_EXCL and 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). 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. A filesystem need not implement this method if it sets [MountOptions::no_open_support][crate::MountOptions::no_open_support] and if the kernel supports FUSE_NO_OPEN_SUPPORT.

§Notes:

See fuse_file_info structure in fuse_common.h for more details.

Source§

async fn read( &self, req: Request, inode: Inode, fh: u64, offset: u64, size: u32, ) -> Result<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§

async fn write( &self, req: Request, inode: Inode, fh: u64, offset: u64, data: &[u8], write_flags: u32, flags: u32, ) -> Result<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. When write_flags contains FUSE_WRITE_CACHE, means the write operation is a delay write.

Source§

async fn copy_file_range( &self, req: Request, inode_in: Inode, fh_in: u64, offset_in: u64, inode_out: Inode, fh_out: u64, offset_out: u64, length: u64, flags: u64, ) -> Result<ReplyCopyFileRange>

Copy a range of data from one file to another. This can improve performance because it reduces data copying: normally, data will be copied from FUSE server to kernel, then to user-space, then to kernel, and finally sent back to FUSE server. By implementing this method, data will only be copied internally within the FUSE server.

Source§

async fn statfs(&self, req: Request, inode: Inode) -> Result<ReplyStatFs>

get filesystem statistics.

Source§

async fn release( &self, req: Request, _inode: Inode, fh: u64, flags: u32, lock_owner: u64, flush: bool, ) -> Result<()>

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. flush means flush the data or not when closing file.

Source§

async fn fsync( &self, req: Request, inode: Inode, fh: u64, datasync: bool, ) -> Result<()>

synchronize file contents. If the datasync is true, then only the user data should be flushed, not the metadata.

Source§

async fn setxattr( &self, req: Request, inode: Inode, name: &OsStr, value: &[u8], flags: u32, position: u32, ) -> Result<()>

set an extended attribute.

Source§

async fn getxattr( &self, req: Request, inode: Inode, name: &OsStr, size: u32, ) -> Result<ReplyXAttr>

Get an extended attribute. If size is too small, return Err<ERANGE>. Otherwise, use ReplyXAttr::Data to send the attribute data, or return an error.

Source§

async fn listxattr( &self, req: Request, inode: Inode, size: u32, ) -> Result<ReplyXAttr>

List extended attribute names.

If size is too small, return Err<ERANGE>. Otherwise, use ReplyXAttr::Data to send the attribute list, or return an error.

Source§

async fn removexattr( &self, req: Request, inode: Inode, name: &OsStr, ) -> Result<()>

remove an extended attribute.

Source§

async fn flush( &self, req: Request, inode: Inode, fh: u64, lock_owner: u64, ) -> Result<()>

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.

§Notes:

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§

async fn opendir( &self, req: Request, inode: Inode, flags: u32, ) -> Result<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. A file system need not implement this method if it sets [MountOptions::no_open_dir_support][crate::MountOptions::no_open_dir_support] and if the kernel supports FUSE_NO_OPENDIR_SUPPORT.

Source§

async fn readdir<'a>( &'a self, req: Request, parent: Inode, fh: u64, offset: i64, ) -> Result<ReplyDirectory<impl Stream<Item = Result<DirectoryEntry>> + Send + 'a>>

read directory. offset is used to track the offset of the directory entries. fh will contain the value set by the opendir method, or will be undefined if the opendir method didn’t set any value.

Source§

async fn readdirplus<'a>( &'a self, req: Request, parent: Inode, fh: u64, offset: u64, _lock_owner: u64, ) -> Result<ReplyDirectoryPlus<impl Stream<Item = Result<DirectoryEntryPlus>> + Send + 'a>>

read directory entries, but with their attribute, like readdir

Source§

async fn releasedir( &self, req: Request, _inode: Inode, fh: u64, flags: u32, ) -> Result<()>

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§

async fn fsyncdir( &self, req: Request, inode: Inode, fh: u64, datasync: bool, ) -> Result<()>

synchronize directory contents. If the datasync is true, then only the directory contents should be flushed, not the metadata. fh will contain the value set by the opendir method, or will be undefined if the opendir method didn’t set any value.

Source§

async fn access(&self, req: Request, inode: Inode, mask: u32) -> Result<()>

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 be called. This method is not called under Linux kernel versions 2.4.x.

Source§

async fn create( &self, req: Request, parent: Inode, name: &OsStr, mode: u32, flags: u32, ) -> Result<ReplyCreated>

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. 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.

§Notes:

See fuse_file_info structure in fuse_common.h for more details.

Source§

async fn batch_forget(&self, _req: Request, inodes: &[(Inode, u64)])

forget more than one inode. This is a batch version forget

Source§

async fn fallocate( &self, req: Request, inode: Inode, fh: u64, offset: u64, length: u64, mode: u32, ) -> Result<()>

allocate space for an open file. This function ensures that required space is allocated for specified file.

§Notes:

more information about fallocate, please see man 2 fallocate

Source§

async fn lseek( &self, req: Request, inode: Inode, fh: u64, offset: u64, whence: u32, ) -> Result<ReplyLSeek>

find next data or hole after the specified offset.

Source§

async fn getlk( &self, req: Request, _inode: Inode, fh: u64, lock_owner: u64, start: u64, end: u64, type: u32, pid: u32, ) -> Result<ReplyLock>

test for a POSIX file lock. Read more
Source§

async fn setlk( &self, req: Request, _inode: Inode, fh: u64, lock_owner: u64, start: u64, end: u64, type: u32, pid: u32, block: bool, ) -> Result<()>

acquire, modify or release a POSIX file lock. Read more
Source§

async fn interrupt(&self, _req: Request, _unique: u64) -> Result<()>

handle interrupt. When a operation is interrupted, an interrupt request will send to fuse server with the unique id of the operation.
Source§

fn bmap( &self, req: Request, inode: u64, blocksize: u32, idx: u64, ) -> impl Future<Output = Result<ReplyBmap, Errno>> + Send

map block index within file to block index within device. Read more
Source§

fn poll( &self, req: Request, inode: u64, fh: u64, kh: Option<u64>, flags: u32, events: u32, notify: &Notify, ) -> impl Future<Output = Result<ReplyPoll, Errno>> + Send

poll for IO readiness events.
Source§

fn notify_reply( &self, req: Request, inode: u64, offset: u64, data: Bytes, ) -> impl Future<Output = Result<(), Errno>> + Send

receive notify reply from kernel.
Source§

fn rename2( &self, req: Request, parent: u64, name: &OsStr, new_parent: u64, new_name: &OsStr, flags: u32, ) -> impl Future<Output = Result<(), Errno>> + Send

rename a file or directory with flags.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> ObjectSafeFilesystem for T
where T: Filesystem + Send + Sync,

Source§

fn init<'life0, 'async_trait>( &'life0 self, req: Request, ) -> Pin<Box<dyn Future<Output = Result<ReplyInit, Errno>> + Send + 'async_trait>>
where 'life0: 'async_trait, T: 'async_trait,

initialize filesystem. Called before any other filesystem method.
Source§

fn destroy<'life0, 'async_trait>( &'life0 self, req: Request, ) -> Pin<Box<dyn Future<Output = ()> + Send + 'async_trait>>
where 'life0: 'async_trait, T: 'async_trait,

clean up filesystem. Called on filesystem exit which is fuseblk, in normal fuse filesystem, kernel may call forget for root. There is some discuss for this https://github.com/bazil/fuse/issues/82#issuecomment-88126886, https://sourceforge.net/p/fuse/mailman/message/31995737/
Source§

fn lookup<'life0, 'life1, 'async_trait>( &'life0 self, req: Request, parent: u64, name: &'life1 OsStr, ) -> Pin<Box<dyn Future<Output = Result<ReplyEntry, Errno>> + Send + 'async_trait>>
where 'life0: 'async_trait, 'life1: 'async_trait, T: 'async_trait,

look up a directory entry by name and get its attributes.
Source§

fn forget<'life0, 'async_trait>( &'life0 self, req: Request, inode: u64, nlookup: u64, ) -> Pin<Box<dyn Future<Output = ()> + Send + 'async_trait>>
where 'life0: 'async_trait, T: 'async_trait,

forget 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. When filesystem is normal(not fuseblk) and unmounting, kernel may send forget request for root and this library will stop session after call forget. There is some discussion for this https://github.com/bazil/fuse/issues/82#issuecomment-88126886, https://sourceforge.net/p/fuse/mailman/message/31995737/
Source§

fn getattr<'life0, 'async_trait>( &'life0 self, req: Request, inode: u64, fh: Option<u64>, flags: u32, ) -> Pin<Box<dyn Future<Output = Result<ReplyAttr, Errno>> + Send + 'async_trait>>
where 'life0: 'async_trait, T: 'async_trait,

get file attributes. If fh is None, means fh is not set.
Source§

fn setattr<'life0, 'async_trait>( &'life0 self, req: Request, inode: u64, fh: Option<u64>, set_attr: SetAttr, ) -> Pin<Box<dyn Future<Output = Result<ReplyAttr, Errno>> + Send + 'async_trait>>
where 'life0: 'async_trait, T: 'async_trait,

set file attributes. If fh is None, means fh is not set.
read symbolic link.
create a symbolic link.
Source§

fn mknod<'life0, 'life1, 'async_trait>( &'life0 self, req: Request, parent: u64, name: &'life1 OsStr, mode: u32, rdev: u32, ) -> Pin<Box<dyn Future<Output = Result<ReplyEntry, Errno>> + Send + 'async_trait>>
where 'life0: 'async_trait, 'life1: 'async_trait, T: 'async_trait,

create file node. Create a regular file, character device, block device, fifo or socket node. When creating file, most cases user only need to implement create.
Source§

fn mkdir<'life0, 'life1, 'async_trait>( &'life0 self, req: Request, parent: u64, name: &'life1 OsStr, mode: u32, umask: u32, ) -> Pin<Box<dyn Future<Output = Result<ReplyEntry, Errno>> + Send + 'async_trait>>
where 'life0: 'async_trait, 'life1: 'async_trait, T: 'async_trait,

create a directory.
remove a file.
Source§

fn rmdir<'life0, 'life1, 'async_trait>( &'life0 self, req: Request, parent: u64, name: &'life1 OsStr, ) -> Pin<Box<dyn Future<Output = Result<(), Errno>> + Send + 'async_trait>>
where 'life0: 'async_trait, 'life1: 'async_trait, T: 'async_trait,

remove a directory.
Source§

fn rename<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, req: Request, parent: u64, name: &'life1 OsStr, new_parent: u64, new_name: &'life2 OsStr, ) -> Pin<Box<dyn Future<Output = Result<(), Errno>> + Send + 'async_trait>>
where 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, T: 'async_trait,

rename a file or directory.
create a hard link.
Source§

fn open<'life0, 'async_trait>( &'life0 self, req: Request, inode: u64, flags: u32, ) -> Pin<Box<dyn Future<Output = Result<ReplyOpen, Errno>> + Send + 'async_trait>>
where 'life0: 'async_trait, T: 'async_trait,

open a file. Open flags (with the exception of O_CREAT, O_EXCL and 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). 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. A filesystem need not implement this method if it sets MountOptions::no_open_support and if the kernel supports FUSE_NO_OPEN_SUPPORT. Read more
Source§

fn read<'life0, 'async_trait>( &'life0 self, req: Request, inode: u64, fh: u64, offset: u64, size: u32, ) -> Pin<Box<dyn Future<Output = Result<ReplyData, Errno>> + Send + 'async_trait>>
where 'life0: 'async_trait, T: 'async_trait,

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 write<'life0, 'life1, 'async_trait>( &'life0 self, req: Request, inode: u64, fh: u64, offset: u64, data: &'life1 [u8], write_flags: u32, flags: u32, ) -> Pin<Box<dyn Future<Output = Result<ReplyWrite, Errno>> + Send + 'async_trait>>
where 'life0: 'async_trait, 'life1: 'async_trait, T: 'async_trait,

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. When write_flags contains FUSE_WRITE_CACHE, means the write operation is a delay write.
Source§

fn statfs<'life0, 'async_trait>( &'life0 self, req: Request, inode: u64, ) -> Pin<Box<dyn Future<Output = Result<ReplyStatFs, Errno>> + Send + 'async_trait>>
where 'life0: 'async_trait, T: 'async_trait,

get filesystem statistics.
Source§

fn release<'life0, 'async_trait>( &'life0 self, req: Request, inode: u64, fh: u64, flags: u32, lock_owner: u64, flush: bool, ) -> Pin<Box<dyn Future<Output = Result<(), Errno>> + Send + 'async_trait>>
where 'life0: 'async_trait, T: 'async_trait,

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. flush means flush the data or not when closing file.
Source§

fn fsync<'life0, 'async_trait>( &'life0 self, req: Request, inode: u64, fh: u64, datasync: bool, ) -> Pin<Box<dyn Future<Output = Result<(), Errno>> + Send + 'async_trait>>
where 'life0: 'async_trait, T: 'async_trait,

synchronize file contents. If the datasync is true, then only the user data should be flushed, not the metadata.
Source§

fn setxattr<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, req: Request, inode: u64, name: &'life1 OsStr, value: &'life2 [u8], flags: u32, position: u32, ) -> Pin<Box<dyn Future<Output = Result<(), Errno>> + Send + 'async_trait>>
where 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, T: 'async_trait,

set an extended attribute.
Source§

fn getxattr<'life0, 'life1, 'async_trait>( &'life0 self, req: Request, inode: u64, name: &'life1 OsStr, size: u32, ) -> Pin<Box<dyn Future<Output = Result<ReplyXAttr, Errno>> + Send + 'async_trait>>
where 'life0: 'async_trait, 'life1: 'async_trait, T: 'async_trait,

Get an extended attribute. If size is too small, return Err<ERANGE>. Otherwise, use ReplyXAttr::Data to send the attribute data, or return an error.
Source§

fn listxattr<'life0, 'async_trait>( &'life0 self, req: Request, inode: u64, size: u32, ) -> Pin<Box<dyn Future<Output = Result<ReplyXAttr, Errno>> + Send + 'async_trait>>
where 'life0: 'async_trait, T: 'async_trait,

List extended attribute names. Read more
Source§

fn removexattr<'life0, 'life1, 'async_trait>( &'life0 self, req: Request, inode: u64, name: &'life1 OsStr, ) -> Pin<Box<dyn Future<Output = Result<(), Errno>> + Send + 'async_trait>>
where 'life0: 'async_trait, 'life1: 'async_trait, T: 'async_trait,

remove an extended attribute.
Source§

fn flush<'life0, 'async_trait>( &'life0 self, req: Request, inode: u64, fh: u64, lock_owner: u64, ) -> Pin<Box<dyn Future<Output = Result<(), Errno>> + Send + 'async_trait>>
where 'life0: 'async_trait, T: 'async_trait,

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. Read more
Source§

fn opendir<'life0, 'async_trait>( &'life0 self, req: Request, inode: u64, flags: u32, ) -> Pin<Box<dyn Future<Output = Result<ReplyOpen, Errno>> + Send + 'async_trait>>
where 'life0: 'async_trait, T: 'async_trait,

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. A file system need not implement this method if it sets MountOptions::no_open_dir_support and if the kernel supports FUSE_NO_OPENDIR_SUPPORT.
Source§

fn readdir<'a, 'async_trait>( &'a self, req: Request, parent: u64, fh: u64, offset: i64, ) -> Pin<Box<dyn Future<Output = Result<ReplyDirectory<Pin<Box<dyn Stream<Item = Result<DirectoryEntry, Errno>> + Send + 'a>>>, Errno>> + Send + 'async_trait>>
where 'a: 'async_trait, T: 'async_trait,

read directory. offset is used to track the offset of the directory entries. 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 releasedir<'life0, 'async_trait>( &'life0 self, req: Request, inode: u64, fh: u64, flags: u32, ) -> Pin<Box<dyn Future<Output = Result<(), Errno>> + Send + 'async_trait>>
where 'life0: 'async_trait, T: 'async_trait,

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<'life0, 'async_trait>( &'life0 self, req: Request, inode: u64, fh: u64, datasync: bool, ) -> Pin<Box<dyn Future<Output = Result<(), Errno>> + Send + 'async_trait>>
where 'life0: 'async_trait, T: 'async_trait,

synchronize directory contents. If the datasync is true, then only the directory contents should be flushed, not the metadata. 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 getlk<'life0, 'async_trait>( &'life0 self, req: Request, inode: u64, fh: u64, lock_owner: u64, start: u64, end: u64, type: u32, pid: u32, ) -> Pin<Box<dyn Future<Output = Result<ReplyLock, Errno>> + Send + 'async_trait>>
where 'life0: 'async_trait, T: 'async_trait,

test for a POSIX file lock. Read more
Source§

fn setlk<'life0, 'async_trait>( &'life0 self, req: Request, inode: u64, fh: u64, lock_owner: u64, start: u64, end: u64, type: u32, pid: u32, block: bool, ) -> Pin<Box<dyn Future<Output = Result<(), Errno>> + Send + 'async_trait>>
where 'life0: 'async_trait, T: 'async_trait,

acquire, modify or release a POSIX file lock. Read more
Source§

fn access<'life0, 'async_trait>( &'life0 self, req: Request, inode: u64, mask: u32, ) -> Pin<Box<dyn Future<Output = Result<(), Errno>> + Send + 'async_trait>>
where 'life0: 'async_trait, T: 'async_trait,

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 be called. This method is not called under Linux kernel versions 2.4.x.
Source§

fn create<'life0, 'life1, 'async_trait>( &'life0 self, req: Request, parent: u64, name: &'life1 OsStr, mode: u32, flags: u32, ) -> Pin<Box<dyn Future<Output = Result<ReplyCreated, Errno>> + Send + 'async_trait>>
where 'life0: 'async_trait, 'life1: 'async_trait, T: 'async_trait,

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. 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. Read more
Source§

fn interrupt<'life0, 'async_trait>( &'life0 self, req: Request, unique: u64, ) -> Pin<Box<dyn Future<Output = Result<(), Errno>> + Send + 'async_trait>>
where 'life0: 'async_trait, T: 'async_trait,

handle interrupt. When a operation is interrupted, an interrupt request will send to fuse server with the unique id of the operation.
Source§

fn bmap<'life0, 'async_trait>( &'life0 self, req: Request, inode: u64, blocksize: u32, idx: u64, ) -> Pin<Box<dyn Future<Output = Result<ReplyBmap, Errno>> + Send + 'async_trait>>
where 'life0: 'async_trait, T: 'async_trait,

map block index within file to block index within device. Read more
Source§

fn poll<'life0, 'life1, 'async_trait>( &'life0 self, req: Request, inode: u64, fh: u64, kh: Option<u64>, flags: u32, events: u32, notify: &'life1 Notify, ) -> Pin<Box<dyn Future<Output = Result<ReplyPoll, Errno>> + Send + 'async_trait>>
where 'life0: 'async_trait, 'life1: 'async_trait, T: 'async_trait,

poll for IO readiness events.
Source§

fn notify_reply<'life0, 'async_trait>( &'life0 self, req: Request, inode: u64, offset: u64, data: Bytes, ) -> Pin<Box<dyn Future<Output = Result<(), Errno>> + Send + 'async_trait>>
where 'life0: 'async_trait, T: 'async_trait,

receive notify reply from kernel.
Source§

fn batch_forget<'life0, 'life1, 'async_trait>( &'life0 self, req: Request, inodes: &'life1 [(u64, u64)], ) -> Pin<Box<dyn Future<Output = ()> + Send + 'async_trait>>
where 'life0: 'async_trait, 'life1: 'async_trait, T: 'async_trait,

forget more than one inode. This is a batch version forget (Inode ,Vlookup)
Source§

fn fallocate<'life0, 'async_trait>( &'life0 self, req: Request, inode: u64, fh: u64, offset: u64, length: u64, mode: u32, ) -> Pin<Box<dyn Future<Output = Result<(), Errno>> + Send + 'async_trait>>
where 'life0: 'async_trait, T: 'async_trait,

allocate space for an open file. This function ensures that required space is allocated for specified file. Read more
Source§

fn readdirplus<'a, 'async_trait>( &'a self, req: Request, parent: u64, fh: u64, offset: u64, lock_owner: u64, ) -> Pin<Box<dyn Future<Output = Result<ReplyDirectoryPlus<Pin<Box<dyn Stream<Item = Result<DirectoryEntryPlus, Errno>> + Send + 'a>>>, Errno>> + Send + 'async_trait>>
where 'a: 'async_trait, T: 'async_trait,

read directory entries, but with their attribute, like readdir Read more
Source§

fn rename2<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, req: Request, parent: u64, name: &'life1 OsStr, new_parent: u64, new_name: &'life2 OsStr, flags: u32, ) -> Pin<Box<dyn Future<Output = Result<(), Errno>> + Send + 'async_trait>>
where 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, T: 'async_trait,

rename a file or directory with flags.
Source§

fn lseek<'life0, 'async_trait>( &'life0 self, req: Request, inode: u64, fh: u64, offset: u64, whence: u32, ) -> Pin<Box<dyn Future<Output = Result<ReplyLSeek, Errno>> + Send + 'async_trait>>
where 'life0: 'async_trait, T: 'async_trait,

find next data or hole after the specified offset.
Source§

fn copy_file_range<'life0, 'async_trait>( &'life0 self, req: Request, inode: u64, fh_in: u64, off_in: u64, inode_out: u64, fh_out: u64, off_out: u64, length: u64, flags: u64, ) -> Pin<Box<dyn Future<Output = Result<ReplyCopyFileRange, Errno>> + Send + 'async_trait>>
where 'life0: 'async_trait, T: 'async_trait,

copy a range of data from one file to another. This can improve performance because it reduce data copy: in normal, data will copy from FUSE server to kernel, then to user-space, then to kernel, finally send back to FUSE server. By implement this method, data will only copy in FUSE server internal.
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more