Skip to main content

L2TableWriteGuard

Struct L2TableWriteGuard 

Source
pub(super) struct L2TableWriteGuard {
    table: Arc<L2Table>,
    lock: OwnedRwLockWriteGuard<()>,
}
Expand description

Write guard for an L2 table.

Owns a reference to the table, so holding it also keeps the table pinned in the L2 cache.

Fields§

§table: Arc<L2Table>

Referenced L2 table.

§lock: OwnedRwLockWriteGuard<()>

Held write guard on that L2 table.

Implementations§

Source§

impl L2TableWriteGuard

Source

pub fn get_mapping(&self, lookup_cluster: GuestCluster) -> Result<L2Mapping>

Look up a cluster mapping.

Source

pub fn compressed_read_guard( &self, cluster: GuestCluster, ) -> Result<Option<CompressedClusterReadGuard<'_>>>

Get a read guard for the given compressed cluster.

The returned guard borrows this write guard, so the table cannot be modified while it is held.

Return None if cluster is not compressed (checked under the guard).

Source

pub fn map_cluster( &mut self, index: usize, host_cluster: HostCluster, new_allocation: Option<PendingClusters>, ) -> Option<ClustersToFreeEntry>

Enter the given raw data cluster mapping into the L2 table.

If the previous entry pointed to an allocated cluster, return the old allocation so its refcount can be decreased.

If the allocation is reused, None is returned, so this function only returns Some(_) if some cluster is indeed leaked.

If host_cluster has been newly allocated, new_allocation must be its pending clusters guard, which is disarmed once the mapping is in place.

Source

pub fn zero_cluster( &mut self, index: usize, keep_allocation: bool, ) -> Result<Option<ClustersToFreeEntry>>

Make the given index a zero mapping.

If keep_allocation is true, keep the zero cluster pre-allocated if there is a pre-existing single-cluster allocation (i.e. data cluster or pre-allocated zero cluster). Otherwise, the existing mapping is discarded.

If a previous mapping is discarded, return the old allocation so its refcount can be decreased.

Source

pub fn discard_cluster(&mut self, index: usize) -> Option<ClustersToFreeEntry>

Remove the given mapping, leaving it empty.

If a previous mapping is discarded, return the old allocation so its refcount can be decreased.

Trait Implementations§

Source§

impl Debug for L2TableWriteGuard

Source§

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

Formats the value using the given formatter. Read more

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.

§

impl<T> Instrument for T

§

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

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

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

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self>

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