From ec2f349a648e4d87fba12d20e338b1cd6d8ef29a Mon Sep 17 00:00:00 2001 From: Chuyan Zhang Date: Mon, 27 Nov 2023 00:11:55 -0800 Subject: Fix directory stuff --- src/main.rs | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) (limited to 'src/main.rs') diff --git a/src/main.rs b/src/main.rs index 5d460fc..78f338a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -7,12 +7,17 @@ mod utils; use clap::Parser; use fuser::MountOption; +use indexmap::IndexMap; use log::debug; +use lru::LruCache; +use std::collections::HashMap; +use std::ffi::OsString; +use std::num::NonZeroUsize; +use std::sync::atomic::AtomicU64; use std::sync::Arc; use std::time::Duration; -use crate::disk::block::InodeBlock; -use crate::disk::inode::InodeMode; +use crate::disk::block::{DirectoryEntry, InodeBlock}; use crate::memory::cached_block::BlockCache; use block_device::{memory_disk::MemoryDisk, BlockDevice, BLOCK_SIZE}; use disk::bitmap::Bitmap; @@ -61,6 +66,13 @@ struct AyaFS { inode_start_block: usize, data_start_block: usize, + next_file_handle: AtomicU64, + // file descriptor -> (inode index, read, write) + file_handle_map: HashMap, + + // inode index -> (index aware) hashmap that maps dir entry name to inode index + dir_entry_map: LruCache>, + cached_inodes: BlockCache, cached_blocks: BlockCache, } @@ -111,6 +123,12 @@ impl AyaFS { + inode_bitmap_block_number + inode_block_number + 1, + + next_file_handle: AtomicU64::new(3), // 0,1,2 are stdin, stdout and stderr + file_handle_map: HashMap::new(), + + dir_entry_map: LruCache::new(NonZeroUsize::new(1024).unwrap()), + cached_inodes: BlockCache::new(device.clone(), 1024), cached_blocks: BlockCache::new(device.clone(), 8192), }; -- cgit v1.2.3-70-g09d2