[INFO] cloning repository https://github.com/ztygod/mini-fs
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/ztygod/mini-fs" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fztygod%2Fmini-fs", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fztygod%2Fmini-fs'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 4aca77019638a70439d2c6c661a9445d548a3a8f
[INFO] testing ztygod/mini-fs against master#1ef7943ee607160a564655b6596f83670ef95df5 for pr-146098-6
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fztygod%2Fmini-fs" "/workspace/builds/worker-3-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-3-tc1/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/ztygod/mini-fs
[INFO] finished tweaking git repo https://github.com/ztygod/mini-fs
[INFO] tweaked toml for git repo https://github.com/ztygod/mini-fs written to /workspace/builds/worker-3-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/ztygod/mini-fs on toolchain 1ef7943ee607160a564655b6596f83670ef95df5
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1ef7943ee607160a564655b6596f83670ef95df5" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/ztygod/mini-fs already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1ef7943ee607160a564655b6596f83670ef95df5" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded whoami v1.6.1
[INFO] [stderr]   Downloaded fd-lock v4.0.4
[INFO] [stderr]   Downloaded strip-ansi-escapes v0.2.1
[INFO] [stderr]   Downloaded vte v0.14.1
[INFO] [stderr]   Downloaded proc-macro2 v1.0.102
[INFO] [stderr]   Downloaded reedline v0.43.0
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:4848fb76d95f26979359cc7e45710b1dbc8f3acb7aeedee7c460d7702230f228" "/opt/rustwide/cargo-home/bin/cargo" "+1ef7943ee607160a564655b6596f83670ef95df5" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 38e2c3691da70e1f43ef4dd2e52bde7435f2b080feb1260fc147e6e2c7785de7
[INFO] running `Command { std: "docker" "start" "-a" "38e2c3691da70e1f43ef4dd2e52bde7435f2b080feb1260fc147e6e2c7785de7", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "38e2c3691da70e1f43ef4dd2e52bde7435f2b080feb1260fc147e6e2c7785de7", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "38e2c3691da70e1f43ef4dd2e52bde7435f2b080feb1260fc147e6e2c7785de7", kill_on_drop: false }`
[INFO] [stdout] 38e2c3691da70e1f43ef4dd2e52bde7435f2b080feb1260fc147e6e2c7785de7
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:4848fb76d95f26979359cc7e45710b1dbc8f3acb7aeedee7c460d7702230f228" "/opt/rustwide/cargo-home/bin/cargo" "+1ef7943ee607160a564655b6596f83670ef95df5" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 6bfa52c5f9ebc64c8fc958a53e995449f15f85e8ef44670b5183ebf024d19b08
[INFO] running `Command { std: "docker" "start" "-a" "6bfa52c5f9ebc64c8fc958a53e995449f15f85e8ef44670b5183ebf024d19b08", kill_on_drop: false }`
[INFO] [stderr]    Compiling libc v0.2.177
[INFO] [stderr]    Compiling proc-macro2 v1.0.102
[INFO] [stderr]    Compiling serde_core v1.0.228
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling rustix v1.1.2
[INFO] [stderr]    Compiling parking_lot_core v0.9.12
[INFO] [stderr]    Compiling log v0.4.28
[INFO] [stderr]    Compiling linux-raw-sys v0.11.0
[INFO] [stderr]    Compiling getrandom v0.3.4
[INFO] [stderr]    Compiling rustix v0.38.44
[INFO] [stderr]    Compiling unicode-width v0.2.2
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]    Compiling thiserror v2.0.17
[INFO] [stderr]    Compiling memchr v2.7.6
[INFO] [stderr]    Compiling portable-atomic v1.11.1
[INFO] [stderr]    Compiling iana-time-zone v0.1.64
[INFO] [stderr]    Compiling either v1.15.0
[INFO] [stderr]    Compiling itertools v0.13.0
[INFO] [stderr]    Compiling number_prefix v0.4.0
[INFO] [stderr]    Compiling zeroize v1.8.2
[INFO] [stderr]    Compiling strum v0.26.3
[INFO] [stderr]    Compiling colored v2.2.0
[INFO] [stderr]    Compiling whoami v1.6.1
[INFO] [stderr]    Compiling vte v0.14.1
[INFO] [stderr]    Compiling strip-ansi-escapes v0.2.1
[INFO] [stderr]    Compiling signal-hook-registry v1.4.6
[INFO] [stderr]    Compiling mio v1.0.4
[INFO] [stderr]    Compiling mio v0.8.11
[INFO] [stderr]    Compiling console v0.15.11
[INFO] [stderr]    Compiling dirs-sys v0.4.1
[INFO] [stderr]    Compiling quote v1.0.41
[INFO] [stderr]    Compiling parking_lot v0.12.5
[INFO] [stderr]    Compiling uuid v1.18.1
[INFO] [stderr]    Compiling dirs v5.0.1
[INFO] [stderr]    Compiling signal-hook v0.3.18
[INFO] [stderr]    Compiling syn v2.0.108
[INFO] [stderr]    Compiling indicatif v0.17.11
[INFO] [stderr]    Compiling signal-hook-mio v0.2.4
[INFO] [stderr]    Compiling bitflags v2.10.0
[INFO] [stderr]    Compiling crossterm v0.27.0
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling thiserror-impl v1.0.69
[INFO] [stderr]    Compiling thiserror-impl v2.0.17
[INFO] [stderr]    Compiling strum_macros v0.26.4
[INFO] [stderr]    Compiling thiserror v1.0.69
[INFO] [stderr]    Compiling tempfile v3.23.0
[INFO] [stderr]    Compiling fd-lock v4.0.4
[INFO] [stderr]    Compiling dialoguer v0.11.0
[INFO] [stderr]    Compiling chrono v0.4.42
[INFO] [stderr]    Compiling crossterm v0.28.1
[INFO] [stderr]    Compiling bincode v1.3.3
[INFO] [stderr]    Compiling reedline v0.43.0
[INFO] [stderr]    Compiling file-system v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused imports: `BLOCK_COUNT` and `DISK_SIZE`
[INFO] [stdout]   --> src/disk/mod.rs:10:24
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub use types::{Block, BLOCK_COUNT, BLOCK_SIZE, DISK_SIZE};
[INFO] [stdout]    |                        ^^^^^^^^^^^              ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::empty`
[INFO] [stdout]  --> src/fs/inode_table.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::io::empty;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `self`
[INFO] [stdout]  --> src/fs/inode_table.rs:7:24
[INFO] [stdout]   |
[INFO] [stdout] 7 |     fs::inode_bitmap::{self, InodeBitmap},
[INFO] [stdout]   |                        ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/shell/mod.rs:34:9
[INFO] [stdout]    |
[INFO] [stdout] 34 |     let mut file_system = match initialize_fs() {
[INFO] [stdout]    |         ----^^^^^^^^^^^
[INFO] [stdout]    |         |
[INFO] [stdout]    |         help: remove this `mut`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `file_system`
[INFO] [stdout]   --> src/shell/mod.rs:34:9
[INFO] [stdout]    |
[INFO] [stdout] 34 |     let mut file_system = match initialize_fs() {
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_file_system`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: trait `BlockDevice` is never used
[INFO] [stdout]  --> src/disk/block_device.rs:5:11
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub trait BlockDevice: Send + Sync {
[INFO] [stdout]   |           ^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `file` is never read
[INFO] [stdout]   --> src/disk/file_disk.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub struct FileDisk {
[INFO] [stdout]    |            -------- field in this struct
[INFO] [stdout] 18 |     file: Mutex<File>,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `FileDisk` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `Block` is never used
[INFO] [stdout]   --> src/disk/types.rs:15:10
[INFO] [stdout]    |
[INFO] [stdout] 15 | pub type Block = [u8; BLOCK_SIZE];
[INFO] [stdout]    |          ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `disk`, `super_block`, `inode_bitmap`, `data_bitmap`, `inode_table`, and `data_area` are never read
[INFO] [stdout]   --> src/fs/mod.rs:20:9
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub struct FileSystem {
[INFO] [stdout]    |            ---------- fields in this struct
[INFO] [stdout] 20 |     pub disk: FileDisk,               // 底层磁盘抽象层
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 21 |     pub super_block: SuperBlock,      // 文件系统总体信息
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 22 |     pub inode_bitmap: InodeBitmap,    // inode 分配信息
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout] 23 |     pub data_bitmap: DataBlockBitmap, // 数据块分配信息
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 24 |     pub inode_table: InodeTable,      // 所有 inode 管理
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 25 |     pub data_area: DataArea,          // 所有数据块内容管理
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `FileSystem` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated functions are never used
[INFO] [stdout]   --> src/fs/mod.rs:29:12
[INFO] [stdout]    |
[INFO] [stdout] 28 | impl FileSystem {
[INFO] [stdout]    | --------------- associated functions in this implementation
[INFO] [stdout] 29 |     pub fn mount() {}
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 30 |     pub fn unmount() {}
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 31 |     pub fn format() {}
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 32 |     pub fn create_file() {}
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 33 |     pub fn update_file() {}
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 34 |     pub fn list_dir() {}
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 35 |     pub fn sync() {}
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 36 |     pub fn alloc_inode() {}
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 37 |     pub fn alloc_block() {}
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SUPER_BLOCK_BLOCK_ID` is never used
[INFO] [stdout]  --> src/fs/config.rs:1:11
[INFO] [stdout]   |
[INFO] [stdout] 1 | pub const SUPER_BLOCK_BLOCK_ID: u32 = 0;
[INFO] [stdout]   |           ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `INODE_BITMAP_BLOCK_ID` is never used
[INFO] [stdout]  --> src/fs/config.rs:2:11
[INFO] [stdout]   |
[INFO] [stdout] 2 | pub const INODE_BITMAP_BLOCK_ID: u32 = 1;
[INFO] [stdout]   |           ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DATA_BLOCK_BITMAP_BLOCK_ID` is never used
[INFO] [stdout]  --> src/fs/config.rs:3:11
[INFO] [stdout]   |
[INFO] [stdout] 3 | pub const DATA_BLOCK_BITMAP_BLOCK_ID: u32 = 2;
[INFO] [stdout]   |           ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `INODE_TABLE_START_BLOCK_ID` is never used
[INFO] [stdout]  --> src/fs/config.rs:4:11
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub const INODE_TABLE_START_BLOCK_ID: u32 = 3;
[INFO] [stdout]   |           ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `INODES_PER_BLOCK` is never used
[INFO] [stdout]  --> src/fs/config.rs:7:11
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub const INODES_PER_BLOCK: u32 = 32;
[INFO] [stdout]   |           ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TOTAL_INODES` is never used
[INFO] [stdout]   --> src/fs/config.rs:10:11
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub const TOTAL_INODES: u32 = 4096;
[INFO] [stdout]    |           ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `INODE_TABLE_BLOCKS` is never used
[INFO] [stdout]   --> src/fs/config.rs:13:11
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub const INODE_TABLE_BLOCKS: u32 = TOTAL_INODES / INODES_PER_BLOCK;
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DATA_AREA_START_BLOCK_ID` is never used
[INFO] [stdout]   --> src/fs/config.rs:16:11
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub const DATA_AREA_START_BLOCK_ID: u32 = INODE_TABLE_START_BLOCK_ID + INODE_TABLE_BLOCKS;
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `dirty` is never read
[INFO] [stdout]   --> src/fs/data_area.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout]  5 | pub struct DataArea {
[INFO] [stdout]    |            -------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 10 |     dirty: Vec<bool>, // 每个块是否被修改
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DataArea` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `write_block`, `read_block`, `sync`, and `load` are never used
[INFO] [stdout]   --> src/fs/data_area.rs:14:12
[INFO] [stdout]    |
[INFO] [stdout] 13 | impl DataArea {
[INFO] [stdout]    | ------------- associated items in this implementation
[INFO] [stdout] 14 |     pub fn new(start_block: u64, total_blocks: u64) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 23 |     pub fn write_block(&mut self, index: u64, buf: &[u8]) -> Result<(), String> {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 39 |     pub fn read_block(&self, index: u64) -> Option<&[u8]> {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 47 |     pub fn sync(&mut self, disk: &mut FileDisk) -> std::io::Result<()> {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 63 |     pub fn load(&mut self, disk: &mut FileDisk) -> std::io::Result<()> {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `alloc`, `free`, `is_used`, `load`, and `sync` are never used
[INFO] [stdout]   --> src/fs/data_block_bitmap.rs:13:12
[INFO] [stdout]    |
[INFO] [stdout] 12 | impl DataBlockBitmap {
[INFO] [stdout]    | -------------------- associated items in this implementation
[INFO] [stdout] 13 |     pub fn new(total_blocks: u64, start_block: u64) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 25 |     pub fn alloc(&mut self) -> Option<u64> {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 41 |     pub fn free(&mut self, block_index: u64) {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 55 |     pub fn is_used(&self, block_index: u64) -> bool {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 62 |     pub fn load(disk: &mut FileDisk, start_block: u64, total_blocks: u64) -> Self {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 87 |     pub fn sync(&self, disk: &mut FileDisk) -> std::io::Result<()> {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `DirEntryType` is never used
[INFO] [stdout]  --> src/fs/directory.rs:6:10
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub enum DirEntryType {
[INFO] [stdout]   |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DirEntry` is never constructed
[INFO] [stdout]   --> src/fs/directory.rs:13:12
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub struct DirEntry {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Directory` is never constructed
[INFO] [stdout]   --> src/fs/directory.rs:21:12
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub struct Directory {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]   --> src/fs/directory.rs:30:12
[INFO] [stdout]    |
[INFO] [stdout] 28 | impl Directory {
[INFO] [stdout]    | -------------- associated items in this implementation
[INFO] [stdout] 29 |     // 新建目录
[INFO] [stdout] 30 |     pub fn new(inode_index: usize) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 39 |     pub fn rebuild_index_map(&mut self) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 47 |     pub fn add(
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 68 |     pub fn remove(&mut self, name: &str) -> Option<usize> {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 79 |     pub fn find(&self, name: &str) -> Option<usize> {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 86 |     pub fn list(&self) -> Vec<String> {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 91 |     pub fn is_directory(&self, name: &str) -> Option<bool> {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `FileSystemError` is never used
[INFO] [stdout]  --> src/fs/error.rs:5:10
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub enum FileSystemError {
[INFO] [stdout]   |          ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `Result` is never used
[INFO] [stdout]   --> src/fs/error.rs:56:10
[INFO] [stdout]    |
[INFO] [stdout] 56 | pub type Result<T> = std::result::Result<T, FileSystemError>;
[INFO] [stdout]    |          ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `alloc`, `free`, `is_used`, `load`, and `sync` are never used
[INFO] [stdout]    --> src/fs/inode_bitmap.rs:15:12
[INFO] [stdout]     |
[INFO] [stdout]  13 | impl InodeBitmap {
[INFO] [stdout]     | ---------------- associated items in this implementation
[INFO] [stdout]  14 |     // 创建一个新的 inode 位图（所有位清零 = 空闲）
[INFO] [stdout]  15 |     pub fn new(total_inodes: u64, start_block: u64) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  26 |     pub fn alloc(&mut self) -> Option<u64> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  42 |     pub fn free(&mut self, inode_index: u64) {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout]  57 |     pub fn is_used(&mut self, inode_index: u64) -> bool {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  97 |     pub fn load(disk: &mut FileDisk, start_block: u64, total_inodes: u64) -> Self {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 122 |     pub fn sync(&self, disk: &mut FileDisk) -> std::io::Result<()> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PTRS_PER_BLOCK` is never used
[INFO] [stdout]   --> src/fs/inode_table.rs:12:11
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub const PTRS_PER_BLOCK: usize = 1024; // 每个间接块可以指向多少个数据块（假设每个指针4字节）
[INFO] [stdout]    |           ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/fs/inode_table.rs:29:12
[INFO] [stdout]     |
[INFO] [stdout]  28 | impl InodeTable {
[INFO] [stdout]     | --------------- associated items in this implementation
[INFO] [stdout]  29 |     pub fn new(start_block: u64, total_inodes: u64) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  37 |     pub fn alloc_inode(
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  58 |     pub fn free_inode(&mut self, inode_bitmap: &mut InodeBitmap, inode_index: u64) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  63 |     pub fn get_inode(&self, index: u64) -> Option<&Inode> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  67 |     pub fn get_inode_mut(&mut self, index: u64) -> Option<&mut Inode> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  71 |     pub fn sync(&self, disk: &mut FileDisk) -> std::io::Result<()> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 100 |     pub fn load(disk: &mut FileDisk, start_block: u64) -> std::io::Result<Self> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/fs/inode_table.rs:155:12
[INFO] [stdout]     |
[INFO] [stdout] 154 | impl Inode {
[INFO] [stdout]     | ---------- associated items in this implementation
[INFO] [stdout] 155 |     pub fn new(inode_type: InodeType, uid: u32, gid: u32, permissions: u16) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 173 |     pub fn empty() -> Self {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 192 |     pub fn touch(&mut self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 199 |     pub fn inc_link(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 203 |     pub fn dec_link(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 210 |     pub fn add_block(&mut self, block_id: u64) -> Result<(), String> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 226 |     pub fn block_count(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/fs/super_block.rs:26:8
[INFO] [stdout]    |
[INFO] [stdout] 25 | impl SuperBlock {
[INFO] [stdout]    | --------------- associated function in this implementation
[INFO] [stdout] 26 |     fn new(total_inodes: u64) -> Self {
[INFO] [stdout]    |        ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `current_timestamp` is never used
[INFO] [stdout]  --> src/utils.rs:4:8
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub fn current_timestamp() -> u64 {
[INFO] [stdout]   |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `generate_uuid` is never used
[INFO] [stdout]   --> src/utils.rs:12:8
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub fn generate_uuid() -> String {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 24.28s
[INFO] running `Command { std: "docker" "inspect" "6bfa52c5f9ebc64c8fc958a53e995449f15f85e8ef44670b5183ebf024d19b08", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "6bfa52c5f9ebc64c8fc958a53e995449f15f85e8ef44670b5183ebf024d19b08", kill_on_drop: false }`
[INFO] [stdout] 6bfa52c5f9ebc64c8fc958a53e995449f15f85e8ef44670b5183ebf024d19b08
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:4848fb76d95f26979359cc7e45710b1dbc8f3acb7aeedee7c460d7702230f228" "/opt/rustwide/cargo-home/bin/cargo" "+1ef7943ee607160a564655b6596f83670ef95df5" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] b73303b15bad2f530d3d11905def6197c6eed51f2f3b69c2d1430da5fb09ac32
[INFO] running `Command { std: "docker" "start" "-a" "b73303b15bad2f530d3d11905def6197c6eed51f2f3b69c2d1430da5fb09ac32", kill_on_drop: false }`
[INFO] [stderr]    Compiling file-system v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused imports: `BLOCK_COUNT` and `DISK_SIZE`
[INFO] [stdout]   --> src/disk/mod.rs:10:24
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub use types::{Block, BLOCK_COUNT, BLOCK_SIZE, DISK_SIZE};
[INFO] [stdout]    |                        ^^^^^^^^^^^              ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::empty`
[INFO] [stdout]  --> src/fs/inode_table.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use std::io::empty;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `self`
[INFO] [stdout]  --> src/fs/inode_table.rs:7:24
[INFO] [stdout]   |
[INFO] [stdout] 7 |     fs::inode_bitmap::{self, InodeBitmap},
[INFO] [stdout]   |                        ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]   --> src/shell/mod.rs:34:9
[INFO] [stdout]    |
[INFO] [stdout] 34 |     let mut file_system = match initialize_fs() {
[INFO] [stdout]    |         ----^^^^^^^^^^^
[INFO] [stdout]    |         |
[INFO] [stdout]    |         help: remove this `mut`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `file_system`
[INFO] [stdout]   --> src/shell/mod.rs:34:9
[INFO] [stdout]    |
[INFO] [stdout] 34 |     let mut file_system = match initialize_fs() {
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_file_system`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `disk`, `super_block`, `inode_bitmap`, `data_bitmap`, `inode_table`, and `data_area` are never read
[INFO] [stdout]   --> src/fs/mod.rs:20:9
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub struct FileSystem {
[INFO] [stdout]    |            ---------- fields in this struct
[INFO] [stdout] 20 |     pub disk: FileDisk,               // 底层磁盘抽象层
[INFO] [stdout]    |         ^^^^
[INFO] [stdout] 21 |     pub super_block: SuperBlock,      // 文件系统总体信息
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 22 |     pub inode_bitmap: InodeBitmap,    // inode 分配信息
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout] 23 |     pub data_bitmap: DataBlockBitmap, // 数据块分配信息
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 24 |     pub inode_table: InodeTable,      // 所有 inode 管理
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 25 |     pub data_area: DataArea,          // 所有数据块内容管理
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `FileSystem` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated functions are never used
[INFO] [stdout]   --> src/fs/mod.rs:29:12
[INFO] [stdout]    |
[INFO] [stdout] 28 | impl FileSystem {
[INFO] [stdout]    | --------------- associated functions in this implementation
[INFO] [stdout] 29 |     pub fn mount() {}
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 30 |     pub fn unmount() {}
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 31 |     pub fn format() {}
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 32 |     pub fn create_file() {}
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 33 |     pub fn update_file() {}
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 34 |     pub fn list_dir() {}
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 35 |     pub fn sync() {}
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 36 |     pub fn alloc_inode() {}
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 37 |     pub fn alloc_block() {}
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `SUPER_BLOCK_BLOCK_ID` is never used
[INFO] [stdout]  --> src/fs/config.rs:1:11
[INFO] [stdout]   |
[INFO] [stdout] 1 | pub const SUPER_BLOCK_BLOCK_ID: u32 = 0;
[INFO] [stdout]   |           ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `INODE_BITMAP_BLOCK_ID` is never used
[INFO] [stdout]  --> src/fs/config.rs:2:11
[INFO] [stdout]   |
[INFO] [stdout] 2 | pub const INODE_BITMAP_BLOCK_ID: u32 = 1;
[INFO] [stdout]   |           ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DATA_BLOCK_BITMAP_BLOCK_ID` is never used
[INFO] [stdout]  --> src/fs/config.rs:3:11
[INFO] [stdout]   |
[INFO] [stdout] 3 | pub const DATA_BLOCK_BITMAP_BLOCK_ID: u32 = 2;
[INFO] [stdout]   |           ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `INODE_TABLE_START_BLOCK_ID` is never used
[INFO] [stdout]  --> src/fs/config.rs:4:11
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub const INODE_TABLE_START_BLOCK_ID: u32 = 3;
[INFO] [stdout]   |           ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `INODES_PER_BLOCK` is never used
[INFO] [stdout]  --> src/fs/config.rs:7:11
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub const INODES_PER_BLOCK: u32 = 32;
[INFO] [stdout]   |           ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `TOTAL_INODES` is never used
[INFO] [stdout]   --> src/fs/config.rs:10:11
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub const TOTAL_INODES: u32 = 4096;
[INFO] [stdout]    |           ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `INODE_TABLE_BLOCKS` is never used
[INFO] [stdout]   --> src/fs/config.rs:13:11
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub const INODE_TABLE_BLOCKS: u32 = TOTAL_INODES / INODES_PER_BLOCK;
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `DATA_AREA_START_BLOCK_ID` is never used
[INFO] [stdout]   --> src/fs/config.rs:16:11
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub const DATA_AREA_START_BLOCK_ID: u32 = INODE_TABLE_START_BLOCK_ID + INODE_TABLE_BLOCKS;
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `dirty` is never read
[INFO] [stdout]   --> src/fs/data_area.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout]  5 | pub struct DataArea {
[INFO] [stdout]    |            -------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 10 |     dirty: Vec<bool>, // 每个块是否被修改
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DataArea` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `write_block`, `read_block`, `sync`, and `load` are never used
[INFO] [stdout]   --> src/fs/data_area.rs:14:12
[INFO] [stdout]    |
[INFO] [stdout] 13 | impl DataArea {
[INFO] [stdout]    | ------------- associated items in this implementation
[INFO] [stdout] 14 |     pub fn new(start_block: u64, total_blocks: u64) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 23 |     pub fn write_block(&mut self, index: u64, buf: &[u8]) -> Result<(), String> {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 39 |     pub fn read_block(&self, index: u64) -> Option<&[u8]> {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 47 |     pub fn sync(&mut self, disk: &mut FileDisk) -> std::io::Result<()> {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 63 |     pub fn load(&mut self, disk: &mut FileDisk) -> std::io::Result<()> {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `alloc`, `free`, `is_used`, `load`, and `sync` are never used
[INFO] [stdout]   --> src/fs/data_block_bitmap.rs:13:12
[INFO] [stdout]    |
[INFO] [stdout] 12 | impl DataBlockBitmap {
[INFO] [stdout]    | -------------------- associated items in this implementation
[INFO] [stdout] 13 |     pub fn new(total_blocks: u64, start_block: u64) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 25 |     pub fn alloc(&mut self) -> Option<u64> {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 41 |     pub fn free(&mut self, block_index: u64) {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 55 |     pub fn is_used(&self, block_index: u64) -> bool {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 62 |     pub fn load(disk: &mut FileDisk, start_block: u64, total_blocks: u64) -> Self {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 87 |     pub fn sync(&self, disk: &mut FileDisk) -> std::io::Result<()> {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `DirEntryType` is never used
[INFO] [stdout]  --> src/fs/directory.rs:6:10
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub enum DirEntryType {
[INFO] [stdout]   |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DirEntry` is never constructed
[INFO] [stdout]   --> src/fs/directory.rs:13:12
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub struct DirEntry {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Directory` is never constructed
[INFO] [stdout]   --> src/fs/directory.rs:21:12
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub struct Directory {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]   --> src/fs/directory.rs:30:12
[INFO] [stdout]    |
[INFO] [stdout] 28 | impl Directory {
[INFO] [stdout]    | -------------- associated items in this implementation
[INFO] [stdout] 29 |     // 新建目录
[INFO] [stdout] 30 |     pub fn new(inode_index: usize) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 39 |     pub fn rebuild_index_map(&mut self) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 47 |     pub fn add(
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 68 |     pub fn remove(&mut self, name: &str) -> Option<usize> {
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 79 |     pub fn find(&self, name: &str) -> Option<usize> {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 86 |     pub fn list(&self) -> Vec<String> {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 91 |     pub fn is_directory(&self, name: &str) -> Option<bool> {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `FileSystemError` is never used
[INFO] [stdout]  --> src/fs/error.rs:5:10
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub enum FileSystemError {
[INFO] [stdout]   |          ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type alias `Result` is never used
[INFO] [stdout]   --> src/fs/error.rs:56:10
[INFO] [stdout]    |
[INFO] [stdout] 56 | pub type Result<T> = std::result::Result<T, FileSystemError>;
[INFO] [stdout]    |          ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `alloc`, `free`, `is_used`, `load`, and `sync` are never used
[INFO] [stdout]    --> src/fs/inode_bitmap.rs:15:12
[INFO] [stdout]     |
[INFO] [stdout]  13 | impl InodeBitmap {
[INFO] [stdout]     | ---------------- associated items in this implementation
[INFO] [stdout]  14 |     // 创建一个新的 inode 位图（所有位清零 = 空闲）
[INFO] [stdout]  15 |     pub fn new(total_inodes: u64, start_block: u64) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  26 |     pub fn alloc(&mut self) -> Option<u64> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  42 |     pub fn free(&mut self, inode_index: u64) {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout]  57 |     pub fn is_used(&mut self, inode_index: u64) -> bool {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  97 |     pub fn load(disk: &mut FileDisk, start_block: u64, total_inodes: u64) -> Self {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 122 |     pub fn sync(&self, disk: &mut FileDisk) -> std::io::Result<()> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `PTRS_PER_BLOCK` is never used
[INFO] [stdout]   --> src/fs/inode_table.rs:12:11
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub const PTRS_PER_BLOCK: usize = 1024; // 每个间接块可以指向多少个数据块（假设每个指针4字节）
[INFO] [stdout]    |           ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/fs/inode_table.rs:29:12
[INFO] [stdout]     |
[INFO] [stdout]  28 | impl InodeTable {
[INFO] [stdout]     | --------------- associated items in this implementation
[INFO] [stdout]  29 |     pub fn new(start_block: u64, total_inodes: u64) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  37 |     pub fn alloc_inode(
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  58 |     pub fn free_inode(&mut self, inode_bitmap: &mut InodeBitmap, inode_index: u64) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  63 |     pub fn get_inode(&self, index: u64) -> Option<&Inode> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  67 |     pub fn get_inode_mut(&mut self, index: u64) -> Option<&mut Inode> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  71 |     pub fn sync(&self, disk: &mut FileDisk) -> std::io::Result<()> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 100 |     pub fn load(disk: &mut FileDisk, start_block: u64) -> std::io::Result<Self> {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/fs/inode_table.rs:155:12
[INFO] [stdout]     |
[INFO] [stdout] 154 | impl Inode {
[INFO] [stdout]     | ---------- associated items in this implementation
[INFO] [stdout] 155 |     pub fn new(inode_type: InodeType, uid: u32, gid: u32, permissions: u16) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 173 |     pub fn empty() -> Self {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 192 |     pub fn touch(&mut self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 199 |     pub fn inc_link(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 203 |     pub fn dec_link(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 210 |     pub fn add_block(&mut self, block_id: u64) -> Result<(), String> {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 226 |     pub fn block_count(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/fs/super_block.rs:26:8
[INFO] [stdout]    |
[INFO] [stdout] 25 | impl SuperBlock {
[INFO] [stdout]    | --------------- associated function in this implementation
[INFO] [stdout] 26 |     fn new(total_inodes: u64) -> Self {
[INFO] [stdout]    |        ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `current_timestamp` is never used
[INFO] [stdout]  --> src/utils.rs:4:8
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub fn current_timestamp() -> u64 {
[INFO] [stdout]   |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `generate_uuid` is never used
[INFO] [stdout]   --> src/utils.rs:12:8
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub fn generate_uuid() -> String {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 1.30s
[INFO] running `Command { std: "docker" "inspect" "b73303b15bad2f530d3d11905def6197c6eed51f2f3b69c2d1430da5fb09ac32", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "b73303b15bad2f530d3d11905def6197c6eed51f2f3b69c2d1430da5fb09ac32", kill_on_drop: false }`
[INFO] [stdout] b73303b15bad2f530d3d11905def6197c6eed51f2f3b69c2d1430da5fb09ac32
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:4848fb76d95f26979359cc7e45710b1dbc8f3acb7aeedee7c460d7702230f228" "/opt/rustwide/cargo-home/bin/cargo" "+1ef7943ee607160a564655b6596f83670ef95df5" "test" "--frozen", kill_on_drop: false }`
[INFO] [stdout] edc6ffaaa1db526f3bce21e89fdeaca5d27f36ecdde243551e978a4be99d51af
[INFO] running `Command { std: "docker" "start" "-a" "edc6ffaaa1db526f3bce21e89fdeaca5d27f36ecdde243551e978a4be99d51af", kill_on_drop: false }`
[INFO] [stderr] warning: unused imports: `BLOCK_COUNT` and `DISK_SIZE`
[INFO] [stderr]   --> src/disk/mod.rs:10:24
[INFO] [stderr]    |
[INFO] [stderr] 10 | pub use types::{Block, BLOCK_COUNT, BLOCK_SIZE, DISK_SIZE};
[INFO] [stderr]    |                        ^^^^^^^^^^^              ^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::io::empty`
[INFO] [stderr]  --> src/fs/inode_table.rs:1:5
[INFO] [stderr]   |
[INFO] [stderr] 1 | use std::io::empty;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `self`
[INFO] [stderr]  --> src/fs/inode_table.rs:7:24
[INFO] [stderr]   |
[INFO] [stderr] 7 |     fs::inode_bitmap::{self, InodeBitmap},
[INFO] [stderr]   |                        ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]   --> src/shell/mod.rs:34:9
[INFO] [stderr]    |
[INFO] [stderr] 34 |     let mut file_system = match initialize_fs() {
[INFO] [stderr]    |         ----^^^^^^^^^^^
[INFO] [stderr]    |         |
[INFO] [stderr]    |         help: remove this `mut`
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `file_system`
[INFO] [stderr]   --> src/shell/mod.rs:34:9
[INFO] [stderr]    |
[INFO] [stderr] 34 |     let mut file_system = match initialize_fs() {
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_file_system`
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: fields `disk`, `super_block`, `inode_bitmap`, `data_bitmap`, `inode_table`, and `data_area` are never read
[INFO] [stderr]   --> src/fs/mod.rs:20:9
[INFO] [stderr]    |
[INFO] [stderr] 19 | pub struct FileSystem {
[INFO] [stderr]    |            ---------- fields in this struct
[INFO] [stderr] 20 |     pub disk: FileDisk,               // 底层磁盘抽象层
[INFO] [stderr]    |         ^^^^
[INFO] [stderr] 21 |     pub super_block: SuperBlock,      // 文件系统总体信息
[INFO] [stderr]    |         ^^^^^^^^^^^
[INFO] [stderr] 22 |     pub inode_bitmap: InodeBitmap,    // inode 分配信息
[INFO] [stderr]    |         ^^^^^^^^^^^^
[INFO] [stderr] 23 |     pub data_bitmap: DataBlockBitmap, // 数据块分配信息
[INFO] [stderr]    |         ^^^^^^^^^^^
[INFO] [stderr] 24 |     pub inode_table: InodeTable,      // 所有 inode 管理
[INFO] [stderr]    |         ^^^^^^^^^^^
[INFO] [stderr] 25 |     pub data_area: DataArea,          // 所有数据块内容管理
[INFO] [stderr]    |         ^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `FileSystem` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stderr]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: multiple associated functions are never used
[INFO] [stderr]   --> src/fs/mod.rs:29:12
[INFO] [stderr]    |
[INFO] [stderr] 28 | impl FileSystem {
[INFO] [stderr]    | --------------- associated functions in this implementation
[INFO] [stderr] 29 |     pub fn mount() {}
[INFO] [stderr]    |            ^^^^^
[INFO] [stderr] 30 |     pub fn unmount() {}
[INFO] [stderr]    |            ^^^^^^^
[INFO] [stderr] 31 |     pub fn format() {}
[INFO] [stderr]    |            ^^^^^^
[INFO] [stderr] 32 |     pub fn create_file() {}
[INFO] [stderr]    |            ^^^^^^^^^^^
[INFO] [stderr] 33 |     pub fn update_file() {}
[INFO] [stderr]    |            ^^^^^^^^^^^
[INFO] [stderr] 34 |     pub fn list_dir() {}
[INFO] [stderr]    |            ^^^^^^^^
[INFO] [stderr] 35 |     pub fn sync() {}
[INFO] [stderr]    |            ^^^^
[INFO] [stderr] 36 |     pub fn alloc_inode() {}
[INFO] [stderr]    |            ^^^^^^^^^^^
[INFO] [stderr] 37 |     pub fn alloc_block() {}
[INFO] [stderr]    |            ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `SUPER_BLOCK_BLOCK_ID` is never used
[INFO] [stderr]  --> src/fs/config.rs:1:11
[INFO] [stderr]   |
[INFO] [stderr] 1 | pub const SUPER_BLOCK_BLOCK_ID: u32 = 0;
[INFO] [stderr]   |           ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `INODE_BITMAP_BLOCK_ID` is never used
[INFO] [stderr]  --> src/fs/config.rs:2:11
[INFO] [stderr]   |
[INFO] [stderr] 2 | pub const INODE_BITMAP_BLOCK_ID: u32 = 1;
[INFO] [stderr]   |           ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `DATA_BLOCK_BITMAP_BLOCK_ID` is never used
[INFO] [stderr]  --> src/fs/config.rs:3:11
[INFO] [stderr]   |
[INFO] [stderr] 3 | pub const DATA_BLOCK_BITMAP_BLOCK_ID: u32 = 2;
[INFO] [stderr]   |           ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `INODE_TABLE_START_BLOCK_ID` is never used
[INFO] [stderr]  --> src/fs/config.rs:4:11
[INFO] [stderr]   |
[INFO] [stderr] 4 | pub const INODE_TABLE_START_BLOCK_ID: u32 = 3;
[INFO] [stderr]   |           ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `INODES_PER_BLOCK` is never used
[INFO] [stderr]  --> src/fs/config.rs:7:11
[INFO] [stderr]   |
[INFO] [stderr] 7 | pub const INODES_PER_BLOCK: u32 = 32;
[INFO] [stderr]   |           ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `TOTAL_INODES` is never used
[INFO] [stderr]   --> src/fs/config.rs:10:11
[INFO] [stderr]    |
[INFO] [stderr] 10 | pub const TOTAL_INODES: u32 = 4096;
[INFO] [stderr]    |           ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `INODE_TABLE_BLOCKS` is never used
[INFO] [stderr]   --> src/fs/config.rs:13:11
[INFO] [stderr]    |
[INFO] [stderr] 13 | pub const INODE_TABLE_BLOCKS: u32 = TOTAL_INODES / INODES_PER_BLOCK;
[INFO] [stderr]    |           ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `DATA_AREA_START_BLOCK_ID` is never used
[INFO] [stderr]   --> src/fs/config.rs:16:11
[INFO] [stderr]    |
[INFO] [stderr] 16 | pub const DATA_AREA_START_BLOCK_ID: u32 = INODE_TABLE_START_BLOCK_ID + INODE_TABLE_BLOCKS;
[INFO] [stderr]    |           ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: field `dirty` is never read
[INFO] [stderr]   --> src/fs/data_area.rs:10:5
[INFO] [stderr]    |
[INFO] [stderr]  5 | pub struct DataArea {
[INFO] [stderr]    |            -------- field in this struct
[INFO] [stderr] ...
[INFO] [stderr] 10 |     dirty: Vec<bool>, // 每个块是否被修改
[INFO] [stderr]    |     ^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `DataArea` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `new`, `write_block`, `read_block`, `sync`, and `load` are never used
[INFO] [stderr]   --> src/fs/data_area.rs:14:12
[INFO] [stderr]    |
[INFO] [stderr] 13 | impl DataArea {
[INFO] [stderr]    | ------------- associated items in this implementation
[INFO] [stderr] 14 |     pub fn new(start_block: u64, total_blocks: u64) -> Self {
[INFO] [stderr]    |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 23 |     pub fn write_block(&mut self, index: u64, buf: &[u8]) -> Result<(), String> {
[INFO] [stderr]    |            ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 39 |     pub fn read_block(&self, index: u64) -> Option<&[u8]> {
[INFO] [stderr]    |            ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 47 |     pub fn sync(&mut self, disk: &mut FileDisk) -> std::io::Result<()> {
[INFO] [stderr]    |            ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 63 |     pub fn load(&mut self, disk: &mut FileDisk) -> std::io::Result<()> {
[INFO] [stderr]    |            ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `new`, `alloc`, `free`, `is_used`, `load`, and `sync` are never used
[INFO] [stderr]   --> src/fs/data_block_bitmap.rs:13:12
[INFO] [stderr]    |
[INFO] [stderr] 12 | impl DataBlockBitmap {
[INFO] [stderr]    | -------------------- associated items in this implementation
[INFO] [stderr] 13 |     pub fn new(total_blocks: u64, start_block: u64) -> Self {
[INFO] [stderr]    |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 25 |     pub fn alloc(&mut self) -> Option<u64> {
[INFO] [stderr]    |            ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 41 |     pub fn free(&mut self, block_index: u64) {
[INFO] [stderr]    |            ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 55 |     pub fn is_used(&self, block_index: u64) -> bool {
[INFO] [stderr]    |            ^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 62 |     pub fn load(disk: &mut FileDisk, start_block: u64, total_blocks: u64) -> Self {
[INFO] [stderr]    |            ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 87 |     pub fn sync(&self, disk: &mut FileDisk) -> std::io::Result<()> {
[INFO] [stderr]    |            ^^^^
[INFO] [stderr] 
[INFO] [stdout] 
[INFO] [stderr] warning: enum `DirEntryType` is never used
[INFO] [stdout] running 1 test
[INFO] [stderr]  --> src/fs/directory.rs:6:10
[INFO] [stderr]   |
[INFO] [stderr] 6 | pub enum DirEntryType {
[INFO] [stderr]   |          ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `DirEntry` is never constructed
[INFO] [stderr]   --> src/fs/directory.rs:13:12
[INFO] [stderr]    |
[INFO] [stderr] 13 | pub struct DirEntry {
[INFO] [stderr]    |            ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `Directory` is never constructed
[INFO] [stderr]   --> src/fs/directory.rs:21:12
[INFO] [stderr]    |
[INFO] [stderr] 21 | pub struct Directory {
[INFO] [stderr]    |            ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple associated items are never used
[INFO] [stderr]   --> src/fs/directory.rs:30:12
[INFO] [stderr]    |
[INFO] [stderr] 28 | impl Directory {
[INFO] [stderr]    | -------------- associated items in this implementation
[INFO] [stderr] 29 |     // 新建目录
[INFO] [stderr] 30 |     pub fn new(inode_index: usize) -> Self {
[INFO] [stderr]    |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 39 |     pub fn rebuild_index_map(&mut self) {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 47 |     pub fn add(
[INFO] [stderr]    |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 68 |     pub fn remove(&mut self, name: &str) -> Option<usize> {
[INFO] [stderr]    |            ^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 79 |     pub fn find(&self, name: &str) -> Option<usize> {
[INFO] [stderr]    |            ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 86 |     pub fn list(&self) -> Vec<String> {
[INFO] [stderr]    |            ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 91 |     pub fn is_directory(&self, name: &str) -> Option<bool> {
[INFO] [stderr]    |            ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: enum `FileSystemError` is never used
[INFO] [stderr]  --> src/fs/error.rs:5:10
[INFO] [stderr]   |
[INFO] [stderr] 5 | pub enum FileSystemError {
[INFO] [stderr]   |          ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: type alias `Result` is never used
[INFO] [stderr]   --> src/fs/error.rs:56:10
[INFO] [stderr]    |
[INFO] [stderr] 56 | pub type Result<T> = std::result::Result<T, FileSystemError>;
[INFO] [stderr]    |          ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `new`, `alloc`, `free`, `is_used`, `load`, and `sync` are never used
[INFO] [stderr]    --> src/fs/inode_bitmap.rs:15:12
[INFO] [stderr]     |
[INFO] [stderr]  13 | impl InodeBitmap {
[INFO] [stderr]     | ---------------- associated items in this implementation
[INFO] [stderr]  14 |     // 创建一个新的 inode 位图（所有位清零 = 空闲）
[INFO] [stderr]  15 |     pub fn new(total_inodes: u64, start_block: u64) -> Self {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr]  26 |     pub fn alloc(&mut self) -> Option<u64> {
[INFO] [stderr]     |            ^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  42 |     pub fn free(&mut self, inode_index: u64) {
[INFO] [stderr]     |            ^^^^
[INFO] [stderr] ...
[INFO] [stderr]  57 |     pub fn is_used(&mut self, inode_index: u64) -> bool {
[INFO] [stderr]     |            ^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  97 |     pub fn load(disk: &mut FileDisk, start_block: u64, total_inodes: u64) -> Self {
[INFO] [stderr]     |            ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 122 |     pub fn sync(&self, disk: &mut FileDisk) -> std::io::Result<()> {
[INFO] [stderr]     |            ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `PTRS_PER_BLOCK` is never used
[INFO] [stderr]   --> src/fs/inode_table.rs:12:11
[INFO] [stderr]    |
[INFO] [stderr] 12 | pub const PTRS_PER_BLOCK: usize = 1024; // 每个间接块可以指向多少个数据块（假设每个指针4字节）
[INFO] [stderr]    |           ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple associated items are never used
[INFO] [stderr]    --> src/fs/inode_table.rs:29:12
[INFO] [stderr]     |
[INFO] [stderr]  28 | impl InodeTable {
[INFO] [stderr]     | --------------- associated items in this implementation
[INFO] [stderr]  29 |     pub fn new(start_block: u64, total_inodes: u64) -> Self {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr]  37 |     pub fn alloc_inode(
[INFO] [stderr]     |            ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  58 |     pub fn free_inode(&mut self, inode_bitmap: &mut InodeBitmap, inode_index: u64) {
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  63 |     pub fn get_inode(&self, index: u64) -> Option<&Inode> {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  67 |     pub fn get_inode_mut(&mut self, index: u64) -> Option<&mut Inode> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  71 |     pub fn sync(&self, disk: &mut FileDisk) -> std::io::Result<()> {
[INFO] [stderr]     |            ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 100 |     pub fn load(disk: &mut FileDisk, start_block: u64) -> std::io::Result<Self> {
[INFO] [stderr]     |            ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple associated items are never used
[INFO] [stderr]    --> src/fs/inode_table.rs:155:12
[INFO] [stderr]     |
[INFO] [stderr] 154 | impl Inode {
[INFO] [stderr]     | ---------- associated items in this implementation
[INFO] [stderr] 155 |     pub fn new(inode_type: InodeType, uid: u32, gid: u32, permissions: u16) -> Self {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 173 |     pub fn empty() -> Self {
[INFO] [stderr]     |            ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 192 |     pub fn touch(&mut self) {
[INFO] [stderr]     |            ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 199 |     pub fn inc_link(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 203 |     pub fn dec_link(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 210 |     pub fn add_block(&mut self, block_id: u64) -> Result<(), String> {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 226 |     pub fn block_count(&self) -> u64 {
[INFO] [stderr]     |            ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated function `new` is never used
[INFO] [stderr]   --> src/fs/super_block.rs:26:8
[INFO] [stderr]    |
[INFO] [stderr] 25 | impl SuperBlock {
[INFO] [stderr]    | --------------- associated function in this implementation
[INFO] [stderr] 26 |     fn new(total_inodes: u64) -> Self {
[INFO] [stderr]    |        ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `current_timestamp` is never used
[INFO] [stderr]  --> src/utils.rs:4:8
[INFO] [stderr]   |
[INFO] [stderr] 4 | pub fn current_timestamp() -> u64 {
[INFO] [stderr]   |        ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `generate_uuid` is never used
[INFO] [stderr]   --> src/utils.rs:12:8
[INFO] [stderr]    |
[INFO] [stderr] 12 | pub fn generate_uuid() -> String {
[INFO] [stderr]    |        ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: `file-system` (bin "file-system" test) generated 31 warnings (run `cargo fix --bin "file-system" -p file-system --tests` to apply 5 suggestions)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.15s
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/debug/deps/file_system-0e5bd810c8294b1d)
[INFO] [stdout] test disk::tests::test_file_disk_read_write ... FAILED
[INFO] [stdout] 
[INFO] [stdout] failures:
[INFO] [stdout] 
[INFO] [stdout] ---- disk::tests::test_file_disk_read_write stdout ----
[INFO] [stdout] 
[INFO] [stdout] thread 'disk::tests::test_file_disk_read_write' (25) panicked at src/disk/mod.rs:24:65:
[INFO] [stdout] called `Result::unwrap()` on an `Err` value: Os { code: 30, kind: ReadOnlyFilesystem, message: "Read-only file system" }
[INFO] [stdout] stack backtrace:
[INFO] [stdout]    0:     0x55de28e08822 - std::backtrace_rs::backtrace::libunwind::trace::h786de35fecf3582f
[INFO] [stdout]                                at /rustc/1ef7943ee607160a564655b6596f83670ef95df5/library/std/src/../../backtrace/src/backtrace/libunwind.rs:117:9
[INFO] [stdout]    1:     0x55de28e08822 - std::backtrace_rs::backtrace::trace_unsynchronized::h4a7da1a2a64387f1
[INFO] [stdout]                                at /rustc/1ef7943ee607160a564655b6596f83670ef95df5/library/std/src/../../backtrace/src/backtrace/mod.rs:66:14
[INFO] [stdout]    2:     0x55de28e08822 - std::sys::backtrace::_print_fmt::h6bd7d500070c788c
[INFO] [stdout]                                at /rustc/1ef7943ee607160a564655b6596f83670ef95df5/library/std/src/sys/backtrace.rs:66:9
[INFO] [stdout]    3:     0x55de28e08822 - <std::sys::backtrace::BacktraceLock::print::DisplayBacktrace as core::fmt::Display>::fmt::h6d82c1afff976903
[INFO] [stdout]                                at /rustc/1ef7943ee607160a564655b6596f83670ef95df5/library/std/src/sys/backtrace.rs:39:26
[INFO] [stdout]    4:     0x55de28e1894f - core::fmt::rt::Argument::fmt::hc4ce6d643d397690
[INFO] [stdout]                                at /rustc/1ef7943ee607160a564655b6596f83670ef95df5/library/core/src/fmt/rt.rs:173:76
[INFO] [stdout]    5:     0x55de28e1894f - core::fmt::write::hb1e7ca88b6a3936e
[INFO] [stdout]                                at /rustc/1ef7943ee607160a564655b6596f83670ef95df5/library/core/src/fmt/mod.rs:1469:25
[INFO] [stdout]    6:     0x55de28dd59a3 - std::io::default_write_fmt::haffd49d96f1984a8
[INFO] [stdout]                                at /rustc/1ef7943ee607160a564655b6596f83670ef95df5/library/std/src/io/mod.rs:639:11
[INFO] [stdout]    7:     0x55de28dd59a3 - std::io::Write::write_fmt::h027871c57cf57c01
[INFO] [stdout]                                at /rustc/1ef7943ee607160a564655b6596f83670ef95df5/library/std/src/io/mod.rs:1954:13
[INFO] [stdout]    8:     0x55de28de18f2 - std::sys::backtrace::BacktraceLock::print::ha2430613ee79d059
[INFO] [stdout]                                at /rustc/1ef7943ee607160a564655b6596f83670ef95df5/library/std/src/sys/backtrace.rs:42:9
[INFO] [stdout]    9:     0x55de28de64af - std::panicking::default_hook::{{closure}}::hdbd2db9e5c303cf6
[INFO] [stdout]                                at /rustc/1ef7943ee607160a564655b6596f83670ef95df5/library/std/src/panicking.rs:301:27
[INFO] [stdout]   10:     0x55de28de6341 - std::panicking::default_hook::hed93c70cba5fdcf0
[INFO] [stdout]                                at /rustc/1ef7943ee607160a564655b6596f83670ef95df5/library/std/src/panicking.rs:325:9
[INFO] [stdout]   11:     0x55de28da1c4e - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::hd0ee8b569efc6a07
[INFO] [stdout]                                at /rustc/1ef7943ee607160a564655b6596f83670ef95df5/library/alloc/src/boxed.rs:2099:9
[INFO] [stdout]   12:     0x55de28da1c4e - test::test_main_with_exit_callback::{{closure}}::hf10864b576ecd15d
[INFO] [stdout]                                at /rustc/1ef7943ee607160a564655b6596f83670ef95df5/library/test/src/lib.rs:145:21
[INFO] [stdout]   13:     0x55de28de6abf - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::h3a55ca34534c0d00
[INFO] [stdout]                                at /rustc/1ef7943ee607160a564655b6596f83670ef95df5/library/alloc/src/boxed.rs:2099:9
[INFO] [stdout]   14:     0x55de28de6abf - std::panicking::panic_with_hook::h3862d766c2cec19b
[INFO] [stdout]                                at /rustc/1ef7943ee607160a564655b6596f83670ef95df5/library/std/src/panicking.rs:842:13
[INFO] [stdout]   15:     0x55de28de691a - std::panicking::panic_handler::{{closure}}::hb95eb402b5e28ee1
[INFO] [stdout]                                at /rustc/1ef7943ee607160a564655b6596f83670ef95df5/library/std/src/panicking.rs:707:13
[INFO] [stdout]   16:     0x55de28de1a29 - std::sys::backtrace::__rust_end_short_backtrace::hf73a26dc1835d85a
[INFO] [stdout]                                at /rustc/1ef7943ee607160a564655b6596f83670ef95df5/library/std/src/sys/backtrace.rs:174:18
[INFO] [stdout]   17:     0x55de28dca0fd - __rustc[6ed5915ee467787]::rust_begin_unwind
[INFO] [stdout]                                at /rustc/1ef7943ee607160a564655b6596f83670ef95df5/library/std/src/panicking.rs:698:5
[INFO] [stdout]   18:     0x55de28e204e0 - core::panicking::panic_fmt::h3454303eb8e6f7cd
[INFO] [stdout]                                at /rustc/1ef7943ee607160a564655b6596f83670ef95df5/library/core/src/panicking.rs:80:14
[INFO] [stdout]   19:     0x55de28e1fc36 - core::result::unwrap_failed::h2380020e6daeb464
[INFO] [stdout]                                at /rustc/1ef7943ee607160a564655b6596f83670ef95df5/library/core/src/result.rs:1862:5
[INFO] [stdout]   20:     0x55de28d70d9b - core::result::Result<T,E>::unwrap::h4bf734f331921e59
[INFO] [stdout]                                at /rustc/1ef7943ee607160a564655b6596f83670ef95df5/library/core/src/result.rs:1233:23
[INFO] [stdout]   21:     0x55de28d70d9b - file_system::disk::tests::test_file_disk_read_write::h44f70596a3bc818a
[INFO] [stdout]                                at /opt/rustwide/workdir/src/disk/mod.rs:24:65
[INFO] [stdout]   22:     0x55de28d713c7 - file_system::disk::tests::test_file_disk_read_write::{{closure}}::h42a87b2f686e890b
[INFO] [stdout]                                at /opt/rustwide/workdir/src/disk/mod.rs:19:35
[INFO] [stdout]   23:     0x55de28d7eac6 - core::ops::function::FnOnce::call_once::h106e3a613744178b
[INFO] [stdout]                                at /rustc/1ef7943ee607160a564655b6596f83670ef95df5/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   24:     0x55de28da1a2b - core::ops::function::FnOnce::call_once::ha729ee35d2fab541
[INFO] [stdout]                                at /rustc/1ef7943ee607160a564655b6596f83670ef95df5/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   25:     0x55de28da1a2b - test::__rust_begin_short_backtrace::ha40f4db8207e1111
[INFO] [stdout]                                at /rustc/1ef7943ee607160a564655b6596f83670ef95df5/library/test/src/lib.rs:663:18
[INFO] [stdout]   26:     0x55de28db5aad - test::run_test_in_process::{{closure}}::hc1b77cda5d44f0f3
[INFO] [stdout]                                at /rustc/1ef7943ee607160a564655b6596f83670ef95df5/library/test/src/lib.rs:686:74
[INFO] [stdout]   27:     0x55de28db5aad - <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once::h1dbea1de64785521
[INFO] [stdout]                                at /rustc/1ef7943ee607160a564655b6596f83670ef95df5/library/core/src/panic/unwind_safe.rs:274:9
[INFO] [stdout]   28:     0x55de28db5aad - std::panicking::catch_unwind::do_call::hd5febe9affd5a1b3
[INFO] [stdout]                                at /rustc/1ef7943ee607160a564655b6596f83670ef95df5/library/std/src/panicking.rs:590:40
[INFO] [stdout]   29:     0x55de28db5aad - std::panicking::catch_unwind::h51ea89627559b6f4
[INFO] [stdout]                                at /rustc/1ef7943ee607160a564655b6596f83670ef95df5/library/std/src/panicking.rs:553:19
[INFO] [stdout]   30:     0x55de28db5aad - std::panic::catch_unwind::hb8b8c2367cae3d66
[INFO] [stdout]                                at /rustc/1ef7943ee607160a564655b6596f83670ef95df5/library/std/src/panic.rs:359:14
[INFO] [stdout]   31:     0x55de28db5aad - test::run_test_in_process::ha5b55801407ea100
[INFO] [stdout]                                at /rustc/1ef7943ee607160a564655b6596f83670ef95df5/library/test/src/lib.rs:686:27
[INFO] [stdout]   32:     0x55de28db5aad - test::run_test::{{closure}}::h0b9d4072b527abf5
[INFO] [stdout]                                at /rustc/1ef7943ee607160a564655b6596f83670ef95df5/library/test/src/lib.rs:607:43
[INFO] [stdout]   33:     0x55de28d8efc4 - test::run_test::{{closure}}::hb1056b5731205822
[INFO] [stdout]                                at /rustc/1ef7943ee607160a564655b6596f83670ef95df5/library/test/src/lib.rs:637:41
[INFO] [stdout]   34:     0x55de28d8efc4 - std::sys::backtrace::__rust_begin_short_backtrace::hb61ff5a34023c7ef
[INFO] [stdout]                                at /rustc/1ef7943ee607160a564655b6596f83670ef95df5/library/std/src/sys/backtrace.rs:158:18
[INFO] [stdout]   35:     0x55de28d928fa - std::thread::Builder::spawn_unchecked_::{{closure}}::{{closure}}::hb0a83c0e8b353cff
[INFO] [stdout]                                at /rustc/1ef7943ee607160a564655b6596f83670ef95df5/library/std/src/thread/mod.rs:562:17
[INFO] [stdout]   36:     0x55de28d928fa - <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once::hb4f32cb008535298
[INFO] [stdout]                                at /rustc/1ef7943ee607160a564655b6596f83670ef95df5/library/core/src/panic/unwind_safe.rs:274:9
[INFO] [stdout]   37:     0x55de28d928fa - std::panicking::catch_unwind::do_call::h16d110e4fc35789a
[INFO] [stdout]                                at /rustc/1ef7943ee607160a564655b6596f83670ef95df5/library/std/src/panicking.rs:590:40
[INFO] [stdout]   38:     0x55de28d928fa - std::panicking::catch_unwind::hea9118f355699c4b
[INFO] [stdout]                                at /rustc/1ef7943ee607160a564655b6596f83670ef95df5/library/std/src/panicking.rs:553:19
[INFO] [stdout]   39:     0x55de28d928fa - std::panic::catch_unwind::hf4b3c2a06d3f42f5
[INFO] [stdout]                                at /rustc/1ef7943ee607160a564655b6596f83670ef95df5/library/std/src/panic.rs:359:14
[INFO] [stdout]   40:     0x55de28d928fa - std::thread::Builder::spawn_unchecked_::{{closure}}::h3f4cb733a52d53d5
[INFO] [stdout]                                at /rustc/1ef7943ee607160a564655b6596f83670ef95df5/library/std/src/thread/mod.rs:560:30
[INFO] [stdout]   41:     0x55de28d928fa - core::ops::function::FnOnce::call_once{{vtable.shim}}::h4052f0967b37caeb
[INFO] [stdout]                                at /rustc/1ef7943ee607160a564655b6596f83670ef95df5/library/core/src/ops/function.rs:250:5
[INFO] [stdout]   42:     0x55de28ddce2f - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h7ec433abd3f148b4
[INFO] [stdout]                                at /rustc/1ef7943ee607160a564655b6596f83670ef95df5/library/alloc/src/boxed.rs:2085:9
[INFO] [stdout]   43:     0x55de28ddce2f - std::sys::thread::unix::Thread::new::thread_start::he514622d3d7ba65c
[INFO] [stdout]                                at /rustc/1ef7943ee607160a564655b6596f83670ef95df5/library/std/src/sys/thread/unix.rs:124:17
[INFO] [stdout]   44:     0x79311f026aa4 - <unknown>
[INFO] [stdout]   45:     0x79311f0b3a64 - clone
[INFO] [stdout]   46:                0x0 - <unknown>
[INFO] [stdout] 
[INFO] [stderr] error: test failed, to rerun pass `--bin file-system`
[INFO] [stdout] 
[INFO] [stdout] failures:
[INFO] [stdout]     disk::tests::test_file_disk_read_write
[INFO] [stdout] 
[INFO] [stdout] test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.07s
[INFO] [stdout] 
[INFO] running `Command { std: "docker" "inspect" "edc6ffaaa1db526f3bce21e89fdeaca5d27f36ecdde243551e978a4be99d51af", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "edc6ffaaa1db526f3bce21e89fdeaca5d27f36ecdde243551e978a4be99d51af", kill_on_drop: false }`
[INFO] [stdout] edc6ffaaa1db526f3bce21e89fdeaca5d27f36ecdde243551e978a4be99d51af
