| 134 | } |
| 135 | |
| 136 | auto RamFs::FreeInode(Inode* inode) -> Expected<void> { |
| 137 | if (inode == nullptr) { |
| 138 | return std::unexpected(Error(ErrorCode::kInvalidArgument)); |
| 139 | } |
| 140 | |
| 141 | RamInode* ram_inode = static_cast<RamInode*>(inode->fs_private); |
| 142 | |
| 143 | // Data lives in static pools; just clear the pointer (no individual reclaim) |
| 144 | if (ram_inode->data != nullptr) { |
| 145 | ram_inode->data = nullptr; |
| 146 | } |
| 147 | |
| 148 | // 重置 inode |
| 149 | ram_inode->inode.type = FileType::kUnknown; |
| 150 | ram_inode->inode.size = 0; |
| 151 | ram_inode->inode.fs_private = nullptr; |
| 152 | ram_inode->inode.ops = nullptr; |
| 153 | |
| 154 | ram_inode->capacity = 0; |
| 155 | ram_inode->child_count = 0; |
| 156 | |
| 157 | // 加入空闲链表 |
| 158 | ram_inode->next_free = free_list_; |
| 159 | free_list_ = ram_inode; |
| 160 | |
| 161 | --used_inodes_; |
| 162 | return {}; |
| 163 | } |
| 164 | |
| 165 | auto RamFs::GetRootInode() const -> Inode* { return root_inode_; } |
| 166 | |