Struct fuse_backend_rs::passthrough::Config

source ·
pub struct Config {
Show 18 fields pub entry_timeout: Duration, pub attr_timeout: Duration, pub dir_entry_timeout: Option<Duration>, pub dir_attr_timeout: Option<Duration>, pub cache_policy: CachePolicy, pub writeback: bool, pub root_dir: String, pub xattr: bool, pub do_import: bool, pub no_open: bool, pub no_opendir: bool, pub killpriv_v2: bool, pub inode_file_handles: bool, pub no_readdir: bool, pub seal_size: bool, pub enable_mntid: bool, pub dax_file_size: Option<u64>, pub use_host_ino: bool,
}
Expand description

Options that configure the behavior of the passthrough fuse file system.

Fields§

§entry_timeout: Duration

How long the FUSE client should consider directory entries to be valid. If the contents of a directory can only be modified by the FUSE client (i.e., the file system has exclusive access), then this should be a large value.

The default value for this option is 5 seconds.

§attr_timeout: Duration

How long the FUSE client should consider file and directory attributes to be valid. If the attributes of a file or directory can only be modified by the FUSE client (i.e., the file system has exclusive access), then this should be set to a large value.

The default value for this option is 5 seconds.

§dir_entry_timeout: Option<Duration>

Same as entry_timeout, override entry_timeout config, but only take effect on directories when specified. This is useful to set different timeouts for directories and regular files.

§dir_attr_timeout: Option<Duration>

Same as attr_timeout, override attr_timeout config, but only take effect on directories when specified. This is useful to set different timeouts for directories and regular files.

§cache_policy: CachePolicy

The caching policy the file system should use. See the documentation of CachePolicy for more details.

§writeback: bool

Whether the file system should enabled writeback caching. This can improve performance as it allows the FUSE client to cache and coalesce multiple writes before sending them to the file system. However, enabling this option can increase the risk of data corruption if the file contents can change without the knowledge of the FUSE client (i.e., the server does NOT have exclusive access). Additionally, the file system should have read access to all files in the directory it is serving as the FUSE client may send read requests even for files opened with O_WRONLY.

Therefore callers should only enable this option when they can guarantee that: 1) the file system has exclusive access to the directory and 2) the file system has read permissions for all files in that directory.

The default value for this option is false.

§root_dir: String

The path of the root directory.

The default is /.

§xattr: bool

Whether the file system should support Extended Attributes (xattr). Enabling this feature may have a significant impact on performance, especially on write parallelism. This is the result of FUSE attempting to remove the special file privileges after each write request.

The default value for this options is false.

§do_import: bool

To be compatible with Vfs and PseudoFs, PassthroughFs needs to prepare root inode before accepting INIT request.

The default value for this option is true.

§no_open: bool

Control whether no_open is allowed.

The default value for this option is false.

§no_opendir: bool

Control whether no_opendir is allowed.

The default value for this option is false.

§killpriv_v2: bool

Control whether kill_priv_v2 is enabled.

The default value for this option is false.

§inode_file_handles: bool

Whether to use file handles to reference inodes. We need to be able to open file descriptors for arbitrary inodes, and by default that is done by storing an O_PATH FD in InodeData. Not least because there is a maximum number of FDs a process can have open users may find it preferable to store a file handle instead, which we can use to open an FD when necessary. So this switch allows to choose between the alternatives: When set to false, InodeData will store O_PATH FDs. Otherwise, we will attempt to generate and store a file handle instead.

The default is false.

§no_readdir: bool

Control whether readdir/readdirplus requests return zero dirent to client, as if the directory is empty even if it has children.

§seal_size: bool

Control whether to refuse operations which modify the size of the file. For a share memory file mounted from host, seal_size can prohibit guest to increase the size of share memory file to attack the host.

§enable_mntid: bool

Whether count mount ID or not when comparing two inodes. By default we think two inodes are same if their inode number and st_dev are the same. When enable_mntid is set as ‘true’, inode’s mount ID will be taken into account as well. For example, bindmount the same file into virtiofs’ source dir, the two bindmounted files will be identified as two different inodes when this option is true, so the don’t share pagecache.

The default value for this option is false.

§dax_file_size: Option<u64>

What size file supports dax

  • If dax_file_size == None, DAX will disable to all files.
  • If dax_file_size == 0, DAX will enable all files.
  • If dax_file_size == N, DAX will enable only when the file size is greater than or equal to N Bytes.
§use_host_ino: bool

Reduce memory consumption by directly use host inode when possible.

When set to false, a virtual inode number will be allocated for each file managed by the passthroughfs driver. A map is used to maintain the relationship between virtual inode numbers and host file objects. When set to true, the host inode number will be directly used as virtual inode number if it’s less than the threshold (1 << 47), so reduce memory consumed by the map. A virtual inode number will still be allocated and maintained if the host inode number is bigger than the threshold. The default value for this option is false.

Trait Implementations§

source§

impl Clone for Config

source§

fn clone(&self) -> Config

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Config

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Default for Config

source§

fn default() -> Self

Returns the “default value” for a type. Read more
source§

impl PartialEq for Config

source§

fn eq(&self, other: &Config) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl Eq for Config

source§

impl StructuralPartialEq for Config

Auto Trait Implementations§

§

impl Freeze for Config

§

impl RefUnwindSafe for Config

§

impl Send for Config

§

impl Sync for Config

§

impl Unpin for Config

§

impl UnwindSafe for Config

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, 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> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

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

§

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

§

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.