disk_backend

Trait DiskIo

Source
pub trait DiskIo:
    'static
    + Send
    + Sync
    + Inspect {
Show 16 methods // Required methods fn disk_type(&self) -> &str; fn sector_count(&self) -> u64; fn sector_size(&self) -> u32; fn disk_id(&self) -> Option<[u8; 16]>; fn physical_sector_size(&self) -> u32; fn is_fua_respected(&self) -> bool; fn is_read_only(&self) -> bool; fn unmap( &self, sector: u64, count: u64, block_level_only: bool, ) -> impl Future<Output = Result<(), DiskError>> + Send; fn unmap_behavior(&self) -> UnmapBehavior; fn read_vectored( &self, buffers: &RequestBuffers<'_>, sector: u64, ) -> impl Future<Output = Result<(), DiskError>> + Send; fn write_vectored( &self, buffers: &RequestBuffers<'_>, sector: u64, fua: bool, ) -> impl Future<Output = Result<(), DiskError>> + Send; fn sync_cache(&self) -> impl Future<Output = Result<(), DiskError>> + Send; // Provided methods fn optimal_unmap_sectors(&self) -> u32 { ... } fn pr(&self) -> Option<&dyn PersistentReservation> { ... } fn eject(&self) -> impl Future<Output = Result<(), DiskError>> + Send { ... } fn wait_resize(&self, sector_count: u64) -> impl Future<Output = u64> + Send { ... }
}
Expand description

Disk metadata and IO operations.

Required Methods§

Source

fn disk_type(&self) -> &str

Returns the disk type name as a string.

This is used for diagnostic purposes.

Source

fn sector_count(&self) -> u64

Returns the current sector count.

For some backing stores, this may change at runtime. If it does, then the backing store must also implement DiskIo::wait_resize.

Source

fn sector_size(&self) -> u32

Returns the logical sector size of the backing store.

This must not change at runtime.

Source

fn disk_id(&self) -> Option<[u8; 16]>

Optionally returns a 16-byte identifier for the disk, if there is a natural one for this backing store.

This may be exposed to the guest as a unique disk identifier. This must not change at runtime.

Source

fn physical_sector_size(&self) -> u32

Returns the physical sector size of the backing store.

This must not change at runtime.

Source

fn is_fua_respected(&self) -> bool

Returns true if the fua parameter to DiskIo::write_vectored is respected by the backing store by ensuring that the IO is immediately committed to disk.

Source

fn is_read_only(&self) -> bool

Returns true if the disk is read only.

Source

fn unmap( &self, sector: u64, count: u64, block_level_only: bool, ) -> impl Future<Output = Result<(), DiskError>> + Send

Unmap sectors from the layer.

Source

fn unmap_behavior(&self) -> UnmapBehavior

Returns the behavior of the unmap operation.

Source

fn read_vectored( &self, buffers: &RequestBuffers<'_>, sector: u64, ) -> impl Future<Output = Result<(), DiskError>> + Send

Issues an asynchronous read-scatter operation to the disk.

§Arguments
  • buffers - An object representing the data buffers into which the disk data will be transferred.
  • sector - The logical sector at which the read operation starts.
Source

fn write_vectored( &self, buffers: &RequestBuffers<'_>, sector: u64, fua: bool, ) -> impl Future<Output = Result<(), DiskError>> + Send

Issues an asynchronous write-gather operation to the disk.

§Arguments
  • buffers - An object representing the data buffers containing the data to transfer to the disk.
  • sector - The logical sector at which the write operation starts.
  • fua - A flag indicates if FUA (force unit access) is requested.
Source

fn sync_cache(&self) -> impl Future<Output = Result<(), DiskError>> + Send

Issues an asynchronous flush operation to the disk.

Provided Methods§

Source

fn optimal_unmap_sectors(&self) -> u32

Returns the optimal granularity for unmaps, in sectors.

Source

fn pr(&self) -> Option<&dyn PersistentReservation>

Optionally returns a trait object to issue persistent reservation requests.

Source

fn eject(&self) -> impl Future<Output = Result<(), DiskError>> + Send

Issues an asynchronous eject media operation to the disk.

Source

fn wait_resize(&self, sector_count: u64) -> impl Future<Output = u64> + Send

Waits for the disk sector size to be different than the specified value.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§