pub struct TrackedInode(Arc<RwLock<Inode>>, Weak<FastFileSystemInner>);Expand description
A reference-counted, thread-safe wrapper around an in-memory Inode,
enabling synchronized read and transactional write access.
This type provides read access through a shared guard and write access via a transactional context, ensuring consistency between the in-memory and on-disk representations of the inode.
Tuple Fields§
§0: Arc<RwLock<Inode>>§1: Weak<FastFileSystemInner>Implementations§
Source§impl TrackedInode
impl TrackedInode
Sourcepub fn new(inner: Arc<RwLock<Inode>>, ffs: Weak<FastFileSystemInner>) -> Self
pub fn new(inner: Arc<RwLock<Inode>>, ffs: Weak<FastFileSystemInner>) -> Self
Create a new TrackedInode reference.
Sourcepub fn read(&self) -> TrackedInodeReadGuard<'_>
pub fn read(&self) -> TrackedInodeReadGuard<'_>
Acquires a shared read lock on the in-memory inode.
§Returns
A TrackedInodeReadGuard which provides read-only access to the
current state of the inode.
§Use Case
Use this when you need to inspect an inode without modifying it.
Sourcepub fn write_with<R>(
&self,
tx: &RunningTransaction<'_>,
f: impl FnOnce(TrackedInodeWriteGuard<'_, '_, '_, '_>) -> Result<R, KernelError>,
) -> Result<R, KernelError>
pub fn write_with<R>( &self, tx: &RunningTransaction<'_>, f: impl FnOnce(TrackedInodeWriteGuard<'_, '_, '_, '_>) -> Result<R, KernelError>, ) -> Result<R, KernelError>
Acquires an exclusive write lock on both the in-memory inode and the corresponding on-disk inode for transactional modification.
You must submit the changes by calling the submit method.
§Arguments
tx: A reference to the currentRunningTransactionused to track and commit filesystem changes.f: A closure that performs modifications using the providedTrackedInodeWriteGuard, which contains both in-memory and on-disk representations of the inode.
§Returns
Ok(R): If the closurefreturns successfully.Err(KernelError): If an error occurs while resolving the inode layout or during execution off.
§Use Case
Use this when updating inode state (e.g., growing a file, updating metadata) and ensuring consistency between memory and disk through the transaction.
§Example
tracked_inode.write_with(tx, |mut guard| {
guard.mem_layout.size += 1;
guard.disk_layout[guard.index].size = guard.mem_layout.size;
guard.submit();
Ok(())
})?;Trait Implementations§
Source§impl Clone for TrackedInode
impl Clone for TrackedInode
Source§fn clone(&self) -> TrackedInode
fn clone(&self) -> TrackedInode
1.0.0§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl Freeze for TrackedInode
impl !RefUnwindSafe for TrackedInode
impl Send for TrackedInode
impl Sync for TrackedInode
impl Unpin for TrackedInode
impl !UnwindSafe for TrackedInode
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)