BlockPointsTo

Struct BlockPointsTo 

Source
pub struct BlockPointsTo<M: MetaData> {
    lba: LogicalBlockAddress,
    b: Arc<SpinLock<[u8; 4096]>>,
    _m: PhantomData<M>,
}
Expand description

A wrapper around a metadata block that resides at a specific logical block address (LBA).

BlockPointsTo provides safe, synchronized access to a disk-backed 4096-byte block, and associates the block with a specific metadata type M implementing the MetaData trait. Internally, it uses a SpinLock to protect concurrent access and associate with its metadata type without affecting layout.

This abstraction allows safe and typed access to the underlying bytes as metadata structures, while supporting transactional read/write operations.

§Type Parameters

  • M: The type of metadata this block contains. Must implement MetaData.

Fields§

§lba: LogicalBlockAddress

Logical block address (LBA) where this block resides on disk.

§b: Arc<SpinLock<[u8; 4096]>>

The in-memory contents of the block, protected by a spinlock for concurrency.

§_m: PhantomData<M>

Marker to associate this block with metadata type M.

Implementations§

Source§

impl<M: MetaData> BlockPointsTo<M>

Source

pub fn read(&self) -> BlockPointsToReadGuard<'_, M>

Acquires a read-only guard to the underlying block contents.

§Returns
  • BlockPointsToReadGuard: A read guard providing immutable access to the block’s contents, typed as metadata M.

This method locks the internal spinlock and returns a guard for safe, read-only access to the raw bytes of the metadata block.

Source

pub fn write<'a, 'b, 'c>( &'a self, tx: &'b RunningTransaction<'c>, ) -> BlockPointsToWriteGuard<'a, 'b, 'c, M>

Acquires a write guard to the block, registering it with the given transaction.

§Arguments
  • tx: The currently running transaction used to log changes for durability and crash recovery.
§Returns
  • BlockPointsToWriteGuard: A write guard that allows mutation of the block’s contents and records the modification in the transaction.

This method is intended for use in metadata updates. The block is locked for exclusive access, and the transaction ensures write-ahead logging or journaling semantics for filesystem consistency.

Source

pub fn reload(&self, disk: &Disk) -> Result<(), KernelError>

Reload in-memory structure to synchronize with on-disk structure

Trait Implementations§

Source§

impl<M: Clone + MetaData> Clone for BlockPointsTo<M>

Source§

fn clone(&self) -> BlockPointsTo<M>

Returns a duplicate of the value. Read more
1.0.0§

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

Performs copy-assignment from source. Read more

Auto Trait Implementations§

§

impl<M> Freeze for BlockPointsTo<M>

§

impl<M> !RefUnwindSafe for BlockPointsTo<M>

§

impl<M> Send for BlockPointsTo<M>
where M: Send,

§

impl<M> Sync for BlockPointsTo<M>
where M: Sync,

§

impl<M> Unpin for BlockPointsTo<M>
where M: Unpin,

§

impl<M> !UnwindSafe for BlockPointsTo<M>

Blanket Implementations§

§

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

§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

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

§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
§

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

§

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

Mutably borrows from an owned value. Read more
§

impl<T> CloneToUninit for T
where T: Clone,

§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
§

impl<T> From<T> for T

§

fn from(t: T) -> T

Returns the argument unchanged.

§

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

§

fn into(self) -> U

Calls U::from(self).

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

§

impl<T> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
§

fn to_owned(&self) -> T

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

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

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

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

§

type Error = Infallible

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

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

Performs the conversion.
§

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

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

Performs the conversion.