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 implementMetaData.
Fields§
§lba: LogicalBlockAddressLogical 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>
impl<M: MetaData> BlockPointsTo<M>
Sourcepub fn read(&self) -> BlockPointsToReadGuard<'_, M>
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 metadataM.
This method locks the internal spinlock and returns a guard for safe, read-only access to the raw bytes of the metadata block.
Sourcepub fn write<'a, 'b, 'c>(
&'a self,
tx: &'b RunningTransaction<'c>,
) -> BlockPointsToWriteGuard<'a, 'b, 'c, M>
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.
Sourcepub fn reload(&self, disk: &Disk) -> Result<(), KernelError>
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>
impl<M: Clone + MetaData> Clone for BlockPointsTo<M>
Source§fn clone(&self) -> BlockPointsTo<M>
fn clone(&self) -> BlockPointsTo<M>
1.0.0§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto 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 Twhere
T: 'static + ?Sized,
impl<T> Any for Twhere
T: 'static + ?Sized,
§impl<T> Borrow<T> for Twhere
T: ?Sized,
impl<T> Borrow<T> for Twhere
T: ?Sized,
§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§unsafe fn clone_to_uninit(&self, dest: *mut u8)
unsafe fn clone_to_uninit(&self, dest: *mut u8)
clone_to_uninit)