summaryrefslogtreecommitdiff
path: root/ayafs-core/src/disk/block.rs
diff options
context:
space:
mode:
authorChuyan Zhang <me@zcy.moe>2023-12-01 19:42:13 -0800
committerChuyan Zhang <me@zcy.moe>2023-12-01 19:42:13 -0800
commit4c34414b26bf71e747ea3ecb2586645bab4aba52 (patch)
treeb569935a94c7fb3e0a23a19207f6545b4d7719c3 /ayafs-core/src/disk/block.rs
parentfd125947c9db0b33761414e65e919f73d9bf1815 (diff)
downloadmyfs-4c34414b26bf71e747ea3ecb2586645bab4aba52.tar.gz
myfs-4c34414b26bf71e747ea3ecb2586645bab4aba52.zip
Multiple bugfix, it works!
Diffstat (limited to 'ayafs-core/src/disk/block.rs')
-rw-r--r--ayafs-core/src/disk/block.rs44
1 files changed, 24 insertions, 20 deletions
diff --git a/ayafs-core/src/disk/block.rs b/ayafs-core/src/disk/block.rs
index 76769b9..e48385d 100644
--- a/ayafs-core/src/disk/block.rs
+++ b/ayafs-core/src/disk/block.rs
@@ -10,7 +10,10 @@ pub struct SuperBlock {
pub(crate) inode_bitmap_block_number: u64,
pub(crate) inode_block_number: u64,
pub(crate) data_block_number: u64,
- padding: [u8; 4064],
+ pub(crate) total_block_number: u64,
+ pub(crate) used_inode_number: u64,
+ pub(crate) used_block_number: u64,
+ padding: [u8; 4040],
}
impl SuperBlock {
@@ -19,13 +22,19 @@ impl SuperBlock {
inode_bitmap_block_number: usize,
inode_block_number: usize,
data_block_number: usize,
+ total_block_number: usize,
+ used_inode_number: u64,
+ used_block_number: u64,
) -> Self {
Self {
data_bitmap_block_number: data_bitmap_block_number as u64,
inode_bitmap_block_number: inode_bitmap_block_number as u64,
inode_block_number: inode_block_number as u64,
data_block_number: data_block_number as u64,
- padding: [0; 4064],
+ total_block_number: total_block_number as u64,
+ used_inode_number,
+ used_block_number,
+ padding: [0; 4040],
}
}
}
@@ -155,11 +164,6 @@ impl Default for DirectoryBlock {
}
impl DirectoryBlock {
- #[allow(unused)]
- pub(crate) fn is_full(&self) -> bool {
- self.occupancy[0] == 0xFF && self.occupancy[1] == 0xFF
- }
-
pub(crate) fn query(&self, mut index: usize) -> bool {
if index < 7 {
// 0-6, first u8
@@ -196,20 +200,12 @@ impl DirectoryBlock {
}
}
- // pub(crate) fn allocate(&mut self) -> Option<usize> {
- // if self.occupancy[0] != 0xFF {
- // let leading_ones = self.occupancy[0].leading_ones();
- // self.occupancy[0] |= (1 << (7 - leading_ones)) as u8;
- // Some(leading_ones as usize)
- // } else if self.occupancy[1] != 0xFF {
- // let leading_ones = self.occupancy[1].leading_ones();
- // self.occupancy[1] |= (1 << (7 - leading_ones)) as u8;
- // Some(7 + leading_ones as usize)
- // } else {
- // None
- // }
- // }
+ pub(crate) fn reset(&mut self) {
+ self.occupancy[0] = 0x80;
+ self.occupancy[1] = 0x00;
+ }
+ #[allow(unused)]
pub(crate) fn deallocate(&mut self, mut index: usize) {
if index < 7 {
index = index + 1;
@@ -269,3 +265,11 @@ impl Default for TripleIndirectBlock {
}
impl Block for TripleIndirectBlock {}
+
+const_assert_eq!(std::mem::size_of::<SuperBlock>(), 4096);
+const_assert_eq!(std::mem::size_of::<DataBlock>(), 4096);
+const_assert_eq!(std::mem::size_of::<InodeBlock>(), 4096);
+const_assert_eq!(std::mem::size_of::<DirectoryBlock>(), 4096);
+const_assert_eq!(std::mem::size_of::<IndirectBlock>(), 4096);
+const_assert_eq!(std::mem::size_of::<DoubleIndirectBlock>(), 4096);
+const_assert_eq!(std::mem::size_of::<TripleIndirectBlock>(), 4096); \ No newline at end of file