pub struct PassthroughFs<S: BitmapSlice + Send + Sync = ()> { /* private fields */ }Expand description
A file system that simply “passes through” all requests it receives to the underlying file system.
To keep the implementation simple it servers the contents of its root directory. Users that wish to serve only a specific directory should set up the environment so that that directory ends up as the root of the file system process. One way to accomplish this is via a combination of mount namespaces and the pivot_root system call.
Implementations§
Source§impl<S: BitmapSlice + Send + Sync> PassthroughFs<S>
impl<S: BitmapSlice + Send + Sync> PassthroughFs<S>
Sourcepub async fn do_getattr_helper(
&self,
inode: Inode,
handle: Option<u64>,
) -> Result<(stat64, Duration)>
pub async fn do_getattr_helper( &self, inode: Inode, handle: Option<u64>, ) -> Result<(stat64, Duration)>
Internal getattr helper that skips ID mapping.
This helper is specifically designed for internal use by overlayfs. It calls
do_getattr_inner with mapping: false to retrieve the raw, unmodified host
attributes of a file. This is essential for the copy_up process to correctly
preserve the original file ownership.
Sourcepub async fn do_create_helper(
&self,
req: Request,
parent: Inode,
name: &OsStr,
mode: u32,
flags: u32,
uid: u32,
gid: u32,
) -> Result<ReplyCreated>
pub async fn do_create_helper( &self, req: Request, parent: Inode, name: &OsStr, mode: u32, flags: u32, uid: u32, gid: u32, ) -> Result<ReplyCreated>
A wrapper for create, used by copy_regfile_up.
This helper is called during a copy-up operation to create a file in the upper layer while preserving the original host UID/GID from the lower layer file.
Sourcepub async fn do_mkdir_helper(
&self,
req: Request,
parent: Inode,
name: &OsStr,
mode: u32,
umask: u32,
uid: u32,
gid: u32,
) -> Result<ReplyEntry>
pub async fn do_mkdir_helper( &self, req: Request, parent: Inode, name: &OsStr, mode: u32, umask: u32, uid: u32, gid: u32, ) -> Result<ReplyEntry>
A wrapper for mkdir, used by [create_upper_dir][crate::overlayfs::OverlayInode::create_upper_dir] function.
This helper is called during a copy-up operation when a parent directory needs to be created in the upper layer, preserving the original host UID/GID.
Sourcepub async fn do_symlink_helper(
&self,
req: Request,
parent: Inode,
name: &OsStr,
link: &OsStr,
uid: u32,
gid: u32,
) -> Result<ReplyEntry>
pub async fn do_symlink_helper( &self, req: Request, parent: Inode, name: &OsStr, link: &OsStr, uid: u32, gid: u32, ) -> Result<ReplyEntry>
A wrapper for symlink, used by copy_symlink_up function.
This helper is called during a copy-up operation to create a symbolic link in the upper layer while preserving the original host UID/GID from the lower layer link.
Source§impl<S: BitmapSlice + Send + Sync> PassthroughFs<S>
impl<S: BitmapSlice + Send + Sync> PassthroughFs<S>
Sourcepub fn new(cfg: Config) -> Result<PassthroughFs<S>>
pub fn new(cfg: Config) -> Result<PassthroughFs<S>>
Create a Passthrough file system instance.
Sourcepub fn keep_fds(&self) -> Vec<RawFd> ⓘ
pub fn keep_fds(&self) -> Vec<RawFd> ⓘ
Get the list of file descriptors which should be reserved across live upgrade.
Sourcepub async fn readlinkat_proc_file(&self, inode: u64) -> Result<PathBuf>
pub async fn readlinkat_proc_file(&self, inode: u64) -> Result<PathBuf>
Get the file pathname corresponding to the Inode This function is used by Nydus blobfs
Trait Implementations§
Source§impl Filesystem for PassthroughFs
impl Filesystem for PassthroughFs
Source§async fn init(&self, _req: Request) -> Result<ReplyInit>
async fn init(&self, _req: Request) -> Result<ReplyInit>
initialize filesystem. Called before any other filesystem method.
Source§async fn destroy(&self, _req: Request)
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>
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)
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>
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>
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.
Source§async fn readlink(&self, _req: Request, inode: Inode) -> Result<ReplyData>
async fn readlink(&self, _req: Request, inode: Inode) -> Result<ReplyData>
read symbolic link.
Source§async fn symlink(
&self,
req: Request,
parent: Inode,
name: &OsStr,
link: &OsStr,
) -> Result<ReplyEntry>
async fn symlink( &self, req: Request, parent: Inode, name: &OsStr, link: &OsStr, ) -> Result<ReplyEntry>
create a symbolic link.
Source§async fn mknod(
&self,
req: Request,
parent: Inode,
name: &OsStr,
mode: u32,
rdev: u32,
) -> Result<ReplyEntry>
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>
async fn mkdir( &self, req: Request, parent: Inode, name: &OsStr, mode: u32, umask: u32, ) -> Result<ReplyEntry>
create a directory.
Source§async fn unlink(&self, _req: Request, parent: Inode, name: &OsStr) -> Result<()>
async fn unlink(&self, _req: Request, parent: Inode, name: &OsStr) -> Result<()>
remove a file.
Source§async fn rmdir(&self, _req: Request, parent: Inode, name: &OsStr) -> Result<()>
async fn rmdir(&self, _req: Request, parent: Inode, name: &OsStr) -> Result<()>
remove a directory.
Source§async fn link(
&self,
_req: Request,
inode: Inode,
new_parent: Inode,
new_name: &OsStr,
) -> Result<ReplyEntry>
async fn link( &self, _req: Request, inode: Inode, new_parent: Inode, new_name: &OsStr, ) -> Result<ReplyEntry>
create a hard link.
Source§async fn open(
&self,
_req: Request,
inode: Inode,
flags: u32,
) -> Result<ReplyOpen>
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 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>
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>
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 statfs(&self, _req: Request, inode: Inode) -> Result<ReplyStatFs>
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<()>
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<()>
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<()>
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>
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>
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<()>
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<()>
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][Filesystem::setlk],
[getlk][Filesystem::getlk]) it should remove all locks belonging to lock_owner.
Source§async fn opendir(
&self,
_req: Request,
inode: Inode,
flags: u32,
) -> Result<ReplyOpen>
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 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>>
async fn readdir<'a>( &'a self, _req: Request, parent: Inode, fh: u64, offset: i64, ) -> Result<ReplyDirectory<impl Stream<Item = Result<DirectoryEntry>> + Send + 'a>>
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>>
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>>
Source§async fn releasedir(
&self,
_req: Request,
inode: Inode,
fh: u64,
_flags: u32,
) -> Result<()>
async fn releasedir( &self, _req: Request, inode: Inode, fh: u64, _flags: u32, ) -> Result<()>
Source§async fn fsyncdir(
&self,
req: Request,
inode: Inode,
fh: u64,
datasync: bool,
) -> Result<()>
async fn fsyncdir( &self, req: Request, inode: Inode, fh: u64, datasync: bool, ) -> Result<()>
Source§async fn access(&self, req: Request, inode: Inode, mask: u32) -> Result<()>
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>
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 interrupt(&self, _req: Request, _unique: u64) -> Result<()>
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§async fn batch_forget(&self, _req: Request, inodes: &[(Inode, u64)])
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<()>
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 rename(
&self,
_req: Request,
parent: Inode,
name: &OsStr,
new_parent: Inode,
new_name: &OsStr,
) -> Result<()>
async fn rename( &self, _req: Request, parent: Inode, name: &OsStr, new_parent: Inode, new_name: &OsStr, ) -> Result<()>
rename a file or directory.
Source§async fn rename2(
&self,
_req: Request,
parent: Inode,
name: &OsStr,
new_parent: Inode,
new_name: &OsStr,
flags: u32,
) -> Result<()>
async fn rename2( &self, _req: Request, parent: Inode, name: &OsStr, new_parent: Inode, new_name: &OsStr, flags: u32, ) -> Result<()>
rename a file or directory with flags.
Source§async fn lseek(
&self,
_req: Request,
inode: Inode,
fh: u64,
offset: u64,
whence: u32,
) -> Result<ReplyLSeek>
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 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>
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 using the copy_file_range system call. This can improve performance by reducing data copying between userspace and kernel.
Source§fn bmap(
&self,
req: Request,
inode: u64,
blocksize: u32,
idx: u64,
) -> impl Future<Output = Result<ReplyBmap, Errno>> + Send
fn bmap( &self, req: Request, inode: u64, blocksize: u32, idx: u64, ) -> impl Future<Output = Result<ReplyBmap, Errno>> + Send
Source§impl Layer for PassthroughFs
impl Layer for PassthroughFs
Source§fn root_inode(&self) -> Inode
fn root_inode(&self) -> Inode
Source§fn create_with_context<'life0, 'life1, 'async_trait>(
&'life0 self,
ctx: OperationContext,
parent: Inode,
name: &'life1 OsStr,
mode: u32,
flags: u32,
) -> Pin<Box<dyn Future<Output = Result<ReplyCreated>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn create_with_context<'life0, 'life1, 'async_trait>(
&'life0 self,
ctx: OperationContext,
parent: Inode,
name: &'life1 OsStr,
mode: u32,
flags: u32,
) -> Pin<Box<dyn Future<Output = Result<ReplyCreated>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn mkdir_with_context<'life0, 'life1, 'async_trait>(
&'life0 self,
ctx: OperationContext,
parent: Inode,
name: &'life1 OsStr,
mode: u32,
umask: u32,
) -> Pin<Box<dyn Future<Output = Result<ReplyEntry>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn mkdir_with_context<'life0, 'life1, 'async_trait>(
&'life0 self,
ctx: OperationContext,
parent: Inode,
name: &'life1 OsStr,
mode: u32,
umask: u32,
) -> Pin<Box<dyn Future<Output = Result<ReplyEntry>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn symlink_with_context<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
ctx: OperationContext,
parent: Inode,
name: &'life1 OsStr,
link: &'life2 OsStr,
) -> Pin<Box<dyn Future<Output = Result<ReplyEntry>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn symlink_with_context<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
ctx: OperationContext,
parent: Inode,
name: &'life1 OsStr,
link: &'life2 OsStr,
) -> Pin<Box<dyn Future<Output = Result<ReplyEntry>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Source§fn do_getattr_helper<'life0, 'async_trait>(
&'life0 self,
inode: Inode,
handle: Option<u64>,
) -> Pin<Box<dyn Future<Output = Result<(stat64, Duration)>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn do_getattr_helper<'life0, 'async_trait>(
&'life0 self,
inode: Inode,
handle: Option<u64>,
) -> Pin<Box<dyn Future<Output = Result<(stat64, Duration)>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn create_whiteout<'life0, 'life1, 'async_trait>(
&'life0 self,
ctx: Request,
parent: Inode,
name: &'life1 OsStr,
) -> Pin<Box<dyn Future<Output = Result<ReplyEntry>> + Send + 'async_trait>>where
Self: Sync + 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn create_whiteout<'life0, 'life1, 'async_trait>(
&'life0 self,
ctx: Request,
parent: Inode,
name: &'life1 OsStr,
) -> Pin<Box<dyn Future<Output = Result<ReplyEntry>> + Send + 'async_trait>>where
Self: Sync + 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn delete_whiteout<'life0, 'life1, 'async_trait>(
&'life0 self,
ctx: Request,
parent: Inode,
name: &'life1 OsStr,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: Sync + 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn delete_whiteout<'life0, 'life1, 'async_trait>(
&'life0 self,
ctx: Request,
parent: Inode,
name: &'life1 OsStr,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: Sync + 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn is_whiteout<'life0, 'async_trait>(
&'life0 self,
ctx: Request,
inode: Inode,
) -> Pin<Box<dyn Future<Output = Result<bool>> + Send + 'async_trait>>where
Self: Sync + 'async_trait,
'life0: 'async_trait,
fn is_whiteout<'life0, 'async_trait>(
&'life0 self,
ctx: Request,
inode: Inode,
) -> Pin<Box<dyn Future<Output = Result<bool>> + Send + 'async_trait>>where
Self: Sync + 'async_trait,
'life0: 'async_trait,
Auto Trait Implementations§
impl<S = ()> !Freeze for PassthroughFs<S>
impl<S = ()> !RefUnwindSafe for PassthroughFs<S>
impl<S> Send for PassthroughFs<S>
impl<S> Sync for PassthroughFs<S>
impl<S> Unpin for PassthroughFs<S>where
S: Unpin,
impl<S = ()> !UnwindSafe for PassthroughFs<S>
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
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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 moreSource§impl<T> ObjectSafeFilesystem for T
impl<T> ObjectSafeFilesystem for T
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,
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,
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,
fn destroy<'life0, 'async_trait>(
&'life0 self,
req: Request,
) -> Pin<Box<dyn Future<Output = ()> + Send + 'async_trait>>where
'life0: 'async_trait,
T: 'async_trait,
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,
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,
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,
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,
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,
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,
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,
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,
fh is None, means fh is not set.Source§fn readlink<'life0, 'async_trait>(
&'life0 self,
req: Request,
inode: u64,
) -> Pin<Box<dyn Future<Output = Result<ReplyData, Errno>> + Send + 'async_trait>>where
'life0: 'async_trait,
T: 'async_trait,
fn readlink<'life0, 'async_trait>(
&'life0 self,
req: Request,
inode: u64,
) -> Pin<Box<dyn Future<Output = Result<ReplyData, Errno>> + Send + 'async_trait>>where
'life0: 'async_trait,
T: 'async_trait,
Source§fn symlink<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
req: Request,
parent: u64,
name: &'life1 OsStr,
link: &'life2 OsStr,
) -> Pin<Box<dyn Future<Output = Result<ReplyEntry, Errno>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
T: 'async_trait,
fn symlink<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
req: Request,
parent: u64,
name: &'life1 OsStr,
link: &'life2 OsStr,
) -> Pin<Box<dyn Future<Output = Result<ReplyEntry, Errno>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
T: 'async_trait,
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,
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.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,
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,
Source§fn unlink<'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,
fn unlink<'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,
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,
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,
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,
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,
Source§fn link<'life0, 'life1, 'async_trait>(
&'life0 self,
req: Request,
inode: u64,
new_parent: u64,
new_name: &'life1 OsStr,
) -> Pin<Box<dyn Future<Output = Result<ReplyEntry, Errno>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
T: 'async_trait,
fn link<'life0, 'life1, 'async_trait>(
&'life0 self,
req: Request,
inode: u64,
new_parent: u64,
new_name: &'life1 OsStr,
) -> Pin<Box<dyn Future<Output = Result<ReplyEntry, Errno>> + Send + 'async_trait>>where
'life0: 'async_trait,
'life1: 'async_trait,
T: 'async_trait,
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,
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,
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 moreSource§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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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 moreSource§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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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,
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 moreSource§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,
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,
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,
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,
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,
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,
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,
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,
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,
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
(Inode ,Vlookup)