summaryrefslogtreecommitdiff
path: root/src/disk/allocation.rs
diff options
context:
space:
mode:
authorChuyan Zhang <me@zcy.moe>2023-11-29 03:29:34 -0800
committerChuyan Zhang <me@zcy.moe>2023-11-29 03:29:34 -0800
commit7af0771f9a3031acc36a6990d07bdb92a61c0c75 (patch)
tree3db3c79b8d385bc949c8486d97def8dadd4323e6 /src/disk/allocation.rs
parentceb83a7214000ccd048857b40cc0ebfc54290731 (diff)
downloadmyfs-7af0771f9a3031acc36a6990d07bdb92a61c0c75.tar.gz
myfs-7af0771f9a3031acc36a6990d07bdb92a61c0c75.zip
symlink, probably not working
Diffstat (limited to 'src/disk/allocation.rs')
-rw-r--r--src/disk/allocation.rs14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/disk/allocation.rs b/src/disk/allocation.rs
index a4bb3f7..d4ad397 100644
--- a/src/disk/allocation.rs
+++ b/src/disk/allocation.rs
@@ -5,6 +5,7 @@ use crate::disk::inode::{Inode, DIRECT_NUMBER};
use crate::memory::cached_block::{convert, CachedBlock};
use crate::{AyaFS, INODE_PER_BLOCK};
use libc::c_int;
+use log::debug;
impl AyaFS {
/// 为 Inode 分配新 block, 返回 block 的编号和它在 inode 内的编号
@@ -403,12 +404,16 @@ impl AyaFS {
inode: &Inode,
mut block_index_within_inode: usize,
) -> Option<usize> {
+ debug!("get_block_index(block_index_within_inode: {})", block_index_within_inode);
// direct block
if block_index_within_inode < DIRECT_NUMBER {
let block_index = inode.direct[block_index_within_inode] as usize;
+ debug!(" get_block_index -> direct");
return if self.data_bitmap.query(block_index) {
+ debug!(" get_block_index -> direct -> ✓");
Some(block_index)
} else {
+ debug!(" get_block_index -> direct -> ×");
None
};
} else {
@@ -416,18 +421,22 @@ impl AyaFS {
}
// indirect block
- let indirect_number = INODE_PER_BLOCK;
+ let indirect_number = 1024;
if block_index_within_inode < indirect_number {
return if let Some(indirect_block) =
self.get_block::<IndirectBlock>(inode.single_indirect as usize)
{
+ debug!(" get_block_index -> indirect");
let block_index = indirect_block.block.entries[block_index_within_inode] as usize;
if self.data_bitmap.query(block_index) {
+ debug!(" get_block_index -> indirect -> direct -> ✓");
Some(block_index)
} else {
+ debug!(" get_block_index -> indirect -> direct -> ×");
None
}
} else {
+ debug!(" get_block_index -> indirect -> ×");
None
};
} else {
@@ -435,7 +444,7 @@ impl AyaFS {
}
// double indirect block
- let double_indirect_number = INODE_PER_BLOCK * INODE_PER_BLOCK;
+ let double_indirect_number = 1024 * 1024;
if block_index_within_inode < double_indirect_number {
if let Some(double_indirect_block) =
self.get_block::<DoubleIndirectBlock>(inode.double_indirect as usize)
@@ -516,6 +525,7 @@ impl AyaFS {
) -> Option<&mut CachedBlock<T>> {
self.get_block_index(inode, block_index_within_inode)
.map(|block_index| {
+ debug!("access_block_mut(index: {}) found", block_index_within_inode);
self.get_block_mut::<T>(block_index).unwrap() // 可以 unwrap 吧这里 ??
})
}