[INFO] cloning repository https://github.com/c20h30o2/lwext4_core
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/c20h30o2/lwext4_core" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fc20h30o2%2Flwext4_core", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fc20h30o2%2Flwext4_core'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 94eb56af200076a8b6e92b2287476f3e4b93e8e9
[INFO] testing c20h30o2/lwext4_core against 1.94.0 for beta-1.95-1
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fc20h30o2%2Flwext4_core" "/workspace/builds/worker-5-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-5-tc1/source'...
[INFO] [stderr] done.
[INFO] removed /workspace/builds/worker-5-tc1/source/rust-toolchain.toml
[INFO] started tweaking git repo https://github.com/c20h30o2/lwext4_core
[INFO] finished tweaking git repo https://github.com/c20h30o2/lwext4_core
[INFO] tweaked toml for git repo https://github.com/c20h30o2/lwext4_core written to /workspace/builds/worker-5-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/c20h30o2/lwext4_core on toolchain 1.94.0
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.94.0" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/c20h30o2/lwext4_core 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" "+1.94.0" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-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:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+1.94.0" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 753eff786cede98d3c0220e40c9d26e5bd8dd01b4c5f499c0b21d5bf4e5fca28
[INFO] running `Command { std: "docker" "start" "-a" "753eff786cede98d3c0220e40c9d26e5bd8dd01b4c5f499c0b21d5bf4e5fca28", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "753eff786cede98d3c0220e40c9d26e5bd8dd01b4c5f499c0b21d5bf4e5fca28", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "753eff786cede98d3c0220e40c9d26e5bd8dd01b4c5f499c0b21d5bf4e5fca28", kill_on_drop: false }`
[INFO] [stdout] 753eff786cede98d3c0220e40c9d26e5bd8dd01b4c5f499c0b21d5bf4e5fca28
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-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=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-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:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+1.94.0" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 15b5c5cf18c16dac2bd0d0a47b9b63305daf3bba26c258310a70b3fdbd33995a
[INFO] running `Command { std: "docker" "start" "-a" "15b5c5cf18c16dac2bd0d0a47b9b63305daf3bba26c258310a70b3fdbd33995a", kill_on_drop: false }`
[INFO] [stderr]    Compiling crc32fast v1.5.0
[INFO] [stderr]    Compiling bitflags v2.10.0
[INFO] [stderr]    Compiling lru v0.12.5
[INFO] [stderr]    Compiling lwext4_core v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `alloc::vec`
[INFO] [stdout]  --> src/block/device.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use alloc::vec;
[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: `alloc::vec`
[INFO] [stdout]  --> src/superblock/write.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use alloc::vec;
[INFO] [stdout]   |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `alloc::vec`
[INFO] [stdout]   --> src/block_group/write.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | use alloc::vec;
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Block` and `consts::*`
[INFO] [stdout]   --> src/extent/merge.rs:25:13
[INFO] [stdout]    |
[INFO] [stdout] 25 |     block::{Block, BlockDevice},
[INFO] [stdout]    |             ^^^^^
[INFO] [stdout] 26 |     consts::*,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ext4_ext_pblock`
[INFO] [stdout]   --> src/extent/merge.rs:33:15
[INFO] [stdout]    |
[INFO] [stdout] 33 |     helpers::{ext4_ext_pblock, ext4_ext_store_pblock},
[INFO] [stdout]    |               ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ext4_ext_pblock` and `ext4_idx_pblock`
[INFO] [stdout]   --> src/extent/remove.rs:33:15
[INFO] [stdout]    |
[INFO] [stdout] 33 |     helpers::{ext4_ext_pblock, ext4_ext_store_pblock, ext4_idx_pblock},
[INFO] [stdout]    |               ^^^^^^^^^^^^^^^                         ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `alloc::vec`
[INFO] [stdout]   --> src/extent/tree.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | use alloc::vec;
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `balloc::BlockAllocator`
[INFO] [stdout]   --> src/extent/unwritten.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 28 |     balloc::BlockAllocator,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ExtentPath`, `ext4_ext_pblock`, and `ext4_ext_store_pblock`
[INFO] [stdout]   --> src/extent/unwritten_multilevel.rs:25:15
[INFO] [stdout]    |
[INFO] [stdout] 25 |     helpers::{ext4_ext_pblock, ext4_ext_store_pblock},
[INFO] [stdout]    |               ^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 31 |     write::{ExtentNodeType, ExtentPath, ExtentWriter},
[INFO] [stdout]    |                             ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `alloc::vec::Vec`
[INFO] [stdout]   --> src/extent/unwritten_multilevel.rs:34:5
[INFO] [stdout]    |
[INFO] [stdout] 34 | use alloc::vec::Vec;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `alloc::vec::Vec`
[INFO] [stdout]   --> src/extent/verify.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 | use alloc::vec::Vec;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `consts::*`
[INFO] [stdout]   --> src/extent/write.rs:32:5
[INFO] [stdout]    |
[INFO] [stdout] 32 |     consts::*,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `metadata-csum`
[INFO] [stdout]    --> src/dir/checksum.rs:147:7
[INFO] [stdout]     |
[INFO] [stdout] 147 | #[cfg(feature = "metadata-csum")]
[INFO] [stdout]     |       ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `c-api`, `default`, and `std`
[INFO] [stdout]     = help: consider adding `metadata-csum` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout]     = note: `#[warn(unexpected_cfgs)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `metadata-csum`
[INFO] [stdout]    --> src/dir/checksum.rs:173:11
[INFO] [stdout]     |
[INFO] [stdout] 173 | #[cfg(not(feature = "metadata-csum"))]
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `c-api`, `default`, and `std`
[INFO] [stdout]     = help: consider adding `metadata-csum` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `metadata-csum`
[INFO] [stdout]    --> src/dir/checksum.rs:192:7
[INFO] [stdout]     |
[INFO] [stdout] 192 | #[cfg(feature = "metadata-csum")]
[INFO] [stdout]     |       ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `c-api`, `default`, and `std`
[INFO] [stdout]     = help: consider adding `metadata-csum` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `metadata-csum`
[INFO] [stdout]    --> src/dir/checksum.rs:223:11
[INFO] [stdout]     |
[INFO] [stdout] 223 | #[cfg(not(feature = "metadata-csum"))]
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `c-api`, `default`, and `std`
[INFO] [stdout]     = help: consider adding `metadata-csum` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `BlockDev` and `superblock::Superblock`
[INFO] [stdout]   --> src/dir/iterator.rs:15:20
[INFO] [stdout]    |
[INFO] [stdout] 15 |     block::{Block, BlockDev, BlockDevice},
[INFO] [stdout]    |                    ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 19 |     superblock::Superblock,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `BlockDev`
[INFO] [stdout]   --> src/dir/htree.rs:38:20
[INFO] [stdout]    |
[INFO] [stdout] 38 |     block::{Block, BlockDev, BlockDevice},
[INFO] [stdout]    |                    ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ext4_dir_idx_node`
[INFO] [stdout]    --> src/dir/htree.rs:574:54
[INFO] [stdout]     |
[INFO] [stdout] 574 | use crate::types::{ext4_dir_en, ext4_dir_entry_tail, ext4_dir_idx_node, ext4_fake_dir_entry};
[INFO] [stdout]     |                                                      ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `get_tail_mut`
[INFO] [stdout]    --> src/dir/htree.rs:576:40
[INFO] [stdout]     |
[INFO] [stdout] 576 | use super::checksum::{init_entry_tail, get_tail_mut};
[INFO] [stdout]     |                                        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `BlockDev`
[INFO] [stdout]   --> src/dir/write.rs:34:20
[INFO] [stdout]    |
[INFO] [stdout] 34 |     block::{Block, BlockDev, BlockDevice},
[INFO] [stdout]    |                    ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `alloc::vec::Vec`
[INFO] [stdout]   --> src/dir/write.rs:42:5
[INFO] [stdout]    |
[INFO] [stdout] 42 | use alloc::vec::Vec;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `metadata-csum`
[INFO] [stdout]    --> src/dir/write.rs:966:11
[INFO] [stdout]     |
[INFO] [stdout] 966 |     #[cfg(feature = "metadata-csum")]
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `c-api`, `default`, and `std`
[INFO] [stdout]     = help: consider adding `metadata-csum` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `metadata-csum`
[INFO] [stdout]    --> src/dir/write.rs:994:15
[INFO] [stdout]     |
[INFO] [stdout] 994 |     #[cfg(not(feature = "metadata-csum"))]
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `c-api`, `default`, and `std`
[INFO] [stdout]     = help: consider adding `metadata-csum` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `self`
[INFO] [stdout]     --> src/fs/filesystem.rs:1022:45
[INFO] [stdout]      |
[INFO] [stdout] 1022 |         use crate::{consts::*, dir::write::{self, EXT4_DE_REG_FILE}, extent::tree_init};
[INFO] [stdout]      |                                             ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `self`
[INFO] [stdout]     --> src/fs/filesystem.rs:1093:45
[INFO] [stdout]      |
[INFO] [stdout] 1093 |         use crate::{consts::*, dir::write::{self, EXT4_DE_DIR}, extent::tree_init};
[INFO] [stdout]      |                                             ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `extent::ExtentTree`
[INFO] [stdout]  --> src/fs/file.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 |     extent::ExtentTree,
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `block_group::BlockGroup`
[INFO] [stdout]  --> src/ialloc/alloc.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 |     block_group::BlockGroup,
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ErrorKind` and `block_group::BlockGroup`
[INFO] [stdout]  --> src/ialloc/free.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 |     block_group::BlockGroup,
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 7 |     error::{Error, ErrorKind, Result},
[INFO] [stdout]   |                    ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `metadata-csum`
[INFO] [stdout]   --> src/ialloc/checksum.rs:23:7
[INFO] [stdout]    |
[INFO] [stdout] 23 | #[cfg(feature = "metadata-csum")]
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `c-api`, `default`, and `std`
[INFO] [stdout]    = help: consider adding `metadata-csum` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `metadata-csum`
[INFO] [stdout]   --> src/ialloc/checksum.rs:42:11
[INFO] [stdout]    |
[INFO] [stdout] 42 | #[cfg(not(feature = "metadata-csum"))]
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `c-api`, `default`, and `std`
[INFO] [stdout]    = help: consider adding `metadata-csum` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `metadata-csum`
[INFO] [stdout]   --> src/ialloc/checksum.rs:87:7
[INFO] [stdout]    |
[INFO] [stdout] 87 | #[cfg(feature = "metadata-csum")]
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `c-api`, `default`, and `std`
[INFO] [stdout]    = help: consider adding `metadata-csum` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `metadata-csum`
[INFO] [stdout]    --> src/ialloc/checksum.rs:113:11
[INFO] [stdout]     |
[INFO] [stdout] 113 | #[cfg(not(feature = "metadata-csum"))]
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `c-api`, `default`, and `std`
[INFO] [stdout]     = help: consider adding `metadata-csum` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `metadata-csum`
[INFO] [stdout]   --> src/balloc/checksum.rs:23:7
[INFO] [stdout]    |
[INFO] [stdout] 23 | #[cfg(feature = "metadata-csum")]
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `c-api`, `default`, and `std`
[INFO] [stdout]    = help: consider adding `metadata-csum` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `metadata-csum`
[INFO] [stdout]   --> src/balloc/checksum.rs:42:11
[INFO] [stdout]    |
[INFO] [stdout] 42 | #[cfg(not(feature = "metadata-csum"))]
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `c-api`, `default`, and `std`
[INFO] [stdout]    = help: consider adding `metadata-csum` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `metadata-csum`
[INFO] [stdout]   --> src/balloc/checksum.rs:87:7
[INFO] [stdout]    |
[INFO] [stdout] 87 | #[cfg(feature = "metadata-csum")]
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `c-api`, `default`, and `std`
[INFO] [stdout]    = help: consider adding `metadata-csum` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `metadata-csum`
[INFO] [stdout]    --> src/balloc/checksum.rs:113:11
[INFO] [stdout]     |
[INFO] [stdout] 113 | #[cfg(not(feature = "metadata-csum"))]
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `c-api`, `default`, and `std`
[INFO] [stdout]     = help: consider adding `metadata-csum` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `block_group::BlockGroup`
[INFO] [stdout]  --> src/balloc/free.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 |     block_group::BlockGroup,
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `block_group::BlockGroup`
[INFO] [stdout]  --> src/balloc/alloc.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 |     block_group::BlockGroup,
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `BlockGroupRef`
[INFO] [stdout]  --> src/balloc/fs_integration.rs:9:10
[INFO] [stdout]   |
[INFO] [stdout] 9 |     fs::{BlockGroupRef, InodeRef},
[INFO] [stdout]   |          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ErrorKind`
[INFO] [stdout]  --> src/journal/jbd_fs.rs:9:20
[INFO] [stdout]   |
[INFO] [stdout] 9 |     error::{Error, ErrorKind, Result},
[INFO] [stdout]   |                    ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::error::Result`
[INFO] [stdout]  --> src/journal/jbd_journal.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::error::Result;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `types::*`
[INFO] [stdout]  --> src/journal/jbd_trans.rs:5:21
[INFO] [stdout]   |
[INFO] [stdout] 5 | use super::{JbdBuf, types::*};
[INFO] [stdout]   |                     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `BlockDevice`, `Block`, and `error::Result`
[INFO] [stdout]  --> src/journal/jbd_buf.rs:6:13
[INFO] [stdout]   |
[INFO] [stdout] 6 |     block::{Block, BlockDevice},
[INFO] [stdout]   |             ^^^^^  ^^^^^^^^^^^
[INFO] [stdout] 7 |     error::Result,
[INFO] [stdout]   |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `alloc::collections::VecDeque`
[INFO] [stdout]  --> src/journal/jbd_buf.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use alloc::collections::VecDeque;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `JournalError` and `checksum`
[INFO] [stdout]  --> src/journal/recovery.rs:5:13
[INFO] [stdout]   |
[INFO] [stdout] 5 | use super::{checksum, types::*, JbdFs, JournalError};
[INFO] [stdout]   |             ^^^^^^^^                   ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ErrorKind`
[INFO] [stdout]  --> src/journal/recovery.rs:8:20
[INFO] [stdout]   |
[INFO] [stdout] 8 |     error::{Error, ErrorKind, Result},
[INFO] [stdout]   |                    ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ErrorKind`
[INFO] [stdout]  --> src/journal/commit.rs:8:20
[INFO] [stdout]   |
[INFO] [stdout] 8 |     error::{Error, ErrorKind, Result},
[INFO] [stdout]   |                    ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `JournalError`
[INFO] [stdout]  --> src/journal/checkpoint.rs:5:52
[INFO] [stdout]   |
[INFO] [stdout] 5 | use super::{types::*, JbdFs, JbdJournal, JbdTrans, JournalError};
[INFO] [stdout]   |                                                    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::error::Result`
[INFO] [stdout]  --> src/journal/checksum.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::error::Result;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around assigned value
[INFO] [stdout]    --> src/xattr/search.rs:249:15
[INFO] [stdout]     |
[INFO] [stdout] 249 |     let len = ((name_len + EXT4_XATTR_ROUND as usize + size_of::<ext4_xattr_entry>())
[INFO] [stdout]     |               ^
[INFO] [stdout] 250 |         & !(EXT4_XATTR_ROUND as usize));
[INFO] [stdout]     |                                       ^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 249 ~     let len = (name_len + EXT4_XATTR_ROUND as usize + size_of::<ext4_xattr_entry>())
[INFO] [stdout] 250 ~         & !(EXT4_XATTR_ROUND as usize);
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around assigned value
[INFO] [stdout]    --> src/xattr/ibody.rs:261:23
[INFO] [stdout]     |
[INFO] [stdout] 261 |             let len = ((entry_name_len + EXT4_XATTR_ROUND as usize + size_of::<ext4_xattr_entry>())
[INFO] [stdout]     |                       ^
[INFO] [stdout] 262 |                 & !(EXT4_XATTR_ROUND as usize));
[INFO] [stdout]     |                                               ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 261 ~             let len = (entry_name_len + EXT4_XATTR_ROUND as usize + size_of::<ext4_xattr_entry>())
[INFO] [stdout] 262 ~                 & !(EXT4_XATTR_ROUND as usize);
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around assigned value
[INFO] [stdout]    --> src/xattr/block.rs:142:25
[INFO] [stdout]     |
[INFO] [stdout] 142 |         let entry_len = ((name_len + EXT4_XATTR_ROUND as usize + size_of::<ext4_xattr_entry>())
[INFO] [stdout]     |                         ^
[INFO] [stdout] 143 |             & !(EXT4_XATTR_ROUND as usize));
[INFO] [stdout]     |                                           ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 142 ~         let entry_len = (name_len + EXT4_XATTR_ROUND as usize + size_of::<ext4_xattr_entry>())
[INFO] [stdout] 143 ~             & !(EXT4_XATTR_ROUND as usize);
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around assigned value
[INFO] [stdout]    --> src/xattr/block.rs:314:25
[INFO] [stdout]     |
[INFO] [stdout] 314 |         let entry_len = ((name_len + EXT4_XATTR_ROUND as usize + size_of::<ext4_xattr_entry>())
[INFO] [stdout]     |                         ^
[INFO] [stdout] 315 |             & !(EXT4_XATTR_ROUND as usize));
[INFO] [stdout]     |                                           ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 314 ~         let entry_len = (name_len + EXT4_XATTR_ROUND as usize + size_of::<ext4_xattr_entry>())
[INFO] [stdout] 315 ~             & !(EXT4_XATTR_ROUND as usize);
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around block return value
[INFO] [stdout]   --> src/xattr/write.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 19 |     ((name_len + EXT4_XATTR_ROUND as usize + size_of::<ext4_xattr_entry>())
[INFO] [stdout]    |     ^
[INFO] [stdout] 20 |         & !(EXT4_XATTR_ROUND as usize))
[INFO] [stdout]    |                                       ^
[INFO] [stdout]    |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 19 ~     (name_len + EXT4_XATTR_ROUND as usize + size_of::<ext4_xattr_entry>())
[INFO] [stdout] 20 ~         & !(EXT4_XATTR_ROUND as usize)
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around block return value
[INFO] [stdout]   --> src/xattr/write.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 28 |     ((value_len + EXT4_XATTR_ROUND as usize) & !(EXT4_XATTR_ROUND as usize))
[INFO] [stdout]    |     ^                                                                      ^
[INFO] [stdout]    |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 28 -     ((value_len + EXT4_XATTR_ROUND as usize) & !(EXT4_XATTR_ROUND as usize))
[INFO] [stdout] 28 +     (value_len + EXT4_XATTR_ROUND as usize) & !(EXT4_XATTR_ROUND as usize)
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `balloc` and `superblock::Superblock`
[INFO] [stdout]   --> src/xattr/api.rs:44:5
[INFO] [stdout]    |
[INFO] [stdout] 44 |     superblock::Superblock,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 45 |     balloc,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `super::prefix`
[INFO] [stdout]   --> src/xattr/api.rs:48:5
[INFO] [stdout]    |
[INFO] [stdout] 48 | use super::prefix;
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around assigned value
[INFO] [stdout]    --> src/xattr/api.rs:151:33
[INFO] [stdout]     |
[INFO] [stdout] 151 | ...   let entry_len = ((name_len + crate::consts::EXT4_XATTR_ROUND as usize + core::mem::size_of::<crate::types::ext4_xattr_entry>())
[INFO] [stdout]     |                       ^
[INFO] [stdout] 152 | ...       & !(crate::consts::EXT4_XATTR_ROUND as usize));
[INFO] [stdout]     |                                                        ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 151 ~                 let entry_len = (name_len + crate::consts::EXT4_XATTR_ROUND as usize + core::mem::size_of::<crate::types::ext4_xattr_entry>())
[INFO] [stdout] 152 ~                     & !(crate::consts::EXT4_XATTR_ROUND as usize);
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `dir::entry::DirIterator`: Use `iterator` module instead
[INFO] [stdout]   --> src/dir/lookup.rs:13:19
[INFO] [stdout]    |
[INFO] [stdout] 13 | use super::entry::DirIterator;
[INFO] [stdout]    |                   ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(deprecated)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `dir::entry::DirIterator`: Use `iterator` module instead
[INFO] [stdout]   --> src/dir/lookup.rs:40:24
[INFO] [stdout]    |
[INFO] [stdout] 40 |         let mut iter = DirIterator::new(self.bdev, self.sb, dir_inode)?;
[INFO] [stdout]    |                        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `dir::entry::DirIterator::<'a, D>::new`: Use `iterator` module instead
[INFO] [stdout]   --> src/dir/lookup.rs:40:37
[INFO] [stdout]    |
[INFO] [stdout] 40 |         let mut iter = DirIterator::new(self.bdev, self.sb, dir_inode)?;
[INFO] [stdout]    |                                     ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `dir::entry::DirIterator::<'a, D>::next_entry`: Use `iterator` module instead
[INFO] [stdout]   --> src/dir/lookup.rs:42:38
[INFO] [stdout]    |
[INFO] [stdout] 42 |         while let Some(entry) = iter.next_entry()? {
[INFO] [stdout]    |                                      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `dir::entry::DirEntry::name`: Use `iterator` module instead
[INFO] [stdout]   --> src/dir/lookup.rs:43:16
[INFO] [stdout]    |
[INFO] [stdout] 43 |             if entry.name == name {
[INFO] [stdout]    |                ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `dir::entry::DirEntry::inode`: Use `iterator` module instead
[INFO] [stdout]   --> src/dir/lookup.rs:44:32
[INFO] [stdout]    |
[INFO] [stdout] 44 |                 return Ok(Some(entry.inode));
[INFO] [stdout]    |                                ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `depth`
[INFO] [stdout]    --> src/extent/remove.rs:174:10
[INFO] [stdout]     |
[INFO] [stdout] 174 |     let (depth, root_is_leaf) = inode_ref.with_inode(|inode| -> Result<(u16, bool)> {
[INFO] [stdout]     |          ^^^^^ help: if this is intentional, prefix it with an underscore: `_depth`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `allocator`
[INFO] [stdout]    --> src/extent/remove.rs:462:5
[INFO] [stdout]     |
[INFO] [stdout] 462 |     allocator: &mut BlockAllocator,
[INFO] [stdout]     |     ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_allocator`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `depth`
[INFO] [stdout]   --> src/extent/split.rs:76:9
[INFO] [stdout]    |
[INFO] [stdout] 76 |     let depth = node.depth;
[INFO] [stdout]    |         ^^^^^ help: if this is intentional, prefix it with an underscore: `_depth`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `depth`
[INFO] [stdout]    --> src/extent/split.rs:139:9
[INFO] [stdout]     |
[INFO] [stdout] 139 |     let depth = node.depth;
[INFO] [stdout]     |         ^^^^^ help: if this is intentional, prefix it with an underscore: `_depth`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `leaf_depth`
[INFO] [stdout]   --> src/extent/unwritten_multilevel.rs:83:9
[INFO] [stdout]    |
[INFO] [stdout] 83 |     let leaf_depth = leaf.depth;
[INFO] [stdout]    |         ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_leaf_depth`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ee_start`
[INFO] [stdout]   --> src/extent/unwritten_multilevel.rs:94:28
[INFO] [stdout]    |
[INFO] [stdout] 94 |     let (ee_block, ee_len, ee_start, _was_unwritten) = extent_info;
[INFO] [stdout]    |                            ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_ee_start`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `block_size`
[INFO] [stdout]    --> src/extent/unwritten_multilevel.rs:209:5
[INFO] [stdout]     |
[INFO] [stdout] 209 |     block_size: u32,
[INFO] [stdout]     |     ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_block_size`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ee_start`
[INFO] [stdout]    --> src/extent/unwritten_multilevel.rs:384:45
[INFO] [stdout]     |
[INFO] [stdout] 384 |         let (extent_idx, (ee_block, ee_len, ee_start, was_unwritten)) =
[INFO] [stdout]     |                                             ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_ee_start`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `pblock`
[INFO] [stdout]   --> src/extent/verify.rs:83:5
[INFO] [stdout]    |
[INFO] [stdout] 83 |     pblock: u64,
[INFO] [stdout]    |     ^^^^^^ help: if this is intentional, prefix it with an underscore: `_pblock`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `block_size`
[INFO] [stdout]    --> src/extent/write.rs:733:13
[INFO] [stdout]     |
[INFO] [stdout] 733 |         let block_size = inode_ref.bdev().block_size();
[INFO] [stdout]     |             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_block_size`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `depth`
[INFO] [stdout]     --> src/extent/write.rs:1392:22
[INFO] [stdout]      |
[INFO] [stdout] 1392 |     let (leaf_block, depth) = inode_ref.with_inode(|inode| -> Result<(u64, u16)> {
[INFO] [stdout]      |                      ^^^^^ help: if this is intentional, prefix it with an underscore: `_depth`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `fake_entry`
[INFO] [stdout]    --> src/dir/htree.rs:284:21
[INFO] [stdout]     |
[INFO] [stdout] 284 |                 let fake_entry = unsafe { &*(data.as_ptr() as *const crate::types::ext4_fake_dir_entry) };
[INFO] [stdout]     |                     ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_fake_entry`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `block_size`
[INFO] [stdout]    --> src/dir/htree.rs:239:9
[INFO] [stdout]     |
[INFO] [stdout] 239 |     let block_size = inode_ref.sb().block_size();
[INFO] [stdout]     |         ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_block_size`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `fake_entry`
[INFO] [stdout]    --> src/dir/htree.rs:417:21
[INFO] [stdout]     |
[INFO] [stdout] 417 |                 let fake_entry = unsafe { &*(data.as_ptr() as *const crate::types::ext4_fake_dir_entry) };
[INFO] [stdout]     |                     ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_fake_entry`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `block_size`
[INFO] [stdout]    --> src/dir/htree.rs:373:9
[INFO] [stdout]     |
[INFO] [stdout] 373 |     let block_size = inode_ref.sb().block_size();
[INFO] [stdout]     |         ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_block_size`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `leaf_block`
[INFO] [stdout]    --> src/dir/htree.rs:523:9
[INFO] [stdout]     |
[INFO] [stdout] 523 |     let leaf_block = get_leaf_block(inode_ref, &hash_info)?;
[INFO] [stdout]     |         ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_leaf_block`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `position_in_entries`
[INFO] [stdout]     --> src/dir/htree.rs:1110:5
[INFO] [stdout]      |
[INFO] [stdout] 1110 |     position_in_entries: usize,
[INFO] [stdout]      |     ^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_position_in_entries`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `required_len`
[INFO] [stdout]    --> src/dir/write.rs:572:5
[INFO] [stdout]     |
[INFO] [stdout] 572 |     required_len: u16,
[INFO] [stdout]     |     ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_required_len`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `required_len`
[INFO] [stdout]    --> src/dir/write.rs:652:5
[INFO] [stdout]     |
[INFO] [stdout] 652 |     required_len: u16,
[INFO] [stdout]     |     ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_required_len`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary `unsafe` block
[INFO] [stdout]    --> src/dir/entry.rs:141:29
[INFO] [stdout]     |
[INFO] [stdout] 141 |             let entry_ptr = unsafe {
[INFO] [stdout]     |                             ^^^^^^ unnecessary `unsafe` block
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_unsafe)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `new_links`
[INFO] [stdout]     --> src/fs/filesystem.rs:2311:34
[INFO] [stdout]      |
[INFO] [stdout] 2311 |                 let (old_is_dir, new_links) = {
[INFO] [stdout]      |                                  ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_new_links`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `partition_offset`
[INFO] [stdout]    --> src/cache/block_cache.rs:364:9
[INFO] [stdout]     |
[INFO] [stdout] 364 |         partition_offset: u64,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_partition_offset`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `used_dirs`
[INFO] [stdout]   --> src/ialloc/alloc.rs:72:31
[INFO] [stdout]    |
[INFO] [stdout] 72 |             let (free_inodes, used_dirs, bmp_blk_addr, bg_copy) = {
[INFO] [stdout]    |                               ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_used_dirs`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/journal/recovery.rs:172:13
[INFO] [stdout]     |
[INFO] [stdout] 159 |             JBD_BLOCKTYPE_DESCRIPTOR => {
[INFO] [stdout]     |             ------------------------ matches any value
[INFO] [stdout] ...
[INFO] [stdout] 172 |             JBD_BLOCKTYPE_COMMIT => {
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^ no value can reach this
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unreachable_patterns)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/journal/recovery.rs:178:13
[INFO] [stdout]     |
[INFO] [stdout] 159 |             JBD_BLOCKTYPE_DESCRIPTOR => {
[INFO] [stdout]     |             ------------------------ matches any value
[INFO] [stdout] ...
[INFO] [stdout] 178 |             JBD_BLOCKTYPE_REVOKE => {
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^ no value can reach this
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/journal/recovery.rs:182:13
[INFO] [stdout]     |
[INFO] [stdout] 159 |             JBD_BLOCKTYPE_DESCRIPTOR => {
[INFO] [stdout]     |             ------------------------ matches any value
[INFO] [stdout] ...
[INFO] [stdout] 182 |             _ => {
[INFO] [stdout]     |             ^ no value can reach this
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `JBD_BLOCKTYPE_DESCRIPTOR`
[INFO] [stdout]    --> src/journal/recovery.rs:159:13
[INFO] [stdout]     |
[INFO] [stdout] 159 |             JBD_BLOCKTYPE_DESCRIPTOR => {
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_JBD_BLOCKTYPE_DESCRIPTOR`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `JBD_BLOCKTYPE_COMMIT`
[INFO] [stdout]    --> src/journal/recovery.rs:172:13
[INFO] [stdout]     |
[INFO] [stdout] 172 |             JBD_BLOCKTYPE_COMMIT => {
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_JBD_BLOCKTYPE_COMMIT`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `JBD_BLOCKTYPE_REVOKE`
[INFO] [stdout]    --> src/journal/recovery.rs:178:13
[INFO] [stdout]     |
[INFO] [stdout] 178 |             JBD_BLOCKTYPE_REVOKE => {
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_JBD_BLOCKTYPE_REVOKE`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/journal/commit.rs:167:25
[INFO] [stdout]     |
[INFO] [stdout] 167 |                     let mut tag = jbd_block_tag {
[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: `trans`
[INFO] [stdout]    --> src/journal/commit.rs:229:5
[INFO] [stdout]     |
[INFO] [stdout] 229 |     trans: &JbdTrans,
[INFO] [stdout]     |     ^^^^^ help: if this is intentional, prefix it with an underscore: `_trans`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `entry_offset`
[INFO] [stdout]    --> src/xattr/write.rs:159:18
[INFO] [stdout]     |
[INFO] [stdout] 159 |     if let Some((entry_offset, old_value_offset, old_value_size)) = found {
[INFO] [stdout]     |                  ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_entry_offset`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `block_size`
[INFO] [stdout]   --> src/xattr/api.rs:93:13
[INFO] [stdout]    |
[INFO] [stdout] 93 |         let block_size = inode_ref.superblock().block_size() as usize;
[INFO] [stdout]    |             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_block_size`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type `TransactionState` is more private than the item `SimpleTransaction::<'a, D>::state`
[INFO] [stdout]    --> src/transaction/simple.rs:220:5
[INFO] [stdout]     |
[INFO] [stdout] 220 |     pub fn state(&self) -> TransactionState {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ method `SimpleTransaction::<'a, D>::state` is reachable at visibility `pub`
[INFO] [stdout]     |
[INFO] [stdout] note: but type `TransactionState` is only usable at visibility `pub(self)`
[INFO] [stdout]    --> src/transaction/simple.rs:63:1
[INFO] [stdout]     |
[INFO] [stdout]  63 | enum TransactionState {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: `#[warn(private_interfaces)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `inner_mut` is never used
[INFO] [stdout]   --> src/block_group/write.rs:56:19
[INFO] [stdout]    |
[INFO] [stdout] 54 | impl BlockGroup {
[INFO] [stdout]    | --------------- method in this implementation
[INFO] [stdout] 55 |     /// 获取内部块组描述符的可变引用
[INFO] [stdout] 56 |     pub(crate) fn inner_mut(&mut self) -> &mut ext4_group_desc {
[INFO] [stdout]    |                   ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `read_first_leaf_block` is never used
[INFO] [stdout]    --> src/extent/write.rs:692:4
[INFO] [stdout]     |
[INFO] [stdout] 692 | fn read_first_leaf_block<D: BlockDevice>(inode_ref: &mut InodeRef<D>) -> Result<u64> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `block_size` is never read
[INFO] [stdout]     --> src/extent/write.rs:1867:5
[INFO] [stdout]      |
[INFO] [stdout] 1865 | pub struct ExtentWriter<'a, D: BlockDevice> {
[INFO] [stdout]      |            ------------ field in this struct
[INFO] [stdout] 1866 |     trans: &'a mut SimpleTransaction<'a, D>,
[INFO] [stdout] 1867 |     block_size: u32,
[INFO] [stdout]      |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `blocks_per_indirect` is never read
[INFO] [stdout]   --> src/indirect/mapper.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub struct IndirectBlockMapper {
[INFO] [stdout]    |            ------------------- field in this struct
[INFO] [stdout] 15 |     /// 每个间接块可以容纳的指针数量 (block_size / 4)
[INFO] [stdout] 16 |     blocks_per_indirect: u32,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `initialized` is never read
[INFO] [stdout]   --> src/dir/iterator.rs:42:5
[INFO] [stdout]    |
[INFO] [stdout] 32 | pub struct DirIterator {
[INFO] [stdout]    |            ----------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 42 |     initialized: bool,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calculate_entry_space` is never used
[INFO] [stdout]    --> src/dir/htree.rs:207:4
[INFO] [stdout]     |
[INFO] [stdout] 207 | fn calculate_entry_space(block_size: u32, sb: &Superblock) -> u32 {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `insert_index_entry` is never used
[INFO] [stdout]    --> src/dir/htree.rs:887:4
[INFO] [stdout]     |
[INFO] [stdout] 887 | fn insert_index_entry<D: BlockDevice>(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `get_file_block` is never used
[INFO] [stdout]    --> src/fs/filesystem.rs:954:19
[INFO] [stdout]     |
[INFO] [stdout]  68 | impl<D: BlockDevice> Ext4FileSystem<D> {
[INFO] [stdout]     | -------------------------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 954 |     pub(crate) fn get_file_block(&mut self, inode_num: u32, logical_block: u32) -> Result<u64> {
[INFO] [stdout]     |                   ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `block_size` is never read
[INFO] [stdout]   --> src/fs/file.rs:31:5
[INFO] [stdout]    |
[INFO] [stdout] 25 | pub struct File<D: BlockDevice> {
[INFO] [stdout]    |            ---- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 31 |     block_size: u32,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Uninitialized`, `Active`, `Committing`, `Committed`, and `Aborted` are never constructed
[INFO] [stdout]   --> src/transaction/journal.rs:67:5
[INFO] [stdout]    |
[INFO] [stdout] 65 | enum JournalState {
[INFO] [stdout]    |      ------------ variants in this enum
[INFO] [stdout] 66 |     /// 未初始化
[INFO] [stdout] 67 |     Uninitialized,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 70 |     Active,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 73 |     Committing,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 76 |     Committed,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 79 |     Aborted,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `JournalState` 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`, `set_transaction`, and `set_block_record` are never used
[INFO] [stdout]   --> src/journal/jbd_buf.rs:60:19
[INFO] [stdout]    |
[INFO] [stdout] 58 | impl JbdBuf {
[INFO] [stdout]    | ----------- associated items in this implementation
[INFO] [stdout] 59 |     /// Create a new journal buffer
[INFO] [stdout] 60 |     pub(super) fn new(jbd_lba: u32, fs_lba: u64) -> Self {
[INFO] [stdout]    |                   ^^^
[INFO] [stdout] ...
[INFO] [stdout] 91 |     pub(super) fn set_transaction(&mut self, trans_id: u64) {
[INFO] [stdout]    |                   ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 96 |     pub(super) fn set_block_record(&mut self, rec_id: u64) {
[INFO] [stdout]    |                   ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `sequence` and `start_block` are never read
[INFO] [stdout]   --> src/journal/recovery.rs:84:5
[INFO] [stdout]    |
[INFO] [stdout] 82 | struct TransactionInfo {
[INFO] [stdout]    |        --------------- fields in this struct
[INFO] [stdout] 83 |     /// 事务序列号
[INFO] [stdout] 84 |     sequence: u32,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 85 |     /// 事务起始块号
[INFO] [stdout] 86 |     start_block: u32,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `TransactionInfo` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `commit_transaction` is never used
[INFO] [stdout]   --> src/journal/commit.rs:36:8
[INFO] [stdout]    |
[INFO] [stdout] 36 | pub fn commit_transaction<D: BlockDevice>(
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calculate_descriptor_blocks` is never used
[INFO] [stdout]    --> src/journal/commit.rs:106:4
[INFO] [stdout]     |
[INFO] [stdout] 106 | fn calculate_descriptor_blocks(data_blocks: u32, block_size: u32) -> u32 {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `write_descriptor_and_data_blocks` is never used
[INFO] [stdout]    --> src/journal/commit.rs:119:4
[INFO] [stdout]     |
[INFO] [stdout] 119 | fn write_descriptor_and_data_blocks<D: BlockDevice>(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `write_commit_block` is never used
[INFO] [stdout]    --> src/journal/commit.rs:227:4
[INFO] [stdout]     |
[INFO] [stdout] 227 | fn write_commit_block<D: BlockDevice>(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `write_revoke_block` is never used
[INFO] [stdout]    --> src/journal/commit.rs:296:4
[INFO] [stdout]     |
[INFO] [stdout] 296 | fn write_revoke_block<D: BlockDevice>(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `trans_commit` is never used
[INFO] [stdout]    --> src/journal/commit.rs:367:8
[INFO] [stdout]     |
[INFO] [stdout] 367 | pub fn trans_commit<D: BlockDevice>(
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `do_checkpoint` is never used
[INFO] [stdout]   --> src/journal/checkpoint.rs:35:8
[INFO] [stdout]    |
[INFO] [stdout] 35 | pub fn do_checkpoint<D: BlockDevice>(
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_transaction_checkpointable` is never used
[INFO] [stdout]    --> src/journal/checkpoint.rs:108:4
[INFO] [stdout]     |
[INFO] [stdout] 108 | fn is_transaction_checkpointable<D: BlockDevice>(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `checkpoint_transaction` is never used
[INFO] [stdout]    --> src/journal/checkpoint.rs:149:4
[INFO] [stdout]     |
[INFO] [stdout] 149 | fn checkpoint_transaction<D: BlockDevice>(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calculate_descriptor_blocks_count` is never used
[INFO] [stdout]    --> src/journal/checkpoint.rs:196:4
[INFO] [stdout]     |
[INFO] [stdout] 196 | fn calculate_descriptor_blocks_count(data_blocks: u32, block_size: u32) -> u32 {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `next_journal_block` is never used
[INFO] [stdout]    --> src/journal/checkpoint.rs:209:4
[INFO] [stdout]     |
[INFO] [stdout] 209 | fn next_journal_block(current: u32, first: u32, max_len: u32) -> u32 {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `update_journal_start` is never used
[INFO] [stdout]    --> src/journal/checkpoint.rs:230:4
[INFO] [stdout]     |
[INFO] [stdout] 230 | fn update_journal_start(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `force_checkpoint` is never used
[INFO] [stdout]    --> src/journal/checkpoint.rs:263:8
[INFO] [stdout]     |
[INFO] [stdout] 263 | pub fn force_checkpoint<D: BlockDevice>(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `should_checkpoint` is never used
[INFO] [stdout]    --> src/journal/checkpoint.rs:307:8
[INFO] [stdout]     |
[INFO] [stdout] 307 | pub fn should_checkpoint(jbd_journal: &JbdJournal, threshold: u32) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `try_checkpoint` is never used
[INFO] [stdout]    --> src/journal/checkpoint.rs:339:8
[INFO] [stdout]     |
[INFO] [stdout] 339 | pub fn try_checkpoint<D: BlockDevice>(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `block_csum` is never used
[INFO] [stdout]   --> src/journal/checksum.rs:21:8
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub fn block_csum(uuid: &[u8; 16], data: &[u8], sequence: u32) -> u32 {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `verify_descriptor_block` is never used
[INFO] [stdout]   --> src/journal/checksum.rs:38:8
[INFO] [stdout]    |
[INFO] [stdout] 38 | pub fn verify_descriptor_block(uuid: &[u8; 16], data: &[u8]) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `verify_commit_block` is never used
[INFO] [stdout]   --> src/journal/checksum.rs:76:8
[INFO] [stdout]    |
[INFO] [stdout] 76 | pub fn verify_commit_block(uuid: &[u8; 16], data: &[u8]) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calculate_descriptor_csum` is never used
[INFO] [stdout]    --> src/journal/checksum.rs:105:8
[INFO] [stdout]     |
[INFO] [stdout] 105 | pub fn calculate_descriptor_csum(uuid: &[u8; 16], data: &[u8]) -> u32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calculate_commit_csum` is never used
[INFO] [stdout]    --> src/journal/checksum.rs:128:8
[INFO] [stdout]     |
[INFO] [stdout] 128 | pub fn calculate_commit_csum(uuid: &[u8; 16], data: &[u8]) -> u32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calculate_revoke_csum` is never used
[INFO] [stdout]    --> src/journal/checksum.rs:151:8
[INFO] [stdout]     |
[INFO] [stdout] 151 | pub fn calculate_revoke_csum(uuid: &[u8; 16], data: &[u8]) -> u32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `verify_revoke_block` is never used
[INFO] [stdout]    --> src/journal/checksum.rs:174:8
[INFO] [stdout]     |
[INFO] [stdout] 174 | pub fn verify_revoke_block(uuid: &[u8; 16], data: &[u8]) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `verify_superblock_csum` is never used
[INFO] [stdout]    --> src/journal/checksum.rs:211:8
[INFO] [stdout]     |
[INFO] [stdout] 211 | pub fn verify_superblock_csum(sb: &jbd_sb) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calculate_superblock_csum` is never used
[INFO] [stdout]    --> src/journal/checksum.rs:243:8
[INFO] [stdout]     |
[INFO] [stdout] 243 | pub fn calculate_superblock_csum(sb: &mut jbd_sb) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `base` is never read
[INFO] [stdout]   --> src/xattr/search.rs:22:9
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub struct XattrSearch<'a> {
[INFO] [stdout]    |            ----------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 22 |     pub base: usize,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `XattrSearch` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `is_empty` and `free_space` are never used
[INFO] [stdout]    --> src/xattr/search.rs:130:12
[INFO] [stdout]     |
[INFO] [stdout]  37 | impl<'a> XattrSearch<'a> {
[INFO] [stdout]     | ------------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 130 |     pub fn is_empty(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 137 |     pub fn free_space(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `compute_entry_hash` is never used
[INFO] [stdout]   --> src/xattr/hash.rs:29:8
[INFO] [stdout]    |
[INFO] [stdout] 29 | pub fn compute_entry_hash(
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `rehash_block` is never used
[INFO] [stdout]   --> src/xattr/hash.rs:95:8
[INFO] [stdout]    |
[INFO] [stdout] 95 | pub fn rehash_block(
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `compute_block_checksum` is never used
[INFO] [stdout]    --> src/xattr/hash.rs:189:8
[INFO] [stdout]     |
[INFO] [stdout] 189 | pub fn compute_block_checksum(sb: &Superblock, block_num: u64, block_data: &[u8]) -> u32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `set_block_checksum` is never used
[INFO] [stdout]    --> src/xattr/hash.rs:220:8
[INFO] [stdout]     |
[INFO] [stdout] 220 | pub fn set_block_checksum(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_first_entry_offset` is never used
[INFO] [stdout]   --> src/xattr/block.rs:48:4
[INFO] [stdout]    |
[INFO] [stdout] 48 | fn get_first_entry_offset() -> usize {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `validate_block` is never used
[INFO] [stdout]   --> src/xattr/block.rs:64:8
[INFO] [stdout]    |
[INFO] [stdout] 64 | pub fn validate_block(sb: &Superblock, block_data: &[u8]) -> Result<()> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `find_block_entry` is never used
[INFO] [stdout]    --> src/xattr/block.rs:217:8
[INFO] [stdout]     |
[INFO] [stdout] 217 | pub fn find_block_entry(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `list_block_xattr` is never used
[INFO] [stdout]    --> src/xattr/block.rs:245:8
[INFO] [stdout]     |
[INFO] [stdout] 245 | pub fn list_block_xattr(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `inc_refcount` is never used
[INFO] [stdout]    --> src/xattr/block.rs:366:8
[INFO] [stdout]     |
[INFO] [stdout] 366 | pub fn inc_refcount(block_data: &mut [u8]) -> Result<u32> {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `crc32c` is never used
[INFO] [stdout]   --> src/crc.rs:18:8
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub fn crc32c(data: &[u8]) -> u32 {
[INFO] [stdout]    |        ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: calls to `std::mem::drop` with a reference instead of an owned value does nothing
[INFO] [stdout]    --> src/block/device.rs:400:13
[INFO] [stdout]     |
[INFO] [stdout] 400 |             drop(cache);
[INFO] [stdout]     |             ^^^^^-----^
[INFO] [stdout]     |                  |
[INFO] [stdout]     |                  argument has type `&mut BlockCache`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dropping_references)]` on by default
[INFO] [stdout] help: use `let _ = ...` to ignore the expression or result
[INFO] [stdout]     |
[INFO] [stdout] 400 -             drop(cache);
[INFO] [stdout] 400 +             let _ = cache;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: calls to `std::mem::drop` with a reference instead of an owned value does nothing
[INFO] [stdout]   --> src/block/io.rs:63:25
[INFO] [stdout]    |
[INFO] [stdout] 63 |                         drop(cache); // 显式释放借用
[INFO] [stdout]    |                         ^^^^^-----^
[INFO] [stdout]    |                              |
[INFO] [stdout]    |                              argument has type `&mut BlockCache`
[INFO] [stdout]    |
[INFO] [stdout] help: use `let _ = ...` to ignore the expression or result
[INFO] [stdout]    |
[INFO] [stdout] 63 -                         drop(cache); // 显式释放借用
[INFO] [stdout] 63 +                         let _ = cache; // 显式释放借用
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: calls to `std::mem::drop` with a reference instead of an owned value does nothing
[INFO] [stdout]    --> src/block/io.rs:128:29
[INFO] [stdout]     |
[INFO] [stdout] 128 | ...                   drop(cache); // 显式释放借用
[INFO] [stdout]     |                       ^^^^^-----^
[INFO] [stdout]     |                            |
[INFO] [stdout]     |                            argument has type `&mut BlockCache`
[INFO] [stdout]     |
[INFO] [stdout] help: use `let _ = ...` to ignore the expression or result
[INFO] [stdout]     |
[INFO] [stdout] 128 -                             drop(cache); // 显式释放借用
[INFO] [stdout] 128 +                             let _ = cache; // 显式释放借用
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: calls to `std::mem::drop` with a reference instead of an owned value does nothing
[INFO] [stdout]    --> src/block/handle.rs:100:21
[INFO] [stdout]     |
[INFO] [stdout] 100 |                     drop(cache); // 释放借用
[INFO] [stdout]     |                     ^^^^^-----^
[INFO] [stdout]     |                          |
[INFO] [stdout]     |                          argument has type `&mut BlockCache`
[INFO] [stdout]     |
[INFO] [stdout] help: use `let _ = ...` to ignore the expression or result
[INFO] [stdout]     |
[INFO] [stdout] 100 -                     drop(cache); // 释放借用
[INFO] [stdout] 100 +                     let _ = cache; // 释放借用
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: calls to `std::mem::drop` with a reference instead of an owned value does nothing
[INFO] [stdout]    --> src/block/handle.rs:187:21
[INFO] [stdout]     |
[INFO] [stdout] 187 |                     drop(cache); // 释放借用
[INFO] [stdout]     |                     ^^^^^-----^
[INFO] [stdout]     |                          |
[INFO] [stdout]     |                          argument has type `&mut BlockCache`
[INFO] [stdout]     |
[INFO] [stdout] help: use `let _ = ...` to ignore the expression or result
[INFO] [stdout]     |
[INFO] [stdout] 187 -                     drop(cache); // 释放借用
[INFO] [stdout] 187 +                     let _ = cache; // 释放借用
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: calls to `std::mem::drop` with a reference instead of an owned value does nothing
[INFO] [stdout]    --> src/block/handle.rs:248:21
[INFO] [stdout]     |
[INFO] [stdout] 248 |                     drop(cache); // 释放借用
[INFO] [stdout]     |                     ^^^^^-----^
[INFO] [stdout]     |                          |
[INFO] [stdout]     |                          argument has type `&mut BlockCache`
[INFO] [stdout]     |
[INFO] [stdout] help: use `let _ = ...` to ignore the expression or result
[INFO] [stdout]     |
[INFO] [stdout] 248 -                     drop(cache); // 释放借用
[INFO] [stdout] 248 +                     let _ = cache; // 释放借用
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: calls to `std::mem::drop` with a reference instead of an owned value does nothing
[INFO] [stdout]    --> src/block/handle.rs:290:21
[INFO] [stdout]     |
[INFO] [stdout] 290 |                     drop(cache); // 释放借用
[INFO] [stdout]     |                     ^^^^^-----^
[INFO] [stdout]     |                          |
[INFO] [stdout]     |                          argument has type `&mut BlockCache`
[INFO] [stdout]     |
[INFO] [stdout] help: use `let _ = ...` to ignore the expression or result
[INFO] [stdout]     |
[INFO] [stdout] 290 -                     drop(cache); // 释放借用
[INFO] [stdout] 290 +                     let _ = cache; // 释放借用
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]    --> src/consts.rs:408:1
[INFO] [stdout]     |
[INFO] [stdout] 408 | pub const EXT4_XATTR_PAD: u32 = 1 << EXT4_XATTR_PAD_BITS;
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] note: the lint level is defined here
[INFO] [stdout]    --> src/lib.rs:47:9
[INFO] [stdout]     |
[INFO] [stdout]  47 | #![warn(missing_docs)]
[INFO] [stdout]     |         ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]    --> src/consts.rs:409:1
[INFO] [stdout]     |
[INFO] [stdout] 409 | pub const EXT4_XATTR_ROUND: u32 = EXT4_XATTR_PAD - 1;
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]    --> src/consts.rs:413:1
[INFO] [stdout]     |
[INFO] [stdout] 413 | pub const EXT4_XATTR_INDEX_POSIX_ACL_ACCESS: u8 = 2;
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]    --> src/consts.rs:414:1
[INFO] [stdout]     |
[INFO] [stdout] 414 | pub const EXT4_XATTR_INDEX_POSIX_ACL_DEFAULT: u8 = 3;
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]    --> src/consts.rs:415:1
[INFO] [stdout]     |
[INFO] [stdout] 415 | pub const EXT4_XATTR_INDEX_TRUSTED: u8 = 4;
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]    --> src/consts.rs:416:1
[INFO] [stdout]     |
[INFO] [stdout] 416 | pub const EXT4_XATTR_INDEX_LUSTRE: u8 = 5;
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]    --> src/consts.rs:417:1
[INFO] [stdout]     |
[INFO] [stdout] 417 | pub const EXT4_XATTR_INDEX_SECURITY: u8 = 6;
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]    --> src/consts.rs:418:1
[INFO] [stdout]     |
[INFO] [stdout] 418 | pub const EXT4_XATTR_INDEX_SYSTEM: u8 = 7;
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]    --> src/consts.rs:419:1
[INFO] [stdout]     |
[INFO] [stdout] 419 | pub const EXT4_XATTR_INDEX_RICHACL: u8 = 8;
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]    --> src/consts.rs:420:1
[INFO] [stdout]     |
[INFO] [stdout] 420 | pub const EXT4_XATTR_INDEX_ENCRYPTION: u8 = 9;
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]    --> src/consts.rs:424:1
[INFO] [stdout]     |
[INFO] [stdout] 424 | pub const VALUE_HASH_SHIFT: u32 = 16;
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]    --> src/consts.rs:425:1
[INFO] [stdout]     |
[INFO] [stdout] 425 | pub const BLOCK_HASH_SHIFT: u32 = 16;
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:25:5
[INFO] [stdout]    |
[INFO] [stdout] 25 |     pub inodes_count: u32,           // 0: 总 inode 数
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:26:5
[INFO] [stdout]    |
[INFO] [stdout] 26 |     pub blocks_count_lo: u32,        // 4: 总块数（低32位）
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:27:5
[INFO] [stdout]    |
[INFO] [stdout] 27 |     pub r_blocks_count_lo: u32,      // 8: 保留块数（低32位）
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 28 |     pub free_blocks_count_lo: u32,   // 12: 空闲块数（低32位）
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:29:5
[INFO] [stdout]    |
[INFO] [stdout] 29 |     pub free_inodes_count: u32,      // 16: 空闲 inode 数
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:30:5
[INFO] [stdout]    |
[INFO] [stdout] 30 |     pub first_data_block: u32,       // 20: 第一个数据块
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:31:5
[INFO] [stdout]    |
[INFO] [stdout] 31 |     pub log_block_size: u32,         // 24: 块大小（2^(10+log_block_size)）
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:32:5
[INFO] [stdout]    |
[INFO] [stdout] 32 |     pub log_cluster_size: u32,       // 28: 簇大小
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:33:5
[INFO] [stdout]    |
[INFO] [stdout] 33 |     pub blocks_per_group: u32,       // 32: 每组块数
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:34:5
[INFO] [stdout]    |
[INFO] [stdout] 34 |     pub clusters_per_group: u32,     // 36: 每组簇数
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:35:5
[INFO] [stdout]    |
[INFO] [stdout] 35 |     pub inodes_per_group: u32,       // 40: 每组 inode 数
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:36:5
[INFO] [stdout]    |
[INFO] [stdout] 36 |     pub mtime: u32,                  // 44: 挂载时间
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:37:5
[INFO] [stdout]    |
[INFO] [stdout] 37 |     pub wtime: u32,                  // 48: 写入时间
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:38:5
[INFO] [stdout]    |
[INFO] [stdout] 38 |     pub mnt_count: u16,              // 52: 挂载次数
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:39:5
[INFO] [stdout]    |
[INFO] [stdout] 39 |     pub max_mnt_count: u16,          // 54: 最大挂载次数
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:40:5
[INFO] [stdout]    |
[INFO] [stdout] 40 |     pub magic: u16,                  // 56: 魔数 (0xEF53)
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:41:5
[INFO] [stdout]    |
[INFO] [stdout] 41 |     pub state: u16,                  // 58: 文件系统状态
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:42:5
[INFO] [stdout]    |
[INFO] [stdout] 42 |     pub errors: u16,                 // 60: 错误处理方式
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:43:5
[INFO] [stdout]    |
[INFO] [stdout] 43 |     pub minor_rev_level: u16,        // 62: 次版本号
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:44:5
[INFO] [stdout]    |
[INFO] [stdout] 44 |     pub lastcheck: u32,              // 64: 最后检查时间
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:45:5
[INFO] [stdout]    |
[INFO] [stdout] 45 |     pub checkinterval: u32,          // 68: 检查间隔
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:46:5
[INFO] [stdout]    |
[INFO] [stdout] 46 |     pub creator_os: u32,             // 72: 创建者操作系统
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:47:5
[INFO] [stdout]    |
[INFO] [stdout] 47 |     pub rev_level: u32,              // 76: 版本级别
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:48:5
[INFO] [stdout]    |
[INFO] [stdout] 48 |     pub def_resuid: u16,             // 80: 默认保留 uid
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:49:5
[INFO] [stdout]    |
[INFO] [stdout] 49 |     pub def_resgid: u16,             // 82: 默认保留 gid
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:52:5
[INFO] [stdout]    |
[INFO] [stdout] 52 |     pub first_ino: u32,              // 84: 第一个非保留 inode
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:53:5
[INFO] [stdout]    |
[INFO] [stdout] 53 |     pub inode_size: u16,             // 88: inode 大小
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:54:5
[INFO] [stdout]    |
[INFO] [stdout] 54 |     pub block_group_nr: u16,         // 90: 本超级块所在的块组号
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:55:5
[INFO] [stdout]    |
[INFO] [stdout] 55 |     pub feature_compat: u32,         // 92: 兼容特性
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:56:5
[INFO] [stdout]    |
[INFO] [stdout] 56 |     pub feature_incompat: u32,       // 96: 不兼容特性
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:57:5
[INFO] [stdout]    |
[INFO] [stdout] 57 |     pub feature_ro_compat: u32,      // 100: 只读兼容特性
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:59:5
[INFO] [stdout]    |
[INFO] [stdout] 59 |     pub uuid: [u8; 16],              // 104: 128位UUID
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:60:5
[INFO] [stdout]    |
[INFO] [stdout] 60 |     pub volume_name: [u8; 16],       // 120: 卷名称
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:61:5
[INFO] [stdout]    |
[INFO] [stdout] 61 |     pub last_mounted: [u8; 64],      // 136: 最后挂载路径
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:62:5
[INFO] [stdout]    |
[INFO] [stdout] 62 |     pub algorithm_usage_bitmap: u32, // 200: 压缩算法位图
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:64:5
[INFO] [stdout]    |
[INFO] [stdout] 64 |     pub prealloc_blocks: u8,         // 204: 预分配块数
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:65:5
[INFO] [stdout]    |
[INFO] [stdout] 65 |     pub prealloc_dir_blocks: u8,     // 205: 目录预分配块数
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:66:5
[INFO] [stdout]    |
[INFO] [stdout] 66 |     pub reserved_gdt_blocks: u16,    // 206: 保留的GDT块数
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:68:5
[INFO] [stdout]    |
[INFO] [stdout] 68 |     pub journal_uuid: [u8; 16],      // 208: 日志UUID
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:69:5
[INFO] [stdout]    |
[INFO] [stdout] 69 |     pub journal_inum: u32,           // 224: 日志inode号
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:70:5
[INFO] [stdout]    |
[INFO] [stdout] 70 |     pub journal_dev: u32,            // 228: 日志设备号
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:71:5
[INFO] [stdout]    |
[INFO] [stdout] 71 |     pub last_orphan: u32,            // 232: 孤儿inode链表头
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:72:5
[INFO] [stdout]    |
[INFO] [stdout] 72 |     pub hash_seed: [u32; 4],         // 236: HTREE哈希种子
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:73:5
[INFO] [stdout]    |
[INFO] [stdout] 73 |     pub def_hash_version: u8,        // 252: 默认哈希版本
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:74:5
[INFO] [stdout]    |
[INFO] [stdout] 74 |     pub jnl_backup_type: u8,         // 253: 日志备份类型
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:75:5
[INFO] [stdout]    |
[INFO] [stdout] 75 |     pub desc_size: u16,              // 254: 组描述符大小
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:76:5
[INFO] [stdout]    |
[INFO] [stdout] 76 |     pub default_mount_opts: u32,     // 256: 默认挂载选项
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:77:5
[INFO] [stdout]    |
[INFO] [stdout] 77 |     pub first_meta_bg: u32,          // 260: 第一个元数据块组
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:78:5
[INFO] [stdout]    |
[INFO] [stdout] 78 |     pub mkfs_time: u32,              // 264: 创建时间
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:79:5
[INFO] [stdout]    |
[INFO] [stdout] 79 |     pub jnl_blocks: [u32; 17],       // 268: 日志备份
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:82:5
[INFO] [stdout]    |
[INFO] [stdout] 82 |     pub blocks_count_hi: u32,        // 336: 总块数（高32位）
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:83:5
[INFO] [stdout]    |
[INFO] [stdout] 83 |     pub r_blocks_count_hi: u32,      // 340: 保留块数（高32位）
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:84:5
[INFO] [stdout]    |
[INFO] [stdout] 84 |     pub free_blocks_count_hi: u32,   // 344: 空闲块数（高32位）
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:85:5
[INFO] [stdout]    |
[INFO] [stdout] 85 |     pub min_extra_isize: u16,        // 348: 最小额外inode大小
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:86:5
[INFO] [stdout]    |
[INFO] [stdout] 86 |     pub want_extra_isize: u16,       // 350: 期望额外inode大小
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:87:5
[INFO] [stdout]    |
[INFO] [stdout] 87 |     pub flags: u32,                  // 352: 标志
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:88:5
[INFO] [stdout]    |
[INFO] [stdout] 88 |     pub raid_stride: u16,            // 356: RAID步长
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:89:5
[INFO] [stdout]    |
[INFO] [stdout] 89 |     pub mmp_interval: u16,           // 358: MMP检查间隔
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:90:5
[INFO] [stdout]    |
[INFO] [stdout] 90 |     pub mmp_block: u64,              // 360: MMP块号
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:91:5
[INFO] [stdout]    |
[INFO] [stdout] 91 |     pub raid_stripe_width: u32,      // 368: RAID条带宽度
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:92:5
[INFO] [stdout]    |
[INFO] [stdout] 92 |     pub log_groups_per_flex: u8,     // 372: flex_bg组大小log2
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:93:5
[INFO] [stdout]    |
[INFO] [stdout] 93 |     pub checksum_type: u8,           // 373: 校验和类型
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:94:5
[INFO] [stdout]    |
[INFO] [stdout] 94 |     pub reserved_pad: u16,           // 374: 保留填充
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:95:5
[INFO] [stdout]    |
[INFO] [stdout] 95 |     pub kbytes_written: u64,         // 376: 已写入的KB数
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:96:5
[INFO] [stdout]    |
[INFO] [stdout] 96 |     pub snapshot_inum: u32,          // 384: 快照inode号
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:97:5
[INFO] [stdout]    |
[INFO] [stdout] 97 |     pub snapshot_id: u32,            // 388: 快照ID
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:98:5
[INFO] [stdout]    |
[INFO] [stdout] 98 |     pub snapshot_r_blocks_count: u64, // 392: 快照保留块数
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:99:5
[INFO] [stdout]    |
[INFO] [stdout] 99 |     pub snapshot_list: u32,          // 400: 快照链表头
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:100:5
[INFO] [stdout]     |
[INFO] [stdout] 100 |     pub error_count: u32,            // 404: 错误计数
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:101:5
[INFO] [stdout]     |
[INFO] [stdout] 101 |     pub first_error_time: u32,       // 408: 第一次错误时间
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:102:5
[INFO] [stdout]     |
[INFO] [stdout] 102 |     pub first_error_ino: u32,        // 412: 第一次错误inode
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:103:5
[INFO] [stdout]     |
[INFO] [stdout] 103 |     pub first_error_block: u64,      // 416: 第一次错误块号
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:104:5
[INFO] [stdout]     |
[INFO] [stdout] 104 |     pub first_error_func: [u8; 32],  // 424: 第一次错误函数
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:105:5
[INFO] [stdout]     |
[INFO] [stdout] 105 |     pub first_error_line: u32,       // 456: 第一次错误行号
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:106:5
[INFO] [stdout]     |
[INFO] [stdout] 106 |     pub last_error_time: u32,        // 460: 最后错误时间
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:107:5
[INFO] [stdout]     |
[INFO] [stdout] 107 |     pub last_error_ino: u32,         // 464: 最后错误inode
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:108:5
[INFO] [stdout]     |
[INFO] [stdout] 108 |     pub last_error_line: u32,        // 468: 最后错误行号
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:109:5
[INFO] [stdout]     |
[INFO] [stdout] 109 |     pub last_error_block: u64,       // 472: 最后错误块号
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:110:5
[INFO] [stdout]     |
[INFO] [stdout] 110 |     pub last_error_func: [u8; 32],   // 480: 最后错误函数
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:111:5
[INFO] [stdout]     |
[INFO] [stdout] 111 |     pub mount_opts: [u8; 64],        // 512: 挂载选项
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:112:5
[INFO] [stdout]     |
[INFO] [stdout] 112 |     pub usr_quota_inum: u32,         // 576: 用户配额inode
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:113:5
[INFO] [stdout]     |
[INFO] [stdout] 113 |     pub grp_quota_inum: u32,         // 580: 组配额inode
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:114:5
[INFO] [stdout]     |
[INFO] [stdout] 114 |     pub overhead_blocks: u32,        // 584: 开销块数
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:115:5
[INFO] [stdout]     |
[INFO] [stdout] 115 |     pub backup_bgs: [u32; 2],        // 588: 备份块组
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:116:5
[INFO] [stdout]     |
[INFO] [stdout] 116 |     pub encrypt_algos: [u8; 4],      // 596: 加密算法
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:117:5
[INFO] [stdout]     |
[INFO] [stdout] 117 |     pub encrypt_pw_salt: [u8; 16],   // 600: 加密密码盐
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:118:5
[INFO] [stdout]     |
[INFO] [stdout] 118 |     pub lpf_ino: u32,                // 616: lost+found inode
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:119:5
[INFO] [stdout]     |
[INFO] [stdout] 119 |     pub prj_quota_inum: u32,         // 620: 项目配额inode
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:120:5
[INFO] [stdout]     |
[INFO] [stdout] 120 |     pub checksum_seed: u32,          // 624: 校验和种子
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:121:5
[INFO] [stdout]     |
[INFO] [stdout] 121 |     pub reserved: [u32; 98],         // 628: 保留字段
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:122:5
[INFO] [stdout]     |
[INFO] [stdout] 122 |     pub checksum: u32,               // 1020: superblock校验和
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:178:5
[INFO] [stdout]     |
[INFO] [stdout] 178 |     pub mode: u16,                   // 0: 文件模式
[INFO] [stdout]     |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:179:5
[INFO] [stdout]     |
[INFO] [stdout] 179 |     pub uid: u16,                    // 2: 所有者 uid（低16位）
[INFO] [stdout]     |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:180:5
[INFO] [stdout]     |
[INFO] [stdout] 180 |     pub size_lo: u32,                // 4: 文件大小（低32位）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:181:5
[INFO] [stdout]     |
[INFO] [stdout] 181 |     pub atime: u32,                  // 8: 访问时间
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:182:5
[INFO] [stdout]     |
[INFO] [stdout] 182 |     pub ctime: u32,                  // 12: inode改变时间
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:183:5
[INFO] [stdout]     |
[INFO] [stdout] 183 |     pub mtime: u32,                  // 16: 修改时间
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:184:5
[INFO] [stdout]     |
[INFO] [stdout] 184 |     pub dtime: u32,                  // 20: 删除时间
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:185:5
[INFO] [stdout]     |
[INFO] [stdout] 185 |     pub gid: u16,                    // 24: 组 gid（低16位）
[INFO] [stdout]     |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:186:5
[INFO] [stdout]     |
[INFO] [stdout] 186 |     pub links_count: u16,            // 26: 硬链接数
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:187:5
[INFO] [stdout]     |
[INFO] [stdout] 187 |     pub blocks_count_lo: u32,        // 28: 512B块数（低32位）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:188:5
[INFO] [stdout]     |
[INFO] [stdout] 188 |     pub flags: u32,                  // 32: 标志
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:189:5
[INFO] [stdout]     |
[INFO] [stdout] 189 |     pub osd1: u32,                   // 36: OS相关1
[INFO] [stdout]     |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:190:5
[INFO] [stdout]     |
[INFO] [stdout] 190 |     pub blocks: [u32; EXT4_INODE_BLOCKS], // 40: 块指针数组（15个）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:191:5
[INFO] [stdout]     |
[INFO] [stdout] 191 |     pub generation: u32,             // 100: 文件版本
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:192:5
[INFO] [stdout]     |
[INFO] [stdout] 192 |     pub file_acl_lo: u32,            // 104: 文件 ACL（低32位）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:193:5
[INFO] [stdout]     |
[INFO] [stdout] 193 |     pub size_hi: u32,                // 108: 文件大小（高32位）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:194:5
[INFO] [stdout]     |
[INFO] [stdout] 194 |     pub obso_faddr: u32,             // 112: 废弃的fragment地址
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:196:5
[INFO] [stdout]     |
[INFO] [stdout] 196 |     pub blocks_high: u16,            // 116: 块数高16位
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:197:5
[INFO] [stdout]     |
[INFO] [stdout] 197 |     pub file_acl_high: u16,          // 118: ACL高16位
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:198:5
[INFO] [stdout]     |
[INFO] [stdout] 198 |     pub uid_high: u16,               // 120: uid高16位
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:199:5
[INFO] [stdout]     |
[INFO] [stdout] 199 |     pub gid_high: u16,               // 122: gid高16位
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:200:5
[INFO] [stdout]     |
[INFO] [stdout] 200 |     pub checksum_lo: u16,            // 124: 校验和低16位
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:201:5
[INFO] [stdout]     |
[INFO] [stdout] 201 |     pub reserved: u16,               // 126: 保留
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:203:5
[INFO] [stdout]     |
[INFO] [stdout] 203 |     pub extra_isize: u16,            // 128: 额外inode大小
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:204:5
[INFO] [stdout]     |
[INFO] [stdout] 204 |     pub checksum_hi: u16,            // 130: 校验和高16位
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:205:5
[INFO] [stdout]     |
[INFO] [stdout] 205 |     pub ctime_extra: u32,            // 132: 额外change时间
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:206:5
[INFO] [stdout]     |
[INFO] [stdout] 206 |     pub mtime_extra: u32,            // 136: 额外modification时间
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:207:5
[INFO] [stdout]     |
[INFO] [stdout] 207 |     pub atime_extra: u32,            // 140: 额外access时间
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:208:5
[INFO] [stdout]     |
[INFO] [stdout] 208 |     pub crtime: u32,                 // 144: 创建时间
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:209:5
[INFO] [stdout]     |
[INFO] [stdout] 209 |     pub crtime_extra: u32,           // 148: 额外创建时间
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:210:5
[INFO] [stdout]     |
[INFO] [stdout] 210 |     pub version_hi: u32,             // 152: 版本高32位
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:211:5
[INFO] [stdout]     |
[INFO] [stdout] 211 |     pub projid: u32,                 // 156: 项目ID
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:255:5
[INFO] [stdout]     |
[INFO] [stdout] 255 |     pub inode: u32,                  // inode 编号
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:256:5
[INFO] [stdout]     |
[INFO] [stdout] 256 |     pub rec_len: u16,                // 记录长度
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:257:5
[INFO] [stdout]     |
[INFO] [stdout] 257 |     pub name_len: u8,                // 名称长度
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:258:5
[INFO] [stdout]     |
[INFO] [stdout] 258 |     pub file_type: u8,               // 文件类型
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:275:5
[INFO] [stdout]     |
[INFO] [stdout] 275 |     pub limit: u16,                  // 最大条目数
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:276:5
[INFO] [stdout]     |
[INFO] [stdout] 276 |     pub count: u16,                  // 当前条目数
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:313:5
[INFO] [stdout]     |
[INFO] [stdout] 313 |     pub inode: u32,                  // inode 编号
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:314:5
[INFO] [stdout]     |
[INFO] [stdout] 314 |     pub entry_len: u16,              // 记录长度
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:315:5
[INFO] [stdout]     |
[INFO] [stdout] 315 |     pub name_len: u8,                // 名称长度（1 for "."）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:316:5
[INFO] [stdout]     |
[INFO] [stdout] 316 |     pub inode_type: u8,              // 文件类型
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:317:5
[INFO] [stdout]     |
[INFO] [stdout] 317 |     pub name: [u8; 4],               // 名称 ".\0\0\0"
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:344:5
[INFO] [stdout]     |
[INFO] [stdout] 344 |     pub reserved_zero: u32,          // 保留字段，必须为 0
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:345:5
[INFO] [stdout]     |
[INFO] [stdout] 345 |     pub hash_version: u8,            // 哈希版本
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:346:5
[INFO] [stdout]     |
[INFO] [stdout] 346 |     pub info_length: u8,             // 信息长度（8字节）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:347:5
[INFO] [stdout]     |
[INFO] [stdout] 347 |     pub indirect_levels: u8,         // 间接层数
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:348:5
[INFO] [stdout]     |
[INFO] [stdout] 348 |     pub unused_flags: u8,            // 未使用的标志
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:395:5
[INFO] [stdout]     |
[INFO] [stdout] 395 |     pub hash: u32,                   // 哈希值
[INFO] [stdout]     |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:396:5
[INFO] [stdout]     |
[INFO] [stdout] 396 |     pub block: u32,                  // 块号
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:434:5
[INFO] [stdout]     |
[INFO] [stdout] 434 |     pub dots: [ext4_dir_idx_dot_en; 2], // "." 和 ".." 目录项
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:435:5
[INFO] [stdout]     |
[INFO] [stdout] 435 |     pub info: ext4_dir_idx_rinfo,    // 根信息
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:436:5
[INFO] [stdout]     |
[INFO] [stdout] 436 |     pub en: [ext4_dir_idx_entry; 0], // 索引条目数组（变长）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:451:5
[INFO] [stdout]     |
[INFO] [stdout] 451 |     pub fake: ext4_fake_dir_entry,   // 假目录项
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:452:5
[INFO] [stdout]     |
[INFO] [stdout] 452 |     pub entries: [ext4_dir_idx_entry; 0], // 索引条目数组（变长）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:461:5
[INFO] [stdout]     |
[INFO] [stdout] 461 |     pub inode: u32,                  // inode 编号（通常为 0）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:462:5
[INFO] [stdout]     |
[INFO] [stdout] 462 |     pub entry_len: u16,              // 记录长度
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:463:5
[INFO] [stdout]     |
[INFO] [stdout] 463 |     pub name_len: u8,                // 名称长度（0）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:464:5
[INFO] [stdout]     |
[INFO] [stdout] 464 |     pub inode_type: u8,              // 文件类型
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:485:5
[INFO] [stdout]     |
[INFO] [stdout] 485 |     pub reserved: u32,               // 保留字段
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:486:5
[INFO] [stdout]     |
[INFO] [stdout] 486 |     pub checksum: u32,               // 校验和
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:513:5
[INFO] [stdout]     |
[INFO] [stdout] 513 |     pub reserved_zero1: u32,         // 保留字段 1
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:514:5
[INFO] [stdout]     |
[INFO] [stdout] 514 |     pub rec_len: u16,                // 记录长度（通常为 12）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:515:5
[INFO] [stdout]     |
[INFO] [stdout] 515 |     pub reserved_zero2: u8,          // 保留字段 2
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:516:5
[INFO] [stdout]     |
[INFO] [stdout] 516 |     pub reserved_ft: u8,             // 保留文件类型（0xDE）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:517:5
[INFO] [stdout]     |
[INFO] [stdout] 517 |     pub checksum: u32,               // 校验和
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:554:5
[INFO] [stdout]     |
[INFO] [stdout] 554 |     pub block_bitmap_lo: u32,        // 块位图块号（低32位）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:555:5
[INFO] [stdout]     |
[INFO] [stdout] 555 |     pub inode_bitmap_lo: u32,        // inode位图块号（低32位）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:556:5
[INFO] [stdout]     |
[INFO] [stdout] 556 |     pub inode_table_lo: u32,         // inode表起始块号（低32位）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:557:5
[INFO] [stdout]     |
[INFO] [stdout] 557 |     pub free_blocks_count_lo: u16,   // 空闲块数（低16位）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:558:5
[INFO] [stdout]     |
[INFO] [stdout] 558 |     pub free_inodes_count_lo: u16,   // 空闲inode数（低16位）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:559:5
[INFO] [stdout]     |
[INFO] [stdout] 559 |     pub used_dirs_count_lo: u16,     // 目录数（低16位）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:560:5
[INFO] [stdout]     |
[INFO] [stdout] 560 |     pub flags: u16,                  // 标志
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:561:5
[INFO] [stdout]     |
[INFO] [stdout] 561 |     pub exclude_bitmap_lo: u32,      // 排除位图块号（低32位）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:562:5
[INFO] [stdout]     |
[INFO] [stdout] 562 |     pub block_bitmap_csum_lo: u16,   // 块位图校验和（低16位）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:563:5
[INFO] [stdout]     |
[INFO] [stdout] 563 |     pub inode_bitmap_csum_lo: u16,   // inode位图校验和（低16位）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:564:5
[INFO] [stdout]     |
[INFO] [stdout] 564 |     pub itable_unused_lo: u16,       // 未使用inode数（低16位）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:565:5
[INFO] [stdout]     |
[INFO] [stdout] 565 |     pub checksum: u16,               // 校验和
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:568:5
[INFO] [stdout]     |
[INFO] [stdout] 568 |     pub block_bitmap_hi: u32,        // 块位图块号（高32位）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:569:5
[INFO] [stdout]     |
[INFO] [stdout] 569 |     pub inode_bitmap_hi: u32,        // inode位图块号（高32位）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:570:5
[INFO] [stdout]     |
[INFO] [stdout] 570 |     pub inode_table_hi: u32,         // inode表起始块号（高32位）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:571:5
[INFO] [stdout]     |
[INFO] [stdout] 571 |     pub free_blocks_count_hi: u16,   // 空闲块数（高16位）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:572:5
[INFO] [stdout]     |
[INFO] [stdout] 572 |     pub free_inodes_count_hi: u16,   // 空闲inode数（高16位）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:573:5
[INFO] [stdout]     |
[INFO] [stdout] 573 |     pub used_dirs_count_hi: u16,     // 目录数（高16位）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:574:5
[INFO] [stdout]     |
[INFO] [stdout] 574 |     pub itable_unused_hi: u16,       // 未使用inode数（高16位）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:575:5
[INFO] [stdout]     |
[INFO] [stdout] 575 |     pub exclude_bitmap_hi: u32,      // 排除位图块号（高32位）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:576:5
[INFO] [stdout]     |
[INFO] [stdout] 576 |     pub block_bitmap_csum_hi: u16,   // 块位图校验和（高16位）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:577:5
[INFO] [stdout]     |
[INFO] [stdout] 577 |     pub inode_bitmap_csum_hi: u16,   // inode位图校验和（高16位）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:578:5
[INFO] [stdout]     |
[INFO] [stdout] 578 |     pub reserved: u32,               // 保留
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:619:5
[INFO] [stdout]     |
[INFO] [stdout] 619 |     pub magic: u16,      // 魔数 0xF30A
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:620:5
[INFO] [stdout]     |
[INFO] [stdout] 620 |     pub entries: u16,    // 当前节点中的有效 entry 数量
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:621:5
[INFO] [stdout]     |
[INFO] [stdout] 621 |     pub max: u16,        // 节点中最大 entry 数量
[INFO] [stdout]     |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:622:5
[INFO] [stdout]     |
[INFO] [stdout] 622 |     pub depth: u16,      // 树的深度，0 表示叶子节点
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:623:5
[INFO] [stdout]     |
[INFO] [stdout] 623 |     pub generation: u32, // generation ID
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:667:5
[INFO] [stdout]     |
[INFO] [stdout] 667 |     pub block: u32,    // 逻辑块号（文件内偏移）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:668:5
[INFO] [stdout]     |
[INFO] [stdout] 668 |     pub len: u16,      // extent 长度（块数）
[INFO] [stdout]     |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:669:5
[INFO] [stdout]     |
[INFO] [stdout] 669 |     pub start_hi: u16, // 物理块号高 16 位
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:670:5
[INFO] [stdout]     |
[INFO] [stdout] 670 |     pub start_lo: u32, // 物理块号低 32 位
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:718:5
[INFO] [stdout]     |
[INFO] [stdout] 718 |     pub block: u32,   // 逻辑块号（覆盖范围的起始）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:719:5
[INFO] [stdout]     |
[INFO] [stdout] 719 |     pub leaf_lo: u32, // 指向的块号低 32 位
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:720:5
[INFO] [stdout]     |
[INFO] [stdout] 720 |     pub leaf_hi: u16, // 指向的块号高 16 位
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:721:5
[INFO] [stdout]     |
[INFO] [stdout] 721 |     pub unused: u16,  // 保留
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:787:5
[INFO] [stdout]     |
[INFO] [stdout] 787 |     pub h_magic: u32,       // 魔数：EXT4_XATTR_MAGIC (0xEA020000)
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:788:5
[INFO] [stdout]     |
[INFO] [stdout] 788 |     pub h_refcount: u32,    // 引用计数（块共享）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:789:5
[INFO] [stdout]     |
[INFO] [stdout] 789 |     pub h_blocks: u32,      // 使用的块数（通常为 1）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:790:5
[INFO] [stdout]     |
[INFO] [stdout] 790 |     pub h_hash: u32,        // 所有条目的哈希值
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:791:5
[INFO] [stdout]     |
[INFO] [stdout] 791 |     pub h_checksum: u32,    // CRC32C 校验和
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:792:5
[INFO] [stdout]     |
[INFO] [stdout] 792 |     pub h_reserved: [u32; 3], // 保留字段
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:809:5
[INFO] [stdout]     |
[INFO] [stdout] 809 |     pub h_magic: u32,       // 魔数：EXT4_XATTR_MAGIC
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:826:5
[INFO] [stdout]     |
[INFO] [stdout] 826 |     pub e_name_len: u8,     // 名称长度
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:827:5
[INFO] [stdout]     |
[INFO] [stdout] 827 |     pub e_name_index: u8,   // 命名空间索引
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:828:5
[INFO] [stdout]     |
[INFO] [stdout] 828 |     pub e_value_offs: u16,  // 值在块中的偏移
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:829:5
[INFO] [stdout]     |
[INFO] [stdout] 829 |     pub e_value_block: u32, // 值所在的块号（未使用，总是 0）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:830:5
[INFO] [stdout]     |
[INFO] [stdout] 830 |     pub e_value_size: u32,  // 值的大小
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:831:5
[INFO] [stdout]     |
[INFO] [stdout] 831 |     pub e_hash: u32,        // 名称和值的哈希
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `core::result::Result` that must be used
[INFO] [stdout]    --> src/extent/checksum.rs:210:5
[INFO] [stdout]     |
[INFO] [stdout] 210 | /     inode_ref.with_inode_mut(|inode| {
[INFO] [stdout] 211 | |         let inode_gen = u32::from_le(inode.generation);
[INFO] [stdout] ...   |
[INFO] [stdout] 221 | |         set_checksum(sb, inode_num, inode_gen, block_data);
[INFO] [stdout] 222 | |     });
[INFO] [stdout]     | |______^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout]     = note: `#[warn(unused_must_use)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 210 |     let _ = inode_ref.with_inode_mut(|inode| {
[INFO] [stdout]     |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `core::result::Result` that must be used
[INFO] [stdout]    --> src/extent/grow.rs:340:5
[INFO] [stdout]     |
[INFO] [stdout] 340 |     inode_ref.mark_dirty();
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 340 |     let _ = inode_ref.mark_dirty();
[INFO] [stdout]     |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `EXT_FIRST_EXTENT` should have a snake case name
[INFO] [stdout]   --> src/extent/helpers.rs:26:15
[INFO] [stdout]    |
[INFO] [stdout] 26 | pub unsafe fn EXT_FIRST_EXTENT(header: *const ext4_extent_header) -> *mut ext4_extent {
[INFO] [stdout]    |               ^^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `ext_first_extent`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(non_snake_case)]` (part of `#[warn(nonstandard_style)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `EXT_LAST_EXTENT` should have a snake case name
[INFO] [stdout]   --> src/extent/helpers.rs:52:15
[INFO] [stdout]    |
[INFO] [stdout] 52 | pub unsafe fn EXT_LAST_EXTENT(header: *const ext4_extent_header) -> *mut ext4_extent {
[INFO] [stdout]    |               ^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `ext_last_extent`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `EXT_MAX_EXTENT` should have a snake case name
[INFO] [stdout]   --> src/extent/helpers.rs:76:15
[INFO] [stdout]    |
[INFO] [stdout] 76 | pub unsafe fn EXT_MAX_EXTENT(header: *const ext4_extent_header) -> *mut ext4_extent {
[INFO] [stdout]    |               ^^^^^^^^^^^^^^ help: convert the identifier to snake case: `ext_max_extent`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `EXT_HAS_FREE_EXTENT` should have a snake case name
[INFO] [stdout]   --> src/extent/helpers.rs:92:15
[INFO] [stdout]    |
[INFO] [stdout] 92 | pub unsafe fn EXT_HAS_FREE_EXTENT(header: *const ext4_extent_header) -> bool {
[INFO] [stdout]    |               ^^^^^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `ext_has_free_extent`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `EXT_FIRST_INDEX` should have a snake case name
[INFO] [stdout]    --> src/extent/helpers.rs:118:15
[INFO] [stdout]     |
[INFO] [stdout] 118 | pub unsafe fn EXT_FIRST_INDEX(header: *const ext4_extent_header) -> *mut ext4_extent_idx {
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `ext_first_index`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `EXT_LAST_INDEX` should have a snake case name
[INFO] [stdout]    --> src/extent/helpers.rs:144:15
[INFO] [stdout]     |
[INFO] [stdout] 144 | pub unsafe fn EXT_LAST_INDEX(header: *const ext4_extent_header) -> *mut ext4_extent_idx {
[INFO] [stdout]     |               ^^^^^^^^^^^^^^ help: convert the identifier to snake case: `ext_last_index`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `EXT_MAX_INDEX` should have a snake case name
[INFO] [stdout]    --> src/extent/helpers.rs:168:15
[INFO] [stdout]     |
[INFO] [stdout] 168 | pub unsafe fn EXT_MAX_INDEX(header: *const ext4_extent_header) -> *mut ext4_extent_idx {
[INFO] [stdout]     |               ^^^^^^^^^^^^^ help: convert the identifier to snake case: `ext_max_index`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `EXT_HAS_FREE_INDEX` should have a snake case name
[INFO] [stdout]    --> src/extent/helpers.rs:184:15
[INFO] [stdout]     |
[INFO] [stdout] 184 | pub unsafe fn EXT_HAS_FREE_INDEX(header: *const ext4_extent_header) -> bool {
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `ext_has_free_index`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `core::result::Result` that must be used
[INFO] [stdout]    --> src/extent/remove.rs:515:5
[INFO] [stdout]     |
[INFO] [stdout] 515 |     inode_ref.mark_dirty();
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 515 |     let _ = inode_ref.mark_dirty();
[INFO] [stdout]     |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `core::result::Result` that must be used
[INFO] [stdout]    --> src/extent/split.rs:634:5
[INFO] [stdout]     |
[INFO] [stdout] 634 | /     inode_ref.with_inode_mut(|inode| -> Result<()> {
[INFO] [stdout] 635 | |         let data = unsafe {
[INFO] [stdout] 636 | |             core::slice::from_raw_parts_mut(
[INFO] [stdout] 637 | |                 inode.blocks.as_mut_ptr() as *mut u8,
[INFO] [stdout] ...   |
[INFO] [stdout] 658 | |         Ok(())
[INFO] [stdout] 659 | |     })?;
[INFO] [stdout]     | |_______^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 634 |     let _ = inode_ref.with_inode_mut(|inode| -> Result<()> {
[INFO] [stdout]     |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `core::result::Result` that must be used
[INFO] [stdout]    --> src/extent/split.rs:661:5
[INFO] [stdout]     |
[INFO] [stdout] 661 |     inode_ref.mark_dirty();
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 661 |     let _ = inode_ref.mark_dirty();
[INFO] [stdout]     |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `core::result::Result` that must be used
[INFO] [stdout]    --> src/extent/split.rs:707:5
[INFO] [stdout]     |
[INFO] [stdout] 707 | /     inode_ref.with_inode_mut(|inode| -> Result<()> {
[INFO] [stdout] 708 | |         let data = unsafe {
[INFO] [stdout] 709 | |             core::slice::from_raw_parts_mut(
[INFO] [stdout] 710 | |                 inode.blocks.as_mut_ptr() as *mut u8,
[INFO] [stdout] ...   |
[INFO] [stdout] 731 | |         Ok(())
[INFO] [stdout] 732 | |     })?;
[INFO] [stdout]     | |_______^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 707 |     let _ = inode_ref.with_inode_mut(|inode| -> Result<()> {
[INFO] [stdout]     |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `core::result::Result` that must be used
[INFO] [stdout]    --> src/extent/split.rs:734:5
[INFO] [stdout]     |
[INFO] [stdout] 734 |     inode_ref.mark_dirty();
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 734 |     let _ = inode_ref.mark_dirty();
[INFO] [stdout]     |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `core::result::Result` that must be used
[INFO] [stdout]    --> src/extent/unwritten.rs:195:9
[INFO] [stdout]     |
[INFO] [stdout] 195 | /         inode_ref.with_inode_mut(|inode| {
[INFO] [stdout] 196 | |             let header_ptr = inode.blocks.as_mut_ptr() as *mut crate::types::ext4_extent_header;
[INFO] [stdout] 197 | |             let extent_ptr = unsafe {
[INFO] [stdout] 198 | |                 (header_ptr.add(1) as *mut ext4_extent).add(extent_idx)
[INFO] [stdout] ...   |
[INFO] [stdout] 207 | |         });
[INFO] [stdout]     | |__________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 195 |         let _ = inode_ref.with_inode_mut(|inode| {
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `core::result::Result` that must be used
[INFO] [stdout]    --> src/extent/unwritten.rs:216:5
[INFO] [stdout]     |
[INFO] [stdout] 216 | /     inode_ref.with_inode_mut(|inode| {
[INFO] [stdout] 217 | |         let header_ptr = inode.blocks.as_mut_ptr() as *mut crate::types::ext4_extent_header;
[INFO] [stdout] 218 | |         let extent_ptr = unsafe {
[INFO] [stdout] 219 | |             (header_ptr.add(1) as *mut ext4_extent).add(extent_idx)
[INFO] [stdout] ...   |
[INFO] [stdout] 230 | |     });
[INFO] [stdout]     | |______^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 216 |     let _ = inode_ref.with_inode_mut(|inode| {
[INFO] [stdout]     |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `core::result::Result` that must be used
[INFO] [stdout]    --> src/extent/unwritten.rs:251:9
[INFO] [stdout]     |
[INFO] [stdout] 251 | /         inode_ref.with_inode_mut(|inode| {
[INFO] [stdout] 252 | |             let header_ptr = inode.blocks.as_mut_ptr() as *mut crate::types::ext4_extent_header;
[INFO] [stdout] 253 | |             let extent_ptr = unsafe {
[INFO] [stdout] 254 | |                 (header_ptr.add(1) as *mut ext4_extent).add(extent_idx)
[INFO] [stdout] ...   |
[INFO] [stdout] 267 | |         });
[INFO] [stdout]     | |__________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 251 |         let _ = inode_ref.with_inode_mut(|inode| {
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `core::result::Result` that must be used
[INFO] [stdout]    --> src/extent/unwritten_multilevel.rs:239:9
[INFO] [stdout]     |
[INFO] [stdout] 239 |         inode_ref.mark_dirty();
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 239 |         let _ = inode_ref.mark_dirty();
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `core::result::Result` that must be used
[INFO] [stdout]    --> src/extent/write.rs:105:5
[INFO] [stdout]     |
[INFO] [stdout] 105 |     inode_ref.mark_dirty();
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 105 |     let _ = inode_ref.mark_dirty();
[INFO] [stdout]     |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `core::result::Result` that must be used
[INFO] [stdout]     --> src/extent/write.rs:1467:5
[INFO] [stdout]      |
[INFO] [stdout] 1467 | /     inode_ref.with_inode_mut(|inode| {
[INFO] [stdout] 1468 | |         // 获取 extent header
[INFO] [stdout] 1469 | |         let header_ptr = inode.blocks.as_mut_ptr() as *mut ext4_extent_header;
[INFO] [stdout] 1470 | |         let header = unsafe { &mut *header_ptr };
[INFO] [stdout] ...    |
[INFO] [stdout] 1552 | |         Ok(())
[INFO] [stdout] 1553 | |     })?;
[INFO] [stdout]      | |_______^
[INFO] [stdout]      |
[INFO] [stdout]      = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]      |
[INFO] [stdout] 1467 |     let _ = inode_ref.with_inode_mut(|inode| {
[INFO] [stdout]      |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `core::result::Result` that must be used
[INFO] [stdout]     --> src/extent/write.rs:1556:5
[INFO] [stdout]      |
[INFO] [stdout] 1556 |     inode_ref.mark_dirty();
[INFO] [stdout]      |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout]      = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]      |
[INFO] [stdout] 1556 |     let _ = inode_ref.mark_dirty();
[INFO] [stdout]      |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `core::result::Result` that must be used
[INFO] [stdout]     --> src/extent/write.rs:2699:5
[INFO] [stdout]      |
[INFO] [stdout] 2699 | /     inode_ref.with_inode_mut(|inode| {
[INFO] [stdout] 2700 | |         let header_ptr = inode.blocks.as_mut_ptr() as *mut ext4_extent_header;
[INFO] [stdout] 2701 | |         let header = unsafe { &mut *header_ptr };
[INFO] [stdout] ...    |
[INFO] [stdout] 2730 | |         Ok(())
[INFO] [stdout] 2731 | |     })?;
[INFO] [stdout]      | |_______^
[INFO] [stdout]      |
[INFO] [stdout]      = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]      |
[INFO] [stdout] 2699 |     let _ = inode_ref.with_inode_mut(|inode| {
[INFO] [stdout]      |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `core::result::Result` that must be used
[INFO] [stdout]     --> src/extent/write.rs:2733:5
[INFO] [stdout]      |
[INFO] [stdout] 2733 |     inode_ref.mark_dirty();
[INFO] [stdout]      |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout]      = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]      |
[INFO] [stdout] 2733 |     let _ = inode_ref.mark_dirty();
[INFO] [stdout]      |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `core::result::Result` that must be used
[INFO] [stdout]     --> src/extent/write.rs:2747:5
[INFO] [stdout]      |
[INFO] [stdout] 2747 | /     inode_ref.with_inode_mut(|inode| {
[INFO] [stdout] 2748 | |         let header_ptr = inode.blocks.as_ptr() as *const ext4_extent_header;
[INFO] [stdout] 2749 | |         let header = unsafe { &*header_ptr };
[INFO] [stdout] ...    |
[INFO] [stdout] 2775 | |         Ok(())
[INFO] [stdout] 2776 | |     })?;
[INFO] [stdout]      | |_______^
[INFO] [stdout]      |
[INFO] [stdout]      = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]      |
[INFO] [stdout] 2747 |     let _ = inode_ref.with_inode_mut(|inode| {
[INFO] [stdout]      |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `core::result::Result` that must be used
[INFO] [stdout]     --> src/extent/write.rs:2778:5
[INFO] [stdout]      |
[INFO] [stdout] 2778 |     inode_ref.mark_dirty();
[INFO] [stdout]      |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout]      = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]      |
[INFO] [stdout] 2778 |     let _ = inode_ref.mark_dirty();
[INFO] [stdout]      |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]    --> src/dir/path_lookup.rs:145:26
[INFO] [stdout]     |
[INFO] [stdout] 145 |     pub fn get_inode_ref(&mut self, path: &str) -> Result<InodeRef<D>> {
[INFO] [stdout]     |                          ^^^^^^^^^                        ^^^^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]     |                          |
[INFO] [stdout]     |                          the lifetime is elided here
[INFO] [stdout]     |
[INFO] [stdout]     = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout]     = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]     |
[INFO] [stdout] 145 |     pub fn get_inode_ref(&mut self, path: &str) -> Result<InodeRef<'_, D>> {
[INFO] [stdout]     |                                                                    +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]   --> src/dir/hash.rs:16:1
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub const EXT2_HTREE_HALF_MD4: u8 = 1;
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]   --> src/dir/hash.rs:17:1
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub const EXT2_HTREE_TEA: u8 = 2;
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]   --> src/dir/hash.rs:18:1
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub const EXT2_HTREE_LEGACY_UNSIGNED: u8 = 3;
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]   --> src/dir/hash.rs:19:1
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub const EXT2_HTREE_HALF_MD4_UNSIGNED: u8 = 4;
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]   --> src/dir/hash.rs:20:1
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub const EXT2_HTREE_TEA_UNSIGNED: u8 = 5;
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/dir/hash.rs:30:5
[INFO] [stdout]    |
[INFO] [stdout] 30 |     pub hash: u32,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/dir/hash.rs:31:5
[INFO] [stdout]    |
[INFO] [stdout] 31 |     pub minor_hash: u32,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/dir/hash.rs:32:5
[INFO] [stdout]    |
[INFO] [stdout] 32 |     pub hash_version: u8,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/dir/hash.rs:33:5
[INFO] [stdout]    |
[INFO] [stdout] 33 |     pub seed: Option<[u32; 4]>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/dir/htree.rs:66:5
[INFO] [stdout]    |
[INFO] [stdout] 66 |     pub hash: u32,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/dir/htree.rs:67:5
[INFO] [stdout]    |
[INFO] [stdout] 67 |     pub minor_hash: u32,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/dir/htree.rs:68:5
[INFO] [stdout]    |
[INFO] [stdout] 68 |     pub hash_version: u8,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/dir/htree.rs:69:5
[INFO] [stdout]    |
[INFO] [stdout] 69 |     pub seed: Option<[u32; 4]>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]   --> src/dir/write.rs:46:1
[INFO] [stdout]    |
[INFO] [stdout] 46 | pub const EXT4_DE_REG_FILE: u8 = 1;
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]   --> src/dir/write.rs:47:1
[INFO] [stdout]    |
[INFO] [stdout] 47 | pub const EXT4_DE_DIR: u8 = 2;
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]   --> src/dir/write.rs:48:1
[INFO] [stdout]    |
[INFO] [stdout] 48 | pub const EXT4_DE_CHRDEV: u8 = 3;
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]   --> src/dir/write.rs:49:1
[INFO] [stdout]    |
[INFO] [stdout] 49 | pub const EXT4_DE_BLKDEV: u8 = 4;
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]   --> src/dir/write.rs:50:1
[INFO] [stdout]    |
[INFO] [stdout] 50 | pub const EXT4_DE_FIFO: u8 = 5;
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]   --> src/dir/write.rs:51:1
[INFO] [stdout]    |
[INFO] [stdout] 51 | pub const EXT4_DE_SOCK: u8 = 6;
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]   --> src/dir/write.rs:52:1
[INFO] [stdout]    |
[INFO] [stdout] 52 | pub const EXT4_DE_SYMLINK: u8 = 7;
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]    --> src/fs/filesystem.rs:228:26
[INFO] [stdout]     |
[INFO] [stdout] 228 |     pub fn get_inode_ref(&mut self, inode_num: u32) -> Result<InodeRef<D>> {
[INFO] [stdout]     |                          ^^^^^^^^^                            ^^^^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]     |                          |
[INFO] [stdout]     |                          the lifetime is elided here
[INFO] [stdout]     |
[INFO] [stdout]     = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]     |
[INFO] [stdout] 228 |     pub fn get_inode_ref(&mut self, inode_num: u32) -> Result<InodeRef<'_, D>> {
[INFO] [stdout]     |                                                                        +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]    --> src/fs/filesystem.rs:251:32
[INFO] [stdout]     |
[INFO] [stdout] 251 |     pub fn get_block_group_ref(&mut self, bgid: u32) -> Result<BlockGroupRef<D>> {
[INFO] [stdout]     |                                ^^^^^^^^^                       ^^^^^^^^^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]     |                                |
[INFO] [stdout]     |                                the lifetime is elided here
[INFO] [stdout]     |
[INFO] [stdout]     = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]     |
[INFO] [stdout] 251 |     pub fn get_block_group_ref(&mut self, bgid: u32) -> Result<BlockGroupRef<'_, D>> {
[INFO] [stdout]     |                                                                              +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]    --> src/transaction/simple.rs:116:22
[INFO] [stdout]     |
[INFO] [stdout] 116 |     pub fn get_block(&mut self, lba: u64) -> Result<Block<D>> {
[INFO] [stdout]     |                      ^^^^^^^^^                      ^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]     |                      |
[INFO] [stdout]     |                      the lifetime is elided here
[INFO] [stdout]     |
[INFO] [stdout]     = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]     |
[INFO] [stdout] 116 |     pub fn get_block(&mut self, lba: u64) -> Result<Block<'_, D>> {
[INFO] [stdout]     |                                                           +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]    --> src/transaction/simple.rs:130:29
[INFO] [stdout]     |
[INFO] [stdout] 130 |     pub fn get_block_noread(&mut self, lba: u64) -> Result<Block<D>> {
[INFO] [stdout]     |                             ^^^^^^^^^                      ^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]     |                             |
[INFO] [stdout]     |                             the lifetime is elided here
[INFO] [stdout]     |
[INFO] [stdout]     = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]     |
[INFO] [stdout] 130 |     pub fn get_block_noread(&mut self, lba: u64) -> Result<Block<'_, D>> {
[INFO] [stdout]     |                                                                  +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]    --> src/transaction/journal.rs:126:22
[INFO] [stdout]     |
[INFO] [stdout] 126 |     pub fn get_block(&mut self, _lba: u64) -> Result<Block<D>> {
[INFO] [stdout]     |                      ^^^^^^^^^                       ^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]     |                      |
[INFO] [stdout]     |                      the lifetime is elided here
[INFO] [stdout]     |
[INFO] [stdout]     = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]     |
[INFO] [stdout] 126 |     pub fn get_block(&mut self, _lba: u64) -> Result<Block<'_, D>> {
[INFO] [stdout]     |                                                            +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]   --> src/journal/types.rs:54:1
[INFO] [stdout]    |
[INFO] [stdout] 54 | pub const JBD_COMMIT_BLOCK: u32 = 2;
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]   --> src/journal/types.rs:55:1
[INFO] [stdout]    |
[INFO] [stdout] 55 | pub const JBD_SUPERBLOCK_V1: u32 = 3;
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]   --> src/journal/types.rs:56:1
[INFO] [stdout]    |
[INFO] [stdout] 56 | pub const JBD_SUPERBLOCK_V2: u32 = 4;
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]   --> src/journal/types.rs:57:1
[INFO] [stdout]    |
[INFO] [stdout] 57 | pub const JBD_REVOKE_BLOCK: u32 = 5;
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/journal/types.rs:67:5
[INFO] [stdout]    |
[INFO] [stdout] 67 |     Crc32 = 1,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/journal/types.rs:68:5
[INFO] [stdout]    |
[INFO] [stdout] 68 |     Md5 = 2,
[INFO] [stdout]    |     ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/journal/types.rs:69:5
[INFO] [stdout]    |
[INFO] [stdout] 69 |     Sha1 = 3,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/journal/types.rs:70:5
[INFO] [stdout]    |
[INFO] [stdout] 70 |     Crc32c = 4,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `JBD_BLOCKTYPE_DESCRIPTOR` should have a snake case name
[INFO] [stdout]    --> src/journal/recovery.rs:159:13
[INFO] [stdout]     |
[INFO] [stdout] 159 |             JBD_BLOCKTYPE_DESCRIPTOR => {
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `jbd_blocktype_descriptor`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `JBD_BLOCKTYPE_COMMIT` should have a snake case name
[INFO] [stdout]    --> src/journal/recovery.rs:172:13
[INFO] [stdout]     |
[INFO] [stdout] 172 |             JBD_BLOCKTYPE_COMMIT => {
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `jbd_blocktype_commit`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `JBD_BLOCKTYPE_REVOKE` should have a snake case name
[INFO] [stdout]    --> src/journal/recovery.rs:178:13
[INFO] [stdout]     |
[INFO] [stdout] 178 |             JBD_BLOCKTYPE_REVOKE => {
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `jbd_blocktype_revoke`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `core::result::Result` that must be used
[INFO] [stdout]    --> src/xattr/api.rs:415:9
[INFO] [stdout]     |
[INFO] [stdout] 415 | /         block_handle.with_data_mut(|block_data| {
[INFO] [stdout] 416 | |             // 初始化 xattr block
[INFO] [stdout] 417 | |             block::initialize_block(block_data)?;
[INFO] [stdout] ...   |
[INFO] [stdout] 435 | |             Ok::<(), Error>(())
[INFO] [stdout] 436 | |         })?;
[INFO] [stdout]     | |___________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 415 |         let _ = block_handle.with_data_mut(|block_data| {
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `core::result::Result` that must be used
[INFO] [stdout]    --> src/xattr/api.rs:468:17
[INFO] [stdout]     |
[INFO] [stdout] 468 | /                 new_block.with_data_mut(|new_data| {
[INFO] [stdout] 469 | |                     new_data[..block_size].copy_from_slice(&data_copy);
[INFO] [stdout] 470 | |                     // 设置新块的引用计数为 1
[INFO] [stdout] 471 | |                     block::set_refcount(new_data, 1)?;
[INFO] [stdout] 472 | |                     Ok::<(), Error>(())
[INFO] [stdout] 473 | |                 })?;
[INFO] [stdout]     | |___________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 468 |                 let _ = new_block.with_data_mut(|new_data| {
[INFO] [stdout]     |                 +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `core::result::Result` that must be used
[INFO] [stdout]    --> src/xattr/api.rs:479:17
[INFO] [stdout]     |
[INFO] [stdout] 479 | /                 old_block.with_data_mut(|data| {
[INFO] [stdout] 480 | |                     block::dec_refcount(data)?;
[INFO] [stdout] 481 | |                     Ok::<(), Error>(())
[INFO] [stdout] 482 | |                 })?;
[INFO] [stdout]     | |___________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 479 |                 let _ = old_block.with_data_mut(|data| {
[INFO] [stdout]     |                 +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `core::result::Result` that must be used
[INFO] [stdout]    --> src/xattr/api.rs:495:9
[INFO] [stdout]     |
[INFO] [stdout] 495 | /         block_handle.with_data_mut(|block_data| {
[INFO] [stdout] 496 | |             let first_offset = core::mem::size_of::<crate::types::ext4_xattr_header>();
[INFO] [stdout] ...   |
[INFO] [stdout] 513 | |             Ok::<(), Error>(())
[INFO] [stdout] 514 | |         })?;
[INFO] [stdout]     | |___________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 495 |         let _ = block_handle.with_data_mut(|block_data| {
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `core::result::Result` that must be used
[INFO] [stdout]    --> src/xattr/api.rs:569:13
[INFO] [stdout]     |
[INFO] [stdout] 569 | /             new_block.with_data_mut(|new_data| {
[INFO] [stdout] 570 | |                 new_data[..block_size].copy_from_slice(&data_copy);
[INFO] [stdout] 571 | |                 // 设置新块的引用计数为 1
[INFO] [stdout] 572 | |                 block::set_refcount(new_data, 1)?;
[INFO] [stdout] 573 | |                 Ok::<(), Error>(())
[INFO] [stdout] 574 | |             })?;
[INFO] [stdout]     | |_______________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 569 |             let _ = new_block.with_data_mut(|new_data| {
[INFO] [stdout]     |             +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `core::result::Result` that must be used
[INFO] [stdout]    --> src/xattr/api.rs:580:13
[INFO] [stdout]     |
[INFO] [stdout] 580 | /             old_block.with_data_mut(|data| {
[INFO] [stdout] 581 | |                 block::dec_refcount(data)?;
[INFO] [stdout] 582 | |                 Ok::<(), Error>(())
[INFO] [stdout] 583 | |             })?;
[INFO] [stdout]     | |_______________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 580 |             let _ = old_block.with_data_mut(|data| {
[INFO] [stdout]     |             +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 3.00s
[INFO] running `Command { std: "docker" "inspect" "15b5c5cf18c16dac2bd0d0a47b9b63305daf3bba26c258310a70b3fdbd33995a", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "15b5c5cf18c16dac2bd0d0a47b9b63305daf3bba26c258310a70b3fdbd33995a", kill_on_drop: false }`
[INFO] [stdout] 15b5c5cf18c16dac2bd0d0a47b9b63305daf3bba26c258310a70b3fdbd33995a
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-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=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-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:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+1.94.0" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] cf9fc40f252b6cdf1a5272e375ed5728663152a3aecf15ba971dda33dbf765a9
[INFO] running `Command { std: "docker" "start" "-a" "cf9fc40f252b6cdf1a5272e375ed5728663152a3aecf15ba971dda33dbf765a9", kill_on_drop: false }`
[INFO] [stdout] warning: unused import: `alloc::vec`
[INFO] [stdout]  --> src/block/device.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use alloc::vec;
[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: `alloc::vec`
[INFO] [stdout]  --> src/superblock/write.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use alloc::vec;
[INFO] [stdout]   |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `alloc::vec`
[INFO] [stdout]   --> src/block_group/write.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | use alloc::vec;
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Block` and `consts::*`
[INFO] [stdout]   --> src/extent/merge.rs:25:13
[INFO] [stdout]    |
[INFO] [stdout] 25 |     block::{Block, BlockDevice},
[INFO] [stdout]    |             ^^^^^
[INFO] [stdout] 26 |     consts::*,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ext4_ext_pblock`
[INFO] [stdout]   --> src/extent/merge.rs:33:15
[INFO] [stdout]    |
[INFO] [stdout] 33 |     helpers::{ext4_ext_pblock, ext4_ext_store_pblock},
[INFO] [stdout]    |               ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ext4_ext_pblock` and `ext4_idx_pblock`
[INFO] [stdout]   --> src/extent/remove.rs:33:15
[INFO] [stdout]    |
[INFO] [stdout] 33 |     helpers::{ext4_ext_pblock, ext4_ext_store_pblock, ext4_idx_pblock},
[INFO] [stdout]    |               ^^^^^^^^^^^^^^^                         ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `alloc::vec`
[INFO] [stdout]   --> src/extent/tree.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | use alloc::vec;
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `balloc::BlockAllocator`
[INFO] [stdout]   --> src/extent/unwritten.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 28 |     balloc::BlockAllocator,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ExtentPath`, `ext4_ext_pblock`, and `ext4_ext_store_pblock`
[INFO] [stdout]   --> src/extent/unwritten_multilevel.rs:25:15
[INFO] [stdout]    |
[INFO] [stdout] 25 |     helpers::{ext4_ext_pblock, ext4_ext_store_pblock},
[INFO] [stdout]    |               ^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 31 |     write::{ExtentNodeType, ExtentPath, ExtentWriter},
[INFO] [stdout]    |                             ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `alloc::vec::Vec`
[INFO] [stdout]   --> src/extent/unwritten_multilevel.rs:34:5
[INFO] [stdout]    |
[INFO] [stdout] 34 | use alloc::vec::Vec;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `alloc::vec::Vec`
[INFO] [stdout]   --> src/extent/verify.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 | use alloc::vec::Vec;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `consts::*`
[INFO] [stdout]   --> src/extent/write.rs:32:5
[INFO] [stdout]    |
[INFO] [stdout] 32 |     consts::*,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `metadata-csum`
[INFO] [stdout]    --> src/dir/checksum.rs:147:7
[INFO] [stdout]     |
[INFO] [stdout] 147 | #[cfg(feature = "metadata-csum")]
[INFO] [stdout]     |       ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `c-api`, `default`, and `std`
[INFO] [stdout]     = help: consider adding `metadata-csum` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout]     = note: `#[warn(unexpected_cfgs)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `metadata-csum`
[INFO] [stdout]    --> src/dir/checksum.rs:173:11
[INFO] [stdout]     |
[INFO] [stdout] 173 | #[cfg(not(feature = "metadata-csum"))]
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `c-api`, `default`, and `std`
[INFO] [stdout]     = help: consider adding `metadata-csum` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `metadata-csum`
[INFO] [stdout]    --> src/dir/checksum.rs:192:7
[INFO] [stdout]     |
[INFO] [stdout] 192 | #[cfg(feature = "metadata-csum")]
[INFO] [stdout]     |       ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `c-api`, `default`, and `std`
[INFO] [stdout]     = help: consider adding `metadata-csum` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `metadata-csum`
[INFO] [stdout]    --> src/dir/checksum.rs:223:11
[INFO] [stdout]     |
[INFO] [stdout] 223 | #[cfg(not(feature = "metadata-csum"))]
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `c-api`, `default`, and `std`
[INFO] [stdout]     = help: consider adding `metadata-csum` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `BlockDev` and `superblock::Superblock`
[INFO] [stdout]   --> src/dir/iterator.rs:15:20
[INFO] [stdout]    |
[INFO] [stdout] 15 |     block::{Block, BlockDev, BlockDevice},
[INFO] [stdout]    |                    ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 19 |     superblock::Superblock,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `BlockDev`
[INFO] [stdout]   --> src/dir/htree.rs:38:20
[INFO] [stdout]    |
[INFO] [stdout] 38 |     block::{Block, BlockDev, BlockDevice},
[INFO] [stdout]    |                    ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ext4_dir_idx_node`
[INFO] [stdout]    --> src/dir/htree.rs:574:54
[INFO] [stdout]     |
[INFO] [stdout] 574 | use crate::types::{ext4_dir_en, ext4_dir_entry_tail, ext4_dir_idx_node, ext4_fake_dir_entry};
[INFO] [stdout]     |                                                      ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `get_tail_mut`
[INFO] [stdout]    --> src/dir/htree.rs:576:40
[INFO] [stdout]     |
[INFO] [stdout] 576 | use super::checksum::{init_entry_tail, get_tail_mut};
[INFO] [stdout]     |                                        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `BlockDev`
[INFO] [stdout]   --> src/dir/write.rs:34:20
[INFO] [stdout]    |
[INFO] [stdout] 34 |     block::{Block, BlockDev, BlockDevice},
[INFO] [stdout]    |                    ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `alloc::vec::Vec`
[INFO] [stdout]   --> src/dir/write.rs:42:5
[INFO] [stdout]    |
[INFO] [stdout] 42 | use alloc::vec::Vec;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `metadata-csum`
[INFO] [stdout]    --> src/dir/write.rs:966:11
[INFO] [stdout]     |
[INFO] [stdout] 966 |     #[cfg(feature = "metadata-csum")]
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `c-api`, `default`, and `std`
[INFO] [stdout]     = help: consider adding `metadata-csum` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `metadata-csum`
[INFO] [stdout]    --> src/dir/write.rs:994:15
[INFO] [stdout]     |
[INFO] [stdout] 994 |     #[cfg(not(feature = "metadata-csum"))]
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `c-api`, `default`, and `std`
[INFO] [stdout]     = help: consider adding `metadata-csum` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `self`
[INFO] [stdout]     --> src/fs/filesystem.rs:1022:45
[INFO] [stdout]      |
[INFO] [stdout] 1022 |         use crate::{consts::*, dir::write::{self, EXT4_DE_REG_FILE}, extent::tree_init};
[INFO] [stdout]      |                                             ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `self`
[INFO] [stdout]     --> src/fs/filesystem.rs:1093:45
[INFO] [stdout]      |
[INFO] [stdout] 1093 |         use crate::{consts::*, dir::write::{self, EXT4_DE_DIR}, extent::tree_init};
[INFO] [stdout]      |                                             ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `extent::ExtentTree`
[INFO] [stdout]  --> src/fs/file.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 |     extent::ExtentTree,
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `block_group::BlockGroup`
[INFO] [stdout]  --> src/ialloc/alloc.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 |     block_group::BlockGroup,
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ErrorKind` and `block_group::BlockGroup`
[INFO] [stdout]  --> src/ialloc/free.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 |     block_group::BlockGroup,
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 7 |     error::{Error, ErrorKind, Result},
[INFO] [stdout]   |                    ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `metadata-csum`
[INFO] [stdout]   --> src/ialloc/checksum.rs:23:7
[INFO] [stdout]    |
[INFO] [stdout] 23 | #[cfg(feature = "metadata-csum")]
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `c-api`, `default`, and `std`
[INFO] [stdout]    = help: consider adding `metadata-csum` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `metadata-csum`
[INFO] [stdout]   --> src/ialloc/checksum.rs:42:11
[INFO] [stdout]    |
[INFO] [stdout] 42 | #[cfg(not(feature = "metadata-csum"))]
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `c-api`, `default`, and `std`
[INFO] [stdout]    = help: consider adding `metadata-csum` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `metadata-csum`
[INFO] [stdout]   --> src/ialloc/checksum.rs:87:7
[INFO] [stdout]    |
[INFO] [stdout] 87 | #[cfg(feature = "metadata-csum")]
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `c-api`, `default`, and `std`
[INFO] [stdout]    = help: consider adding `metadata-csum` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `metadata-csum`
[INFO] [stdout]    --> src/ialloc/checksum.rs:113:11
[INFO] [stdout]     |
[INFO] [stdout] 113 | #[cfg(not(feature = "metadata-csum"))]
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `c-api`, `default`, and `std`
[INFO] [stdout]     = help: consider adding `metadata-csum` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `metadata-csum`
[INFO] [stdout]   --> src/balloc/checksum.rs:23:7
[INFO] [stdout]    |
[INFO] [stdout] 23 | #[cfg(feature = "metadata-csum")]
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `c-api`, `default`, and `std`
[INFO] [stdout]    = help: consider adding `metadata-csum` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `metadata-csum`
[INFO] [stdout]   --> src/balloc/checksum.rs:42:11
[INFO] [stdout]    |
[INFO] [stdout] 42 | #[cfg(not(feature = "metadata-csum"))]
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `c-api`, `default`, and `std`
[INFO] [stdout]    = help: consider adding `metadata-csum` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `metadata-csum`
[INFO] [stdout]   --> src/balloc/checksum.rs:87:7
[INFO] [stdout]    |
[INFO] [stdout] 87 | #[cfg(feature = "metadata-csum")]
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `c-api`, `default`, and `std`
[INFO] [stdout]    = help: consider adding `metadata-csum` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `metadata-csum`
[INFO] [stdout]    --> src/balloc/checksum.rs:113:11
[INFO] [stdout]     |
[INFO] [stdout] 113 | #[cfg(not(feature = "metadata-csum"))]
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `c-api`, `default`, and `std`
[INFO] [stdout]     = help: consider adding `metadata-csum` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `block_group::BlockGroup`
[INFO] [stdout]  --> src/balloc/free.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 |     block_group::BlockGroup,
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `block_group::BlockGroup`
[INFO] [stdout]  --> src/balloc/alloc.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 |     block_group::BlockGroup,
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `BlockGroupRef`
[INFO] [stdout]  --> src/balloc/fs_integration.rs:9:10
[INFO] [stdout]   |
[INFO] [stdout] 9 |     fs::{BlockGroupRef, InodeRef},
[INFO] [stdout]   |          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ErrorKind`
[INFO] [stdout]  --> src/journal/jbd_fs.rs:9:20
[INFO] [stdout]   |
[INFO] [stdout] 9 |     error::{Error, ErrorKind, Result},
[INFO] [stdout]   |                    ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::error::Result`
[INFO] [stdout]  --> src/journal/jbd_journal.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::error::Result;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `types::*`
[INFO] [stdout]  --> src/journal/jbd_trans.rs:5:21
[INFO] [stdout]   |
[INFO] [stdout] 5 | use super::{JbdBuf, types::*};
[INFO] [stdout]   |                     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `BlockDevice`, `Block`, and `error::Result`
[INFO] [stdout]  --> src/journal/jbd_buf.rs:6:13
[INFO] [stdout]   |
[INFO] [stdout] 6 |     block::{Block, BlockDevice},
[INFO] [stdout]   |             ^^^^^  ^^^^^^^^^^^
[INFO] [stdout] 7 |     error::Result,
[INFO] [stdout]   |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `alloc::collections::VecDeque`
[INFO] [stdout]  --> src/journal/jbd_buf.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use alloc::collections::VecDeque;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `JournalError` and `checksum`
[INFO] [stdout]  --> src/journal/recovery.rs:5:13
[INFO] [stdout]   |
[INFO] [stdout] 5 | use super::{checksum, types::*, JbdFs, JournalError};
[INFO] [stdout]   |             ^^^^^^^^                   ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ErrorKind`
[INFO] [stdout]  --> src/journal/recovery.rs:8:20
[INFO] [stdout]   |
[INFO] [stdout] 8 |     error::{Error, ErrorKind, Result},
[INFO] [stdout]   |                    ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ErrorKind`
[INFO] [stdout]  --> src/journal/commit.rs:8:20
[INFO] [stdout]   |
[INFO] [stdout] 8 |     error::{Error, ErrorKind, Result},
[INFO] [stdout]   |                    ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `JournalError`
[INFO] [stdout]  --> src/journal/checkpoint.rs:5:52
[INFO] [stdout]   |
[INFO] [stdout] 5 | use super::{types::*, JbdFs, JbdJournal, JbdTrans, JournalError};
[INFO] [stdout]   |                                                    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::error::Result`
[INFO] [stdout]  --> src/journal/checksum.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::error::Result;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around assigned value
[INFO] [stdout]    --> src/xattr/search.rs:249:15
[INFO] [stdout]     |
[INFO] [stdout] 249 |     let len = ((name_len + EXT4_XATTR_ROUND as usize + size_of::<ext4_xattr_entry>())
[INFO] [stdout]     |               ^
[INFO] [stdout] 250 |         & !(EXT4_XATTR_ROUND as usize));
[INFO] [stdout]     |                                       ^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 249 ~     let len = (name_len + EXT4_XATTR_ROUND as usize + size_of::<ext4_xattr_entry>())
[INFO] [stdout] 250 ~         & !(EXT4_XATTR_ROUND as usize);
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around assigned value
[INFO] [stdout]    --> src/xattr/ibody.rs:261:23
[INFO] [stdout]     |
[INFO] [stdout] 261 |             let len = ((entry_name_len + EXT4_XATTR_ROUND as usize + size_of::<ext4_xattr_entry>())
[INFO] [stdout]     |                       ^
[INFO] [stdout] 262 |                 & !(EXT4_XATTR_ROUND as usize));
[INFO] [stdout]     |                                               ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 261 ~             let len = (entry_name_len + EXT4_XATTR_ROUND as usize + size_of::<ext4_xattr_entry>())
[INFO] [stdout] 262 ~                 & !(EXT4_XATTR_ROUND as usize);
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around assigned value
[INFO] [stdout]    --> src/xattr/block.rs:142:25
[INFO] [stdout]     |
[INFO] [stdout] 142 |         let entry_len = ((name_len + EXT4_XATTR_ROUND as usize + size_of::<ext4_xattr_entry>())
[INFO] [stdout]     |                         ^
[INFO] [stdout] 143 |             & !(EXT4_XATTR_ROUND as usize));
[INFO] [stdout]     |                                           ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 142 ~         let entry_len = (name_len + EXT4_XATTR_ROUND as usize + size_of::<ext4_xattr_entry>())
[INFO] [stdout] 143 ~             & !(EXT4_XATTR_ROUND as usize);
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around assigned value
[INFO] [stdout]    --> src/xattr/block.rs:314:25
[INFO] [stdout]     |
[INFO] [stdout] 314 |         let entry_len = ((name_len + EXT4_XATTR_ROUND as usize + size_of::<ext4_xattr_entry>())
[INFO] [stdout]     |                         ^
[INFO] [stdout] 315 |             & !(EXT4_XATTR_ROUND as usize));
[INFO] [stdout]     |                                           ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 314 ~         let entry_len = (name_len + EXT4_XATTR_ROUND as usize + size_of::<ext4_xattr_entry>())
[INFO] [stdout] 315 ~             & !(EXT4_XATTR_ROUND as usize);
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around block return value
[INFO] [stdout]   --> src/xattr/write.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 19 |     ((name_len + EXT4_XATTR_ROUND as usize + size_of::<ext4_xattr_entry>())
[INFO] [stdout]    |     ^
[INFO] [stdout] 20 |         & !(EXT4_XATTR_ROUND as usize))
[INFO] [stdout]    |                                       ^
[INFO] [stdout]    |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 19 ~     (name_len + EXT4_XATTR_ROUND as usize + size_of::<ext4_xattr_entry>())
[INFO] [stdout] 20 ~         & !(EXT4_XATTR_ROUND as usize)
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around block return value
[INFO] [stdout]   --> src/xattr/write.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 28 |     ((value_len + EXT4_XATTR_ROUND as usize) & !(EXT4_XATTR_ROUND as usize))
[INFO] [stdout]    |     ^                                                                      ^
[INFO] [stdout]    |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 28 -     ((value_len + EXT4_XATTR_ROUND as usize) & !(EXT4_XATTR_ROUND as usize))
[INFO] [stdout] 28 +     (value_len + EXT4_XATTR_ROUND as usize) & !(EXT4_XATTR_ROUND as usize)
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `balloc` and `superblock::Superblock`
[INFO] [stdout]   --> src/xattr/api.rs:44:5
[INFO] [stdout]    |
[INFO] [stdout] 44 |     superblock::Superblock,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 45 |     balloc,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `super::prefix`
[INFO] [stdout]   --> src/xattr/api.rs:48:5
[INFO] [stdout]    |
[INFO] [stdout] 48 | use super::prefix;
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around assigned value
[INFO] [stdout]    --> src/xattr/api.rs:151:33
[INFO] [stdout]     |
[INFO] [stdout] 151 | ...   let entry_len = ((name_len + crate::consts::EXT4_XATTR_ROUND as usize + core::mem::size_of::<crate::types::ext4_xattr_entry>())
[INFO] [stdout]     |                       ^
[INFO] [stdout] 152 | ...       & !(crate::consts::EXT4_XATTR_ROUND as usize));
[INFO] [stdout]     |                                                        ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 151 ~                 let entry_len = (name_len + crate::consts::EXT4_XATTR_ROUND as usize + core::mem::size_of::<crate::types::ext4_xattr_entry>())
[INFO] [stdout] 152 ~                     & !(crate::consts::EXT4_XATTR_ROUND as usize);
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `dir::entry::DirIterator`: Use `iterator` module instead
[INFO] [stdout]   --> src/dir/lookup.rs:13:19
[INFO] [stdout]    |
[INFO] [stdout] 13 | use super::entry::DirIterator;
[INFO] [stdout]    |                   ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(deprecated)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `dir::entry::DirIterator`: Use `iterator` module instead
[INFO] [stdout]   --> src/dir/lookup.rs:40:24
[INFO] [stdout]    |
[INFO] [stdout] 40 |         let mut iter = DirIterator::new(self.bdev, self.sb, dir_inode)?;
[INFO] [stdout]    |                        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `dir::entry::DirIterator::<'a, D>::new`: Use `iterator` module instead
[INFO] [stdout]   --> src/dir/lookup.rs:40:37
[INFO] [stdout]    |
[INFO] [stdout] 40 |         let mut iter = DirIterator::new(self.bdev, self.sb, dir_inode)?;
[INFO] [stdout]    |                                     ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `dir::entry::DirIterator::<'a, D>::next_entry`: Use `iterator` module instead
[INFO] [stdout]   --> src/dir/lookup.rs:42:38
[INFO] [stdout]    |
[INFO] [stdout] 42 |         while let Some(entry) = iter.next_entry()? {
[INFO] [stdout]    |                                      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `dir::entry::DirEntry::name`: Use `iterator` module instead
[INFO] [stdout]   --> src/dir/lookup.rs:43:16
[INFO] [stdout]    |
[INFO] [stdout] 43 |             if entry.name == name {
[INFO] [stdout]    |                ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `dir::entry::DirEntry::inode`: Use `iterator` module instead
[INFO] [stdout]   --> src/dir/lookup.rs:44:32
[INFO] [stdout]    |
[INFO] [stdout] 44 |                 return Ok(Some(entry.inode));
[INFO] [stdout]    |                                ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `depth`
[INFO] [stdout]    --> src/extent/remove.rs:174:10
[INFO] [stdout]     |
[INFO] [stdout] 174 |     let (depth, root_is_leaf) = inode_ref.with_inode(|inode| -> Result<(u16, bool)> {
[INFO] [stdout]     |          ^^^^^ help: if this is intentional, prefix it with an underscore: `_depth`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `allocator`
[INFO] [stdout]    --> src/extent/remove.rs:462:5
[INFO] [stdout]     |
[INFO] [stdout] 462 |     allocator: &mut BlockAllocator,
[INFO] [stdout]     |     ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_allocator`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `depth`
[INFO] [stdout]   --> src/extent/split.rs:76:9
[INFO] [stdout]    |
[INFO] [stdout] 76 |     let depth = node.depth;
[INFO] [stdout]    |         ^^^^^ help: if this is intentional, prefix it with an underscore: `_depth`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `depth`
[INFO] [stdout]    --> src/extent/split.rs:139:9
[INFO] [stdout]     |
[INFO] [stdout] 139 |     let depth = node.depth;
[INFO] [stdout]     |         ^^^^^ help: if this is intentional, prefix it with an underscore: `_depth`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `leaf_depth`
[INFO] [stdout]   --> src/extent/unwritten_multilevel.rs:83:9
[INFO] [stdout]    |
[INFO] [stdout] 83 |     let leaf_depth = leaf.depth;
[INFO] [stdout]    |         ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_leaf_depth`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ee_start`
[INFO] [stdout]   --> src/extent/unwritten_multilevel.rs:94:28
[INFO] [stdout]    |
[INFO] [stdout] 94 |     let (ee_block, ee_len, ee_start, _was_unwritten) = extent_info;
[INFO] [stdout]    |                            ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_ee_start`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `block_size`
[INFO] [stdout]    --> src/extent/unwritten_multilevel.rs:209:5
[INFO] [stdout]     |
[INFO] [stdout] 209 |     block_size: u32,
[INFO] [stdout]     |     ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_block_size`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ee_start`
[INFO] [stdout]    --> src/extent/unwritten_multilevel.rs:384:45
[INFO] [stdout]     |
[INFO] [stdout] 384 |         let (extent_idx, (ee_block, ee_len, ee_start, was_unwritten)) =
[INFO] [stdout]     |                                             ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_ee_start`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `pblock`
[INFO] [stdout]   --> src/extent/verify.rs:83:5
[INFO] [stdout]    |
[INFO] [stdout] 83 |     pblock: u64,
[INFO] [stdout]    |     ^^^^^^ help: if this is intentional, prefix it with an underscore: `_pblock`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `block_size`
[INFO] [stdout]    --> src/extent/write.rs:733:13
[INFO] [stdout]     |
[INFO] [stdout] 733 |         let block_size = inode_ref.bdev().block_size();
[INFO] [stdout]     |             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_block_size`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `depth`
[INFO] [stdout]     --> src/extent/write.rs:1392:22
[INFO] [stdout]      |
[INFO] [stdout] 1392 |     let (leaf_block, depth) = inode_ref.with_inode(|inode| -> Result<(u64, u16)> {
[INFO] [stdout]      |                      ^^^^^ help: if this is intentional, prefix it with an underscore: `_depth`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `fake_entry`
[INFO] [stdout]    --> src/dir/htree.rs:284:21
[INFO] [stdout]     |
[INFO] [stdout] 284 |                 let fake_entry = unsafe { &*(data.as_ptr() as *const crate::types::ext4_fake_dir_entry) };
[INFO] [stdout]     |                     ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_fake_entry`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `block_size`
[INFO] [stdout]    --> src/dir/htree.rs:239:9
[INFO] [stdout]     |
[INFO] [stdout] 239 |     let block_size = inode_ref.sb().block_size();
[INFO] [stdout]     |         ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_block_size`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `fake_entry`
[INFO] [stdout]    --> src/dir/htree.rs:417:21
[INFO] [stdout]     |
[INFO] [stdout] 417 |                 let fake_entry = unsafe { &*(data.as_ptr() as *const crate::types::ext4_fake_dir_entry) };
[INFO] [stdout]     |                     ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_fake_entry`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `block_size`
[INFO] [stdout]    --> src/dir/htree.rs:373:9
[INFO] [stdout]     |
[INFO] [stdout] 373 |     let block_size = inode_ref.sb().block_size();
[INFO] [stdout]     |         ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_block_size`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `leaf_block`
[INFO] [stdout]    --> src/dir/htree.rs:523:9
[INFO] [stdout]     |
[INFO] [stdout] 523 |     let leaf_block = get_leaf_block(inode_ref, &hash_info)?;
[INFO] [stdout]     |         ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_leaf_block`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `position_in_entries`
[INFO] [stdout]     --> src/dir/htree.rs:1110:5
[INFO] [stdout]      |
[INFO] [stdout] 1110 |     position_in_entries: usize,
[INFO] [stdout]      |     ^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_position_in_entries`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `required_len`
[INFO] [stdout]    --> src/dir/write.rs:572:5
[INFO] [stdout]     |
[INFO] [stdout] 572 |     required_len: u16,
[INFO] [stdout]     |     ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_required_len`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `required_len`
[INFO] [stdout]    --> src/dir/write.rs:652:5
[INFO] [stdout]     |
[INFO] [stdout] 652 |     required_len: u16,
[INFO] [stdout]     |     ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_required_len`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary `unsafe` block
[INFO] [stdout]    --> src/dir/entry.rs:141:29
[INFO] [stdout]     |
[INFO] [stdout] 141 |             let entry_ptr = unsafe {
[INFO] [stdout]     |                             ^^^^^^ unnecessary `unsafe` block
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_unsafe)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `new_links`
[INFO] [stdout]     --> src/fs/filesystem.rs:2311:34
[INFO] [stdout]      |
[INFO] [stdout] 2311 |                 let (old_is_dir, new_links) = {
[INFO] [stdout]      |                                  ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_new_links`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `partition_offset`
[INFO] [stdout]    --> src/cache/block_cache.rs:364:9
[INFO] [stdout]     |
[INFO] [stdout] 364 |         partition_offset: u64,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_partition_offset`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `used_dirs`
[INFO] [stdout]   --> src/ialloc/alloc.rs:72:31
[INFO] [stdout]    |
[INFO] [stdout] 72 |             let (free_inodes, used_dirs, bmp_blk_addr, bg_copy) = {
[INFO] [stdout]    |                               ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_used_dirs`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/journal/recovery.rs:172:13
[INFO] [stdout]     |
[INFO] [stdout] 159 |             JBD_BLOCKTYPE_DESCRIPTOR => {
[INFO] [stdout]     |             ------------------------ matches any value
[INFO] [stdout] ...
[INFO] [stdout] 172 |             JBD_BLOCKTYPE_COMMIT => {
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^ no value can reach this
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unreachable_patterns)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/journal/recovery.rs:178:13
[INFO] [stdout]     |
[INFO] [stdout] 159 |             JBD_BLOCKTYPE_DESCRIPTOR => {
[INFO] [stdout]     |             ------------------------ matches any value
[INFO] [stdout] ...
[INFO] [stdout] 178 |             JBD_BLOCKTYPE_REVOKE => {
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^ no value can reach this
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/journal/recovery.rs:182:13
[INFO] [stdout]     |
[INFO] [stdout] 159 |             JBD_BLOCKTYPE_DESCRIPTOR => {
[INFO] [stdout]     |             ------------------------ matches any value
[INFO] [stdout] ...
[INFO] [stdout] 182 |             _ => {
[INFO] [stdout]     |             ^ no value can reach this
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `JBD_BLOCKTYPE_DESCRIPTOR`
[INFO] [stdout]    --> src/journal/recovery.rs:159:13
[INFO] [stdout]     |
[INFO] [stdout] 159 |             JBD_BLOCKTYPE_DESCRIPTOR => {
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_JBD_BLOCKTYPE_DESCRIPTOR`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `JBD_BLOCKTYPE_COMMIT`
[INFO] [stdout]    --> src/journal/recovery.rs:172:13
[INFO] [stdout]     |
[INFO] [stdout] 172 |             JBD_BLOCKTYPE_COMMIT => {
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_JBD_BLOCKTYPE_COMMIT`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `JBD_BLOCKTYPE_REVOKE`
[INFO] [stdout]    --> src/journal/recovery.rs:178:13
[INFO] [stdout]     |
[INFO] [stdout] 178 |             JBD_BLOCKTYPE_REVOKE => {
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_JBD_BLOCKTYPE_REVOKE`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/journal/commit.rs:167:25
[INFO] [stdout]     |
[INFO] [stdout] 167 |                     let mut tag = jbd_block_tag {
[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: `trans`
[INFO] [stdout]    --> src/journal/commit.rs:229:5
[INFO] [stdout]     |
[INFO] [stdout] 229 |     trans: &JbdTrans,
[INFO] [stdout]     |     ^^^^^ help: if this is intentional, prefix it with an underscore: `_trans`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `entry_offset`
[INFO] [stdout]    --> src/xattr/write.rs:159:18
[INFO] [stdout]     |
[INFO] [stdout] 159 |     if let Some((entry_offset, old_value_offset, old_value_size)) = found {
[INFO] [stdout]     |                  ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_entry_offset`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `block_size`
[INFO] [stdout]   --> src/xattr/api.rs:93:13
[INFO] [stdout]    |
[INFO] [stdout] 93 |         let block_size = inode_ref.superblock().block_size() as usize;
[INFO] [stdout]    |             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_block_size`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type `TransactionState` is more private than the item `SimpleTransaction::<'a, D>::state`
[INFO] [stdout]    --> src/transaction/simple.rs:220:5
[INFO] [stdout]     |
[INFO] [stdout] 220 |     pub fn state(&self) -> TransactionState {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ method `SimpleTransaction::<'a, D>::state` is reachable at visibility `pub`
[INFO] [stdout]     |
[INFO] [stdout] note: but type `TransactionState` is only usable at visibility `pub(self)`
[INFO] [stdout]    --> src/transaction/simple.rs:63:1
[INFO] [stdout]     |
[INFO] [stdout]  63 | enum TransactionState {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: `#[warn(private_interfaces)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `inner_mut` is never used
[INFO] [stdout]   --> src/block_group/write.rs:56:19
[INFO] [stdout]    |
[INFO] [stdout] 54 | impl BlockGroup {
[INFO] [stdout]    | --------------- method in this implementation
[INFO] [stdout] 55 |     /// 获取内部块组描述符的可变引用
[INFO] [stdout] 56 |     pub(crate) fn inner_mut(&mut self) -> &mut ext4_group_desc {
[INFO] [stdout]    |                   ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `read_first_leaf_block` is never used
[INFO] [stdout]    --> src/extent/write.rs:692:4
[INFO] [stdout]     |
[INFO] [stdout] 692 | fn read_first_leaf_block<D: BlockDevice>(inode_ref: &mut InodeRef<D>) -> Result<u64> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `block_size` is never read
[INFO] [stdout]     --> src/extent/write.rs:1867:5
[INFO] [stdout]      |
[INFO] [stdout] 1865 | pub struct ExtentWriter<'a, D: BlockDevice> {
[INFO] [stdout]      |            ------------ field in this struct
[INFO] [stdout] 1866 |     trans: &'a mut SimpleTransaction<'a, D>,
[INFO] [stdout] 1867 |     block_size: u32,
[INFO] [stdout]      |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `blocks_per_indirect` is never read
[INFO] [stdout]   --> src/indirect/mapper.rs:16:5
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub struct IndirectBlockMapper {
[INFO] [stdout]    |            ------------------- field in this struct
[INFO] [stdout] 15 |     /// 每个间接块可以容纳的指针数量 (block_size / 4)
[INFO] [stdout] 16 |     blocks_per_indirect: u32,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `initialized` is never read
[INFO] [stdout]   --> src/dir/iterator.rs:42:5
[INFO] [stdout]    |
[INFO] [stdout] 32 | pub struct DirIterator {
[INFO] [stdout]    |            ----------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 42 |     initialized: bool,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calculate_entry_space` is never used
[INFO] [stdout]    --> src/dir/htree.rs:207:4
[INFO] [stdout]     |
[INFO] [stdout] 207 | fn calculate_entry_space(block_size: u32, sb: &Superblock) -> u32 {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `insert_index_entry` is never used
[INFO] [stdout]    --> src/dir/htree.rs:887:4
[INFO] [stdout]     |
[INFO] [stdout] 887 | fn insert_index_entry<D: BlockDevice>(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `get_file_block` is never used
[INFO] [stdout]    --> src/fs/filesystem.rs:954:19
[INFO] [stdout]     |
[INFO] [stdout]  68 | impl<D: BlockDevice> Ext4FileSystem<D> {
[INFO] [stdout]     | -------------------------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 954 |     pub(crate) fn get_file_block(&mut self, inode_num: u32, logical_block: u32) -> Result<u64> {
[INFO] [stdout]     |                   ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `block_size` is never read
[INFO] [stdout]   --> src/fs/file.rs:31:5
[INFO] [stdout]    |
[INFO] [stdout] 25 | pub struct File<D: BlockDevice> {
[INFO] [stdout]    |            ---- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 31 |     block_size: u32,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Uninitialized`, `Active`, `Committing`, `Committed`, and `Aborted` are never constructed
[INFO] [stdout]   --> src/transaction/journal.rs:67:5
[INFO] [stdout]    |
[INFO] [stdout] 65 | enum JournalState {
[INFO] [stdout]    |      ------------ variants in this enum
[INFO] [stdout] 66 |     /// 未初始化
[INFO] [stdout] 67 |     Uninitialized,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 70 |     Active,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 73 |     Committing,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 76 |     Committed,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 79 |     Aborted,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `JournalState` 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`, `set_transaction`, and `set_block_record` are never used
[INFO] [stdout]   --> src/journal/jbd_buf.rs:60:19
[INFO] [stdout]    |
[INFO] [stdout] 58 | impl JbdBuf {
[INFO] [stdout]    | ----------- associated items in this implementation
[INFO] [stdout] 59 |     /// Create a new journal buffer
[INFO] [stdout] 60 |     pub(super) fn new(jbd_lba: u32, fs_lba: u64) -> Self {
[INFO] [stdout]    |                   ^^^
[INFO] [stdout] ...
[INFO] [stdout] 91 |     pub(super) fn set_transaction(&mut self, trans_id: u64) {
[INFO] [stdout]    |                   ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 96 |     pub(super) fn set_block_record(&mut self, rec_id: u64) {
[INFO] [stdout]    |                   ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `sequence` and `start_block` are never read
[INFO] [stdout]   --> src/journal/recovery.rs:84:5
[INFO] [stdout]    |
[INFO] [stdout] 82 | struct TransactionInfo {
[INFO] [stdout]    |        --------------- fields in this struct
[INFO] [stdout] 83 |     /// 事务序列号
[INFO] [stdout] 84 |     sequence: u32,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 85 |     /// 事务起始块号
[INFO] [stdout] 86 |     start_block: u32,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `TransactionInfo` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `commit_transaction` is never used
[INFO] [stdout]   --> src/journal/commit.rs:36:8
[INFO] [stdout]    |
[INFO] [stdout] 36 | pub fn commit_transaction<D: BlockDevice>(
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calculate_descriptor_blocks` is never used
[INFO] [stdout]    --> src/journal/commit.rs:106:4
[INFO] [stdout]     |
[INFO] [stdout] 106 | fn calculate_descriptor_blocks(data_blocks: u32, block_size: u32) -> u32 {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `write_descriptor_and_data_blocks` is never used
[INFO] [stdout]    --> src/journal/commit.rs:119:4
[INFO] [stdout]     |
[INFO] [stdout] 119 | fn write_descriptor_and_data_blocks<D: BlockDevice>(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `write_commit_block` is never used
[INFO] [stdout]    --> src/journal/commit.rs:227:4
[INFO] [stdout]     |
[INFO] [stdout] 227 | fn write_commit_block<D: BlockDevice>(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `write_revoke_block` is never used
[INFO] [stdout]    --> src/journal/commit.rs:296:4
[INFO] [stdout]     |
[INFO] [stdout] 296 | fn write_revoke_block<D: BlockDevice>(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `trans_commit` is never used
[INFO] [stdout]    --> src/journal/commit.rs:367:8
[INFO] [stdout]     |
[INFO] [stdout] 367 | pub fn trans_commit<D: BlockDevice>(
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `do_checkpoint` is never used
[INFO] [stdout]   --> src/journal/checkpoint.rs:35:8
[INFO] [stdout]    |
[INFO] [stdout] 35 | pub fn do_checkpoint<D: BlockDevice>(
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_transaction_checkpointable` is never used
[INFO] [stdout]    --> src/journal/checkpoint.rs:108:4
[INFO] [stdout]     |
[INFO] [stdout] 108 | fn is_transaction_checkpointable<D: BlockDevice>(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `checkpoint_transaction` is never used
[INFO] [stdout]    --> src/journal/checkpoint.rs:149:4
[INFO] [stdout]     |
[INFO] [stdout] 149 | fn checkpoint_transaction<D: BlockDevice>(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calculate_descriptor_blocks_count` is never used
[INFO] [stdout]    --> src/journal/checkpoint.rs:196:4
[INFO] [stdout]     |
[INFO] [stdout] 196 | fn calculate_descriptor_blocks_count(data_blocks: u32, block_size: u32) -> u32 {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `next_journal_block` is never used
[INFO] [stdout]    --> src/journal/checkpoint.rs:209:4
[INFO] [stdout]     |
[INFO] [stdout] 209 | fn next_journal_block(current: u32, first: u32, max_len: u32) -> u32 {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `update_journal_start` is never used
[INFO] [stdout]    --> src/journal/checkpoint.rs:230:4
[INFO] [stdout]     |
[INFO] [stdout] 230 | fn update_journal_start(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `force_checkpoint` is never used
[INFO] [stdout]    --> src/journal/checkpoint.rs:263:8
[INFO] [stdout]     |
[INFO] [stdout] 263 | pub fn force_checkpoint<D: BlockDevice>(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `should_checkpoint` is never used
[INFO] [stdout]    --> src/journal/checkpoint.rs:307:8
[INFO] [stdout]     |
[INFO] [stdout] 307 | pub fn should_checkpoint(jbd_journal: &JbdJournal, threshold: u32) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `try_checkpoint` is never used
[INFO] [stdout]    --> src/journal/checkpoint.rs:339:8
[INFO] [stdout]     |
[INFO] [stdout] 339 | pub fn try_checkpoint<D: BlockDevice>(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `block_csum` is never used
[INFO] [stdout]   --> src/journal/checksum.rs:21:8
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub fn block_csum(uuid: &[u8; 16], data: &[u8], sequence: u32) -> u32 {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `verify_descriptor_block` is never used
[INFO] [stdout]   --> src/journal/checksum.rs:38:8
[INFO] [stdout]    |
[INFO] [stdout] 38 | pub fn verify_descriptor_block(uuid: &[u8; 16], data: &[u8]) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `verify_commit_block` is never used
[INFO] [stdout]   --> src/journal/checksum.rs:76:8
[INFO] [stdout]    |
[INFO] [stdout] 76 | pub fn verify_commit_block(uuid: &[u8; 16], data: &[u8]) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calculate_descriptor_csum` is never used
[INFO] [stdout]    --> src/journal/checksum.rs:105:8
[INFO] [stdout]     |
[INFO] [stdout] 105 | pub fn calculate_descriptor_csum(uuid: &[u8; 16], data: &[u8]) -> u32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calculate_commit_csum` is never used
[INFO] [stdout]    --> src/journal/checksum.rs:128:8
[INFO] [stdout]     |
[INFO] [stdout] 128 | pub fn calculate_commit_csum(uuid: &[u8; 16], data: &[u8]) -> u32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calculate_revoke_csum` is never used
[INFO] [stdout]    --> src/journal/checksum.rs:151:8
[INFO] [stdout]     |
[INFO] [stdout] 151 | pub fn calculate_revoke_csum(uuid: &[u8; 16], data: &[u8]) -> u32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `verify_revoke_block` is never used
[INFO] [stdout]    --> src/journal/checksum.rs:174:8
[INFO] [stdout]     |
[INFO] [stdout] 174 | pub fn verify_revoke_block(uuid: &[u8; 16], data: &[u8]) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `verify_superblock_csum` is never used
[INFO] [stdout]    --> src/journal/checksum.rs:211:8
[INFO] [stdout]     |
[INFO] [stdout] 211 | pub fn verify_superblock_csum(sb: &jbd_sb) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calculate_superblock_csum` is never used
[INFO] [stdout]    --> src/journal/checksum.rs:243:8
[INFO] [stdout]     |
[INFO] [stdout] 243 | pub fn calculate_superblock_csum(sb: &mut jbd_sb) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `base` is never read
[INFO] [stdout]   --> src/xattr/search.rs:22:9
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub struct XattrSearch<'a> {
[INFO] [stdout]    |            ----------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 22 |     pub base: usize,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `XattrSearch` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `is_empty` and `free_space` are never used
[INFO] [stdout]    --> src/xattr/search.rs:130:12
[INFO] [stdout]     |
[INFO] [stdout]  37 | impl<'a> XattrSearch<'a> {
[INFO] [stdout]     | ------------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 130 |     pub fn is_empty(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 137 |     pub fn free_space(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `compute_entry_hash` is never used
[INFO] [stdout]   --> src/xattr/hash.rs:29:8
[INFO] [stdout]    |
[INFO] [stdout] 29 | pub fn compute_entry_hash(
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `rehash_block` is never used
[INFO] [stdout]   --> src/xattr/hash.rs:95:8
[INFO] [stdout]    |
[INFO] [stdout] 95 | pub fn rehash_block(
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `compute_block_checksum` is never used
[INFO] [stdout]    --> src/xattr/hash.rs:189:8
[INFO] [stdout]     |
[INFO] [stdout] 189 | pub fn compute_block_checksum(sb: &Superblock, block_num: u64, block_data: &[u8]) -> u32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `set_block_checksum` is never used
[INFO] [stdout]    --> src/xattr/hash.rs:220:8
[INFO] [stdout]     |
[INFO] [stdout] 220 | pub fn set_block_checksum(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_first_entry_offset` is never used
[INFO] [stdout]   --> src/xattr/block.rs:48:4
[INFO] [stdout]    |
[INFO] [stdout] 48 | fn get_first_entry_offset() -> usize {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `validate_block` is never used
[INFO] [stdout]   --> src/xattr/block.rs:64:8
[INFO] [stdout]    |
[INFO] [stdout] 64 | pub fn validate_block(sb: &Superblock, block_data: &[u8]) -> Result<()> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `find_block_entry` is never used
[INFO] [stdout]    --> src/xattr/block.rs:217:8
[INFO] [stdout]     |
[INFO] [stdout] 217 | pub fn find_block_entry(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `list_block_xattr` is never used
[INFO] [stdout]    --> src/xattr/block.rs:245:8
[INFO] [stdout]     |
[INFO] [stdout] 245 | pub fn list_block_xattr(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `inc_refcount` is never used
[INFO] [stdout]    --> src/xattr/block.rs:366:8
[INFO] [stdout]     |
[INFO] [stdout] 366 | pub fn inc_refcount(block_data: &mut [u8]) -> Result<u32> {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `crc32c` is never used
[INFO] [stdout]   --> src/crc.rs:18:8
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub fn crc32c(data: &[u8]) -> u32 {
[INFO] [stdout]    |        ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: calls to `std::mem::drop` with a reference instead of an owned value does nothing
[INFO] [stdout]    --> src/block/device.rs:400:13
[INFO] [stdout]     |
[INFO] [stdout] 400 |             drop(cache);
[INFO] [stdout]     |             ^^^^^-----^
[INFO] [stdout]     |                  |
[INFO] [stdout]     |                  argument has type `&mut BlockCache`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dropping_references)]` on by default
[INFO] [stdout] help: use `let _ = ...` to ignore the expression or result
[INFO] [stdout]     |
[INFO] [stdout] 400 -             drop(cache);
[INFO] [stdout] 400 +             let _ = cache;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: calls to `std::mem::drop` with a reference instead of an owned value does nothing
[INFO] [stdout]   --> src/block/io.rs:63:25
[INFO] [stdout]    |
[INFO] [stdout] 63 |                         drop(cache); // 显式释放借用
[INFO] [stdout]    |                         ^^^^^-----^
[INFO] [stdout]    |                              |
[INFO] [stdout]    |                              argument has type `&mut BlockCache`
[INFO] [stdout]    |
[INFO] [stdout] help: use `let _ = ...` to ignore the expression or result
[INFO] [stdout]    |
[INFO] [stdout] 63 -                         drop(cache); // 显式释放借用
[INFO] [stdout] 63 +                         let _ = cache; // 显式释放借用
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: calls to `std::mem::drop` with a reference instead of an owned value does nothing
[INFO] [stdout]    --> src/block/io.rs:128:29
[INFO] [stdout]     |
[INFO] [stdout] 128 | ...                   drop(cache); // 显式释放借用
[INFO] [stdout]     |                       ^^^^^-----^
[INFO] [stdout]     |                            |
[INFO] [stdout]     |                            argument has type `&mut BlockCache`
[INFO] [stdout]     |
[INFO] [stdout] help: use `let _ = ...` to ignore the expression or result
[INFO] [stdout]     |
[INFO] [stdout] 128 -                             drop(cache); // 显式释放借用
[INFO] [stdout] 128 +                             let _ = cache; // 显式释放借用
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: calls to `std::mem::drop` with a reference instead of an owned value does nothing
[INFO] [stdout]    --> src/block/handle.rs:100:21
[INFO] [stdout]     |
[INFO] [stdout] 100 |                     drop(cache); // 释放借用
[INFO] [stdout]     |                     ^^^^^-----^
[INFO] [stdout]     |                          |
[INFO] [stdout]     |                          argument has type `&mut BlockCache`
[INFO] [stdout]     |
[INFO] [stdout] help: use `let _ = ...` to ignore the expression or result
[INFO] [stdout]     |
[INFO] [stdout] 100 -                     drop(cache); // 释放借用
[INFO] [stdout] 100 +                     let _ = cache; // 释放借用
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: calls to `std::mem::drop` with a reference instead of an owned value does nothing
[INFO] [stdout]    --> src/block/handle.rs:187:21
[INFO] [stdout]     |
[INFO] [stdout] 187 |                     drop(cache); // 释放借用
[INFO] [stdout]     |                     ^^^^^-----^
[INFO] [stdout]     |                          |
[INFO] [stdout]     |                          argument has type `&mut BlockCache`
[INFO] [stdout]     |
[INFO] [stdout] help: use `let _ = ...` to ignore the expression or result
[INFO] [stdout]     |
[INFO] [stdout] 187 -                     drop(cache); // 释放借用
[INFO] [stdout] 187 +                     let _ = cache; // 释放借用
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: calls to `std::mem::drop` with a reference instead of an owned value does nothing
[INFO] [stdout]    --> src/block/handle.rs:248:21
[INFO] [stdout]     |
[INFO] [stdout] 248 |                     drop(cache); // 释放借用
[INFO] [stdout]     |                     ^^^^^-----^
[INFO] [stdout]     |                          |
[INFO] [stdout]     |                          argument has type `&mut BlockCache`
[INFO] [stdout]     |
[INFO] [stdout] help: use `let _ = ...` to ignore the expression or result
[INFO] [stdout]     |
[INFO] [stdout] 248 -                     drop(cache); // 释放借用
[INFO] [stdout] 248 +                     let _ = cache; // 释放借用
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: calls to `std::mem::drop` with a reference instead of an owned value does nothing
[INFO] [stdout]    --> src/block/handle.rs:290:21
[INFO] [stdout]     |
[INFO] [stdout] 290 |                     drop(cache); // 释放借用
[INFO] [stdout]     |                     ^^^^^-----^
[INFO] [stdout]     |                          |
[INFO] [stdout]     |                          argument has type `&mut BlockCache`
[INFO] [stdout]     |
[INFO] [stdout] help: use `let _ = ...` to ignore the expression or result
[INFO] [stdout]     |
[INFO] [stdout] 290 -                     drop(cache); // 释放借用
[INFO] [stdout] 290 +                     let _ = cache; // 释放借用
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]    --> src/consts.rs:408:1
[INFO] [stdout]     |
[INFO] [stdout] 408 | pub const EXT4_XATTR_PAD: u32 = 1 << EXT4_XATTR_PAD_BITS;
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] note: the lint level is defined here
[INFO] [stdout]    --> src/lib.rs:47:9
[INFO] [stdout]     |
[INFO] [stdout]  47 | #![warn(missing_docs)]
[INFO] [stdout]     |         ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]    --> src/consts.rs:409:1
[INFO] [stdout]     |
[INFO] [stdout] 409 | pub const EXT4_XATTR_ROUND: u32 = EXT4_XATTR_PAD - 1;
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]    --> src/consts.rs:413:1
[INFO] [stdout]     |
[INFO] [stdout] 413 | pub const EXT4_XATTR_INDEX_POSIX_ACL_ACCESS: u8 = 2;
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]    --> src/consts.rs:414:1
[INFO] [stdout]     |
[INFO] [stdout] 414 | pub const EXT4_XATTR_INDEX_POSIX_ACL_DEFAULT: u8 = 3;
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]    --> src/consts.rs:415:1
[INFO] [stdout]     |
[INFO] [stdout] 415 | pub const EXT4_XATTR_INDEX_TRUSTED: u8 = 4;
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]    --> src/consts.rs:416:1
[INFO] [stdout]     |
[INFO] [stdout] 416 | pub const EXT4_XATTR_INDEX_LUSTRE: u8 = 5;
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]    --> src/consts.rs:417:1
[INFO] [stdout]     |
[INFO] [stdout] 417 | pub const EXT4_XATTR_INDEX_SECURITY: u8 = 6;
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]    --> src/consts.rs:418:1
[INFO] [stdout]     |
[INFO] [stdout] 418 | pub const EXT4_XATTR_INDEX_SYSTEM: u8 = 7;
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]    --> src/consts.rs:419:1
[INFO] [stdout]     |
[INFO] [stdout] 419 | pub const EXT4_XATTR_INDEX_RICHACL: u8 = 8;
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]    --> src/consts.rs:420:1
[INFO] [stdout]     |
[INFO] [stdout] 420 | pub const EXT4_XATTR_INDEX_ENCRYPTION: u8 = 9;
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]    --> src/consts.rs:424:1
[INFO] [stdout]     |
[INFO] [stdout] 424 | pub const VALUE_HASH_SHIFT: u32 = 16;
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]    --> src/consts.rs:425:1
[INFO] [stdout]     |
[INFO] [stdout] 425 | pub const BLOCK_HASH_SHIFT: u32 = 16;
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:25:5
[INFO] [stdout]    |
[INFO] [stdout] 25 |     pub inodes_count: u32,           // 0: 总 inode 数
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:26:5
[INFO] [stdout]    |
[INFO] [stdout] 26 |     pub blocks_count_lo: u32,        // 4: 总块数（低32位）
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:27:5
[INFO] [stdout]    |
[INFO] [stdout] 27 |     pub r_blocks_count_lo: u32,      // 8: 保留块数（低32位）
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 28 |     pub free_blocks_count_lo: u32,   // 12: 空闲块数（低32位）
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:29:5
[INFO] [stdout]    |
[INFO] [stdout] 29 |     pub free_inodes_count: u32,      // 16: 空闲 inode 数
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:30:5
[INFO] [stdout]    |
[INFO] [stdout] 30 |     pub first_data_block: u32,       // 20: 第一个数据块
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:31:5
[INFO] [stdout]    |
[INFO] [stdout] 31 |     pub log_block_size: u32,         // 24: 块大小（2^(10+log_block_size)）
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:32:5
[INFO] [stdout]    |
[INFO] [stdout] 32 |     pub log_cluster_size: u32,       // 28: 簇大小
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:33:5
[INFO] [stdout]    |
[INFO] [stdout] 33 |     pub blocks_per_group: u32,       // 32: 每组块数
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:34:5
[INFO] [stdout]    |
[INFO] [stdout] 34 |     pub clusters_per_group: u32,     // 36: 每组簇数
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:35:5
[INFO] [stdout]    |
[INFO] [stdout] 35 |     pub inodes_per_group: u32,       // 40: 每组 inode 数
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:36:5
[INFO] [stdout]    |
[INFO] [stdout] 36 |     pub mtime: u32,                  // 44: 挂载时间
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:37:5
[INFO] [stdout]    |
[INFO] [stdout] 37 |     pub wtime: u32,                  // 48: 写入时间
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:38:5
[INFO] [stdout]    |
[INFO] [stdout] 38 |     pub mnt_count: u16,              // 52: 挂载次数
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:39:5
[INFO] [stdout]    |
[INFO] [stdout] 39 |     pub max_mnt_count: u16,          // 54: 最大挂载次数
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:40:5
[INFO] [stdout]    |
[INFO] [stdout] 40 |     pub magic: u16,                  // 56: 魔数 (0xEF53)
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:41:5
[INFO] [stdout]    |
[INFO] [stdout] 41 |     pub state: u16,                  // 58: 文件系统状态
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:42:5
[INFO] [stdout]    |
[INFO] [stdout] 42 |     pub errors: u16,                 // 60: 错误处理方式
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:43:5
[INFO] [stdout]    |
[INFO] [stdout] 43 |     pub minor_rev_level: u16,        // 62: 次版本号
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:44:5
[INFO] [stdout]    |
[INFO] [stdout] 44 |     pub lastcheck: u32,              // 64: 最后检查时间
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:45:5
[INFO] [stdout]    |
[INFO] [stdout] 45 |     pub checkinterval: u32,          // 68: 检查间隔
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:46:5
[INFO] [stdout]    |
[INFO] [stdout] 46 |     pub creator_os: u32,             // 72: 创建者操作系统
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:47:5
[INFO] [stdout]    |
[INFO] [stdout] 47 |     pub rev_level: u32,              // 76: 版本级别
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:48:5
[INFO] [stdout]    |
[INFO] [stdout] 48 |     pub def_resuid: u16,             // 80: 默认保留 uid
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:49:5
[INFO] [stdout]    |
[INFO] [stdout] 49 |     pub def_resgid: u16,             // 82: 默认保留 gid
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:52:5
[INFO] [stdout]    |
[INFO] [stdout] 52 |     pub first_ino: u32,              // 84: 第一个非保留 inode
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:53:5
[INFO] [stdout]    |
[INFO] [stdout] 53 |     pub inode_size: u16,             // 88: inode 大小
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:54:5
[INFO] [stdout]    |
[INFO] [stdout] 54 |     pub block_group_nr: u16,         // 90: 本超级块所在的块组号
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:55:5
[INFO] [stdout]    |
[INFO] [stdout] 55 |     pub feature_compat: u32,         // 92: 兼容特性
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:56:5
[INFO] [stdout]    |
[INFO] [stdout] 56 |     pub feature_incompat: u32,       // 96: 不兼容特性
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:57:5
[INFO] [stdout]    |
[INFO] [stdout] 57 |     pub feature_ro_compat: u32,      // 100: 只读兼容特性
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:59:5
[INFO] [stdout]    |
[INFO] [stdout] 59 |     pub uuid: [u8; 16],              // 104: 128位UUID
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:60:5
[INFO] [stdout]    |
[INFO] [stdout] 60 |     pub volume_name: [u8; 16],       // 120: 卷名称
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:61:5
[INFO] [stdout]    |
[INFO] [stdout] 61 |     pub last_mounted: [u8; 64],      // 136: 最后挂载路径
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:62:5
[INFO] [stdout]    |
[INFO] [stdout] 62 |     pub algorithm_usage_bitmap: u32, // 200: 压缩算法位图
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:64:5
[INFO] [stdout]    |
[INFO] [stdout] 64 |     pub prealloc_blocks: u8,         // 204: 预分配块数
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:65:5
[INFO] [stdout]    |
[INFO] [stdout] 65 |     pub prealloc_dir_blocks: u8,     // 205: 目录预分配块数
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:66:5
[INFO] [stdout]    |
[INFO] [stdout] 66 |     pub reserved_gdt_blocks: u16,    // 206: 保留的GDT块数
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:68:5
[INFO] [stdout]    |
[INFO] [stdout] 68 |     pub journal_uuid: [u8; 16],      // 208: 日志UUID
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:69:5
[INFO] [stdout]    |
[INFO] [stdout] 69 |     pub journal_inum: u32,           // 224: 日志inode号
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:70:5
[INFO] [stdout]    |
[INFO] [stdout] 70 |     pub journal_dev: u32,            // 228: 日志设备号
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:71:5
[INFO] [stdout]    |
[INFO] [stdout] 71 |     pub last_orphan: u32,            // 232: 孤儿inode链表头
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:72:5
[INFO] [stdout]    |
[INFO] [stdout] 72 |     pub hash_seed: [u32; 4],         // 236: HTREE哈希种子
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:73:5
[INFO] [stdout]    |
[INFO] [stdout] 73 |     pub def_hash_version: u8,        // 252: 默认哈希版本
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:74:5
[INFO] [stdout]    |
[INFO] [stdout] 74 |     pub jnl_backup_type: u8,         // 253: 日志备份类型
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:75:5
[INFO] [stdout]    |
[INFO] [stdout] 75 |     pub desc_size: u16,              // 254: 组描述符大小
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:76:5
[INFO] [stdout]    |
[INFO] [stdout] 76 |     pub default_mount_opts: u32,     // 256: 默认挂载选项
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:77:5
[INFO] [stdout]    |
[INFO] [stdout] 77 |     pub first_meta_bg: u32,          // 260: 第一个元数据块组
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:78:5
[INFO] [stdout]    |
[INFO] [stdout] 78 |     pub mkfs_time: u32,              // 264: 创建时间
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:79:5
[INFO] [stdout]    |
[INFO] [stdout] 79 |     pub jnl_blocks: [u32; 17],       // 268: 日志备份
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:82:5
[INFO] [stdout]    |
[INFO] [stdout] 82 |     pub blocks_count_hi: u32,        // 336: 总块数（高32位）
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:83:5
[INFO] [stdout]    |
[INFO] [stdout] 83 |     pub r_blocks_count_hi: u32,      // 340: 保留块数（高32位）
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:84:5
[INFO] [stdout]    |
[INFO] [stdout] 84 |     pub free_blocks_count_hi: u32,   // 344: 空闲块数（高32位）
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:85:5
[INFO] [stdout]    |
[INFO] [stdout] 85 |     pub min_extra_isize: u16,        // 348: 最小额外inode大小
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:86:5
[INFO] [stdout]    |
[INFO] [stdout] 86 |     pub want_extra_isize: u16,       // 350: 期望额外inode大小
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:87:5
[INFO] [stdout]    |
[INFO] [stdout] 87 |     pub flags: u32,                  // 352: 标志
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:88:5
[INFO] [stdout]    |
[INFO] [stdout] 88 |     pub raid_stride: u16,            // 356: RAID步长
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:89:5
[INFO] [stdout]    |
[INFO] [stdout] 89 |     pub mmp_interval: u16,           // 358: MMP检查间隔
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:90:5
[INFO] [stdout]    |
[INFO] [stdout] 90 |     pub mmp_block: u64,              // 360: MMP块号
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:91:5
[INFO] [stdout]    |
[INFO] [stdout] 91 |     pub raid_stripe_width: u32,      // 368: RAID条带宽度
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:92:5
[INFO] [stdout]    |
[INFO] [stdout] 92 |     pub log_groups_per_flex: u8,     // 372: flex_bg组大小log2
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:93:5
[INFO] [stdout]    |
[INFO] [stdout] 93 |     pub checksum_type: u8,           // 373: 校验和类型
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:94:5
[INFO] [stdout]    |
[INFO] [stdout] 94 |     pub reserved_pad: u16,           // 374: 保留填充
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:95:5
[INFO] [stdout]    |
[INFO] [stdout] 95 |     pub kbytes_written: u64,         // 376: 已写入的KB数
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:96:5
[INFO] [stdout]    |
[INFO] [stdout] 96 |     pub snapshot_inum: u32,          // 384: 快照inode号
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:97:5
[INFO] [stdout]    |
[INFO] [stdout] 97 |     pub snapshot_id: u32,            // 388: 快照ID
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:98:5
[INFO] [stdout]    |
[INFO] [stdout] 98 |     pub snapshot_r_blocks_count: u64, // 392: 快照保留块数
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:99:5
[INFO] [stdout]    |
[INFO] [stdout] 99 |     pub snapshot_list: u32,          // 400: 快照链表头
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:100:5
[INFO] [stdout]     |
[INFO] [stdout] 100 |     pub error_count: u32,            // 404: 错误计数
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:101:5
[INFO] [stdout]     |
[INFO] [stdout] 101 |     pub first_error_time: u32,       // 408: 第一次错误时间
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:102:5
[INFO] [stdout]     |
[INFO] [stdout] 102 |     pub first_error_ino: u32,        // 412: 第一次错误inode
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:103:5
[INFO] [stdout]     |
[INFO] [stdout] 103 |     pub first_error_block: u64,      // 416: 第一次错误块号
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:104:5
[INFO] [stdout]     |
[INFO] [stdout] 104 |     pub first_error_func: [u8; 32],  // 424: 第一次错误函数
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:105:5
[INFO] [stdout]     |
[INFO] [stdout] 105 |     pub first_error_line: u32,       // 456: 第一次错误行号
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:106:5
[INFO] [stdout]     |
[INFO] [stdout] 106 |     pub last_error_time: u32,        // 460: 最后错误时间
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:107:5
[INFO] [stdout]     |
[INFO] [stdout] 107 |     pub last_error_ino: u32,         // 464: 最后错误inode
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:108:5
[INFO] [stdout]     |
[INFO] [stdout] 108 |     pub last_error_line: u32,        // 468: 最后错误行号
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:109:5
[INFO] [stdout]     |
[INFO] [stdout] 109 |     pub last_error_block: u64,       // 472: 最后错误块号
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:110:5
[INFO] [stdout]     |
[INFO] [stdout] 110 |     pub last_error_func: [u8; 32],   // 480: 最后错误函数
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:111:5
[INFO] [stdout]     |
[INFO] [stdout] 111 |     pub mount_opts: [u8; 64],        // 512: 挂载选项
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:112:5
[INFO] [stdout]     |
[INFO] [stdout] 112 |     pub usr_quota_inum: u32,         // 576: 用户配额inode
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:113:5
[INFO] [stdout]     |
[INFO] [stdout] 113 |     pub grp_quota_inum: u32,         // 580: 组配额inode
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:114:5
[INFO] [stdout]     |
[INFO] [stdout] 114 |     pub overhead_blocks: u32,        // 584: 开销块数
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:115:5
[INFO] [stdout]     |
[INFO] [stdout] 115 |     pub backup_bgs: [u32; 2],        // 588: 备份块组
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:116:5
[INFO] [stdout]     |
[INFO] [stdout] 116 |     pub encrypt_algos: [u8; 4],      // 596: 加密算法
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:117:5
[INFO] [stdout]     |
[INFO] [stdout] 117 |     pub encrypt_pw_salt: [u8; 16],   // 600: 加密密码盐
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:118:5
[INFO] [stdout]     |
[INFO] [stdout] 118 |     pub lpf_ino: u32,                // 616: lost+found inode
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:119:5
[INFO] [stdout]     |
[INFO] [stdout] 119 |     pub prj_quota_inum: u32,         // 620: 项目配额inode
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:120:5
[INFO] [stdout]     |
[INFO] [stdout] 120 |     pub checksum_seed: u32,          // 624: 校验和种子
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:121:5
[INFO] [stdout]     |
[INFO] [stdout] 121 |     pub reserved: [u32; 98],         // 628: 保留字段
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:122:5
[INFO] [stdout]     |
[INFO] [stdout] 122 |     pub checksum: u32,               // 1020: superblock校验和
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:178:5
[INFO] [stdout]     |
[INFO] [stdout] 178 |     pub mode: u16,                   // 0: 文件模式
[INFO] [stdout]     |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:179:5
[INFO] [stdout]     |
[INFO] [stdout] 179 |     pub uid: u16,                    // 2: 所有者 uid（低16位）
[INFO] [stdout]     |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:180:5
[INFO] [stdout]     |
[INFO] [stdout] 180 |     pub size_lo: u32,                // 4: 文件大小（低32位）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:181:5
[INFO] [stdout]     |
[INFO] [stdout] 181 |     pub atime: u32,                  // 8: 访问时间
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:182:5
[INFO] [stdout]     |
[INFO] [stdout] 182 |     pub ctime: u32,                  // 12: inode改变时间
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:183:5
[INFO] [stdout]     |
[INFO] [stdout] 183 |     pub mtime: u32,                  // 16: 修改时间
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:184:5
[INFO] [stdout]     |
[INFO] [stdout] 184 |     pub dtime: u32,                  // 20: 删除时间
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:185:5
[INFO] [stdout]     |
[INFO] [stdout] 185 |     pub gid: u16,                    // 24: 组 gid（低16位）
[INFO] [stdout]     |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:186:5
[INFO] [stdout]     |
[INFO] [stdout] 186 |     pub links_count: u16,            // 26: 硬链接数
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:187:5
[INFO] [stdout]     |
[INFO] [stdout] 187 |     pub blocks_count_lo: u32,        // 28: 512B块数（低32位）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:188:5
[INFO] [stdout]     |
[INFO] [stdout] 188 |     pub flags: u32,                  // 32: 标志
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:189:5
[INFO] [stdout]     |
[INFO] [stdout] 189 |     pub osd1: u32,                   // 36: OS相关1
[INFO] [stdout]     |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:190:5
[INFO] [stdout]     |
[INFO] [stdout] 190 |     pub blocks: [u32; EXT4_INODE_BLOCKS], // 40: 块指针数组（15个）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:191:5
[INFO] [stdout]     |
[INFO] [stdout] 191 |     pub generation: u32,             // 100: 文件版本
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:192:5
[INFO] [stdout]     |
[INFO] [stdout] 192 |     pub file_acl_lo: u32,            // 104: 文件 ACL（低32位）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:193:5
[INFO] [stdout]     |
[INFO] [stdout] 193 |     pub size_hi: u32,                // 108: 文件大小（高32位）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:194:5
[INFO] [stdout]     |
[INFO] [stdout] 194 |     pub obso_faddr: u32,             // 112: 废弃的fragment地址
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:196:5
[INFO] [stdout]     |
[INFO] [stdout] 196 |     pub blocks_high: u16,            // 116: 块数高16位
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:197:5
[INFO] [stdout]     |
[INFO] [stdout] 197 |     pub file_acl_high: u16,          // 118: ACL高16位
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:198:5
[INFO] [stdout]     |
[INFO] [stdout] 198 |     pub uid_high: u16,               // 120: uid高16位
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:199:5
[INFO] [stdout]     |
[INFO] [stdout] 199 |     pub gid_high: u16,               // 122: gid高16位
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:200:5
[INFO] [stdout]     |
[INFO] [stdout] 200 |     pub checksum_lo: u16,            // 124: 校验和低16位
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:201:5
[INFO] [stdout]     |
[INFO] [stdout] 201 |     pub reserved: u16,               // 126: 保留
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:203:5
[INFO] [stdout]     |
[INFO] [stdout] 203 |     pub extra_isize: u16,            // 128: 额外inode大小
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:204:5
[INFO] [stdout]     |
[INFO] [stdout] 204 |     pub checksum_hi: u16,            // 130: 校验和高16位
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:205:5
[INFO] [stdout]     |
[INFO] [stdout] 205 |     pub ctime_extra: u32,            // 132: 额外change时间
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:206:5
[INFO] [stdout]     |
[INFO] [stdout] 206 |     pub mtime_extra: u32,            // 136: 额外modification时间
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:207:5
[INFO] [stdout]     |
[INFO] [stdout] 207 |     pub atime_extra: u32,            // 140: 额外access时间
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:208:5
[INFO] [stdout]     |
[INFO] [stdout] 208 |     pub crtime: u32,                 // 144: 创建时间
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:209:5
[INFO] [stdout]     |
[INFO] [stdout] 209 |     pub crtime_extra: u32,           // 148: 额外创建时间
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:210:5
[INFO] [stdout]     |
[INFO] [stdout] 210 |     pub version_hi: u32,             // 152: 版本高32位
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:211:5
[INFO] [stdout]     |
[INFO] [stdout] 211 |     pub projid: u32,                 // 156: 项目ID
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:255:5
[INFO] [stdout]     |
[INFO] [stdout] 255 |     pub inode: u32,                  // inode 编号
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:256:5
[INFO] [stdout]     |
[INFO] [stdout] 256 |     pub rec_len: u16,                // 记录长度
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:257:5
[INFO] [stdout]     |
[INFO] [stdout] 257 |     pub name_len: u8,                // 名称长度
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:258:5
[INFO] [stdout]     |
[INFO] [stdout] 258 |     pub file_type: u8,               // 文件类型
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:275:5
[INFO] [stdout]     |
[INFO] [stdout] 275 |     pub limit: u16,                  // 最大条目数
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:276:5
[INFO] [stdout]     |
[INFO] [stdout] 276 |     pub count: u16,                  // 当前条目数
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:313:5
[INFO] [stdout]     |
[INFO] [stdout] 313 |     pub inode: u32,                  // inode 编号
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:314:5
[INFO] [stdout]     |
[INFO] [stdout] 314 |     pub entry_len: u16,              // 记录长度
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:315:5
[INFO] [stdout]     |
[INFO] [stdout] 315 |     pub name_len: u8,                // 名称长度（1 for "."）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:316:5
[INFO] [stdout]     |
[INFO] [stdout] 316 |     pub inode_type: u8,              // 文件类型
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:317:5
[INFO] [stdout]     |
[INFO] [stdout] 317 |     pub name: [u8; 4],               // 名称 ".\0\0\0"
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:344:5
[INFO] [stdout]     |
[INFO] [stdout] 344 |     pub reserved_zero: u32,          // 保留字段，必须为 0
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:345:5
[INFO] [stdout]     |
[INFO] [stdout] 345 |     pub hash_version: u8,            // 哈希版本
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:346:5
[INFO] [stdout]     |
[INFO] [stdout] 346 |     pub info_length: u8,             // 信息长度（8字节）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:347:5
[INFO] [stdout]     |
[INFO] [stdout] 347 |     pub indirect_levels: u8,         // 间接层数
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:348:5
[INFO] [stdout]     |
[INFO] [stdout] 348 |     pub unused_flags: u8,            // 未使用的标志
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:395:5
[INFO] [stdout]     |
[INFO] [stdout] 395 |     pub hash: u32,                   // 哈希值
[INFO] [stdout]     |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:396:5
[INFO] [stdout]     |
[INFO] [stdout] 396 |     pub block: u32,                  // 块号
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:434:5
[INFO] [stdout]     |
[INFO] [stdout] 434 |     pub dots: [ext4_dir_idx_dot_en; 2], // "." 和 ".." 目录项
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:435:5
[INFO] [stdout]     |
[INFO] [stdout] 435 |     pub info: ext4_dir_idx_rinfo,    // 根信息
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:436:5
[INFO] [stdout]     |
[INFO] [stdout] 436 |     pub en: [ext4_dir_idx_entry; 0], // 索引条目数组（变长）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:451:5
[INFO] [stdout]     |
[INFO] [stdout] 451 |     pub fake: ext4_fake_dir_entry,   // 假目录项
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:452:5
[INFO] [stdout]     |
[INFO] [stdout] 452 |     pub entries: [ext4_dir_idx_entry; 0], // 索引条目数组（变长）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:461:5
[INFO] [stdout]     |
[INFO] [stdout] 461 |     pub inode: u32,                  // inode 编号（通常为 0）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:462:5
[INFO] [stdout]     |
[INFO] [stdout] 462 |     pub entry_len: u16,              // 记录长度
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:463:5
[INFO] [stdout]     |
[INFO] [stdout] 463 |     pub name_len: u8,                // 名称长度（0）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:464:5
[INFO] [stdout]     |
[INFO] [stdout] 464 |     pub inode_type: u8,              // 文件类型
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:485:5
[INFO] [stdout]     |
[INFO] [stdout] 485 |     pub reserved: u32,               // 保留字段
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:486:5
[INFO] [stdout]     |
[INFO] [stdout] 486 |     pub checksum: u32,               // 校验和
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:513:5
[INFO] [stdout]     |
[INFO] [stdout] 513 |     pub reserved_zero1: u32,         // 保留字段 1
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:514:5
[INFO] [stdout]     |
[INFO] [stdout] 514 |     pub rec_len: u16,                // 记录长度（通常为 12）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:515:5
[INFO] [stdout]     |
[INFO] [stdout] 515 |     pub reserved_zero2: u8,          // 保留字段 2
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:516:5
[INFO] [stdout]     |
[INFO] [stdout] 516 |     pub reserved_ft: u8,             // 保留文件类型（0xDE）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:517:5
[INFO] [stdout]     |
[INFO] [stdout] 517 |     pub checksum: u32,               // 校验和
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:554:5
[INFO] [stdout]     |
[INFO] [stdout] 554 |     pub block_bitmap_lo: u32,        // 块位图块号（低32位）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:555:5
[INFO] [stdout]     |
[INFO] [stdout] 555 |     pub inode_bitmap_lo: u32,        // inode位图块号（低32位）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:556:5
[INFO] [stdout]     |
[INFO] [stdout] 556 |     pub inode_table_lo: u32,         // inode表起始块号（低32位）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:557:5
[INFO] [stdout]     |
[INFO] [stdout] 557 |     pub free_blocks_count_lo: u16,   // 空闲块数（低16位）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:558:5
[INFO] [stdout]     |
[INFO] [stdout] 558 |     pub free_inodes_count_lo: u16,   // 空闲inode数（低16位）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:559:5
[INFO] [stdout]     |
[INFO] [stdout] 559 |     pub used_dirs_count_lo: u16,     // 目录数（低16位）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:560:5
[INFO] [stdout]     |
[INFO] [stdout] 560 |     pub flags: u16,                  // 标志
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:561:5
[INFO] [stdout]     |
[INFO] [stdout] 561 |     pub exclude_bitmap_lo: u32,      // 排除位图块号（低32位）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:562:5
[INFO] [stdout]     |
[INFO] [stdout] 562 |     pub block_bitmap_csum_lo: u16,   // 块位图校验和（低16位）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:563:5
[INFO] [stdout]     |
[INFO] [stdout] 563 |     pub inode_bitmap_csum_lo: u16,   // inode位图校验和（低16位）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:564:5
[INFO] [stdout]     |
[INFO] [stdout] 564 |     pub itable_unused_lo: u16,       // 未使用inode数（低16位）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:565:5
[INFO] [stdout]     |
[INFO] [stdout] 565 |     pub checksum: u16,               // 校验和
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:568:5
[INFO] [stdout]     |
[INFO] [stdout] 568 |     pub block_bitmap_hi: u32,        // 块位图块号（高32位）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:569:5
[INFO] [stdout]     |
[INFO] [stdout] 569 |     pub inode_bitmap_hi: u32,        // inode位图块号（高32位）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:570:5
[INFO] [stdout]     |
[INFO] [stdout] 570 |     pub inode_table_hi: u32,         // inode表起始块号（高32位）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:571:5
[INFO] [stdout]     |
[INFO] [stdout] 571 |     pub free_blocks_count_hi: u16,   // 空闲块数（高16位）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:572:5
[INFO] [stdout]     |
[INFO] [stdout] 572 |     pub free_inodes_count_hi: u16,   // 空闲inode数（高16位）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:573:5
[INFO] [stdout]     |
[INFO] [stdout] 573 |     pub used_dirs_count_hi: u16,     // 目录数（高16位）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:574:5
[INFO] [stdout]     |
[INFO] [stdout] 574 |     pub itable_unused_hi: u16,       // 未使用inode数（高16位）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:575:5
[INFO] [stdout]     |
[INFO] [stdout] 575 |     pub exclude_bitmap_hi: u32,      // 排除位图块号（高32位）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:576:5
[INFO] [stdout]     |
[INFO] [stdout] 576 |     pub block_bitmap_csum_hi: u16,   // 块位图校验和（高16位）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:577:5
[INFO] [stdout]     |
[INFO] [stdout] 577 |     pub inode_bitmap_csum_hi: u16,   // inode位图校验和（高16位）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:578:5
[INFO] [stdout]     |
[INFO] [stdout] 578 |     pub reserved: u32,               // 保留
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:619:5
[INFO] [stdout]     |
[INFO] [stdout] 619 |     pub magic: u16,      // 魔数 0xF30A
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:620:5
[INFO] [stdout]     |
[INFO] [stdout] 620 |     pub entries: u16,    // 当前节点中的有效 entry 数量
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:621:5
[INFO] [stdout]     |
[INFO] [stdout] 621 |     pub max: u16,        // 节点中最大 entry 数量
[INFO] [stdout]     |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:622:5
[INFO] [stdout]     |
[INFO] [stdout] 622 |     pub depth: u16,      // 树的深度，0 表示叶子节点
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:623:5
[INFO] [stdout]     |
[INFO] [stdout] 623 |     pub generation: u32, // generation ID
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:667:5
[INFO] [stdout]     |
[INFO] [stdout] 667 |     pub block: u32,    // 逻辑块号（文件内偏移）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:668:5
[INFO] [stdout]     |
[INFO] [stdout] 668 |     pub len: u16,      // extent 长度（块数）
[INFO] [stdout]     |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:669:5
[INFO] [stdout]     |
[INFO] [stdout] 669 |     pub start_hi: u16, // 物理块号高 16 位
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:670:5
[INFO] [stdout]     |
[INFO] [stdout] 670 |     pub start_lo: u32, // 物理块号低 32 位
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:718:5
[INFO] [stdout]     |
[INFO] [stdout] 718 |     pub block: u32,   // 逻辑块号（覆盖范围的起始）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:719:5
[INFO] [stdout]     |
[INFO] [stdout] 719 |     pub leaf_lo: u32, // 指向的块号低 32 位
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:720:5
[INFO] [stdout]     |
[INFO] [stdout] 720 |     pub leaf_hi: u16, // 指向的块号高 16 位
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:721:5
[INFO] [stdout]     |
[INFO] [stdout] 721 |     pub unused: u16,  // 保留
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:787:5
[INFO] [stdout]     |
[INFO] [stdout] 787 |     pub h_magic: u32,       // 魔数：EXT4_XATTR_MAGIC (0xEA020000)
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:788:5
[INFO] [stdout]     |
[INFO] [stdout] 788 |     pub h_refcount: u32,    // 引用计数（块共享）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:789:5
[INFO] [stdout]     |
[INFO] [stdout] 789 |     pub h_blocks: u32,      // 使用的块数（通常为 1）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:790:5
[INFO] [stdout]     |
[INFO] [stdout] 790 |     pub h_hash: u32,        // 所有条目的哈希值
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:791:5
[INFO] [stdout]     |
[INFO] [stdout] 791 |     pub h_checksum: u32,    // CRC32C 校验和
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:792:5
[INFO] [stdout]     |
[INFO] [stdout] 792 |     pub h_reserved: [u32; 3], // 保留字段
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:809:5
[INFO] [stdout]     |
[INFO] [stdout] 809 |     pub h_magic: u32,       // 魔数：EXT4_XATTR_MAGIC
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:826:5
[INFO] [stdout]     |
[INFO] [stdout] 826 |     pub e_name_len: u8,     // 名称长度
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:827:5
[INFO] [stdout]     |
[INFO] [stdout] 827 |     pub e_name_index: u8,   // 命名空间索引
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:828:5
[INFO] [stdout]     |
[INFO] [stdout] 828 |     pub e_value_offs: u16,  // 值在块中的偏移
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:829:5
[INFO] [stdout]     |
[INFO] [stdout] 829 |     pub e_value_block: u32, // 值所在的块号（未使用，总是 0）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:830:5
[INFO] [stdout]     |
[INFO] [stdout] 830 |     pub e_value_size: u32,  // 值的大小
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:831:5
[INFO] [stdout]     |
[INFO] [stdout] 831 |     pub e_hash: u32,        // 名称和值的哈希
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `core::result::Result` that must be used
[INFO] [stdout]    --> src/extent/checksum.rs:210:5
[INFO] [stdout]     |
[INFO] [stdout] 210 | /     inode_ref.with_inode_mut(|inode| {
[INFO] [stdout] 211 | |         let inode_gen = u32::from_le(inode.generation);
[INFO] [stdout] ...   |
[INFO] [stdout] 221 | |         set_checksum(sb, inode_num, inode_gen, block_data);
[INFO] [stdout] 222 | |     });
[INFO] [stdout]     | |______^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout]     = note: `#[warn(unused_must_use)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 210 |     let _ = inode_ref.with_inode_mut(|inode| {
[INFO] [stdout]     |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `core::result::Result` that must be used
[INFO] [stdout]    --> src/extent/grow.rs:340:5
[INFO] [stdout]     |
[INFO] [stdout] 340 |     inode_ref.mark_dirty();
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 340 |     let _ = inode_ref.mark_dirty();
[INFO] [stdout]     |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `EXT_FIRST_EXTENT` should have a snake case name
[INFO] [stdout]   --> src/extent/helpers.rs:26:15
[INFO] [stdout]    |
[INFO] [stdout] 26 | pub unsafe fn EXT_FIRST_EXTENT(header: *const ext4_extent_header) -> *mut ext4_extent {
[INFO] [stdout]    |               ^^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `ext_first_extent`
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(non_snake_case)]` (part of `#[warn(nonstandard_style)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `EXT_LAST_EXTENT` should have a snake case name
[INFO] [stdout]   --> src/extent/helpers.rs:52:15
[INFO] [stdout]    |
[INFO] [stdout] 52 | pub unsafe fn EXT_LAST_EXTENT(header: *const ext4_extent_header) -> *mut ext4_extent {
[INFO] [stdout]    |               ^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `ext_last_extent`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `EXT_MAX_EXTENT` should have a snake case name
[INFO] [stdout]   --> src/extent/helpers.rs:76:15
[INFO] [stdout]    |
[INFO] [stdout] 76 | pub unsafe fn EXT_MAX_EXTENT(header: *const ext4_extent_header) -> *mut ext4_extent {
[INFO] [stdout]    |               ^^^^^^^^^^^^^^ help: convert the identifier to snake case: `ext_max_extent`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `EXT_HAS_FREE_EXTENT` should have a snake case name
[INFO] [stdout]   --> src/extent/helpers.rs:92:15
[INFO] [stdout]    |
[INFO] [stdout] 92 | pub unsafe fn EXT_HAS_FREE_EXTENT(header: *const ext4_extent_header) -> bool {
[INFO] [stdout]    |               ^^^^^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `ext_has_free_extent`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `EXT_FIRST_INDEX` should have a snake case name
[INFO] [stdout]    --> src/extent/helpers.rs:118:15
[INFO] [stdout]     |
[INFO] [stdout] 118 | pub unsafe fn EXT_FIRST_INDEX(header: *const ext4_extent_header) -> *mut ext4_extent_idx {
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `ext_first_index`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `EXT_LAST_INDEX` should have a snake case name
[INFO] [stdout]    --> src/extent/helpers.rs:144:15
[INFO] [stdout]     |
[INFO] [stdout] 144 | pub unsafe fn EXT_LAST_INDEX(header: *const ext4_extent_header) -> *mut ext4_extent_idx {
[INFO] [stdout]     |               ^^^^^^^^^^^^^^ help: convert the identifier to snake case: `ext_last_index`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `EXT_MAX_INDEX` should have a snake case name
[INFO] [stdout]    --> src/extent/helpers.rs:168:15
[INFO] [stdout]     |
[INFO] [stdout] 168 | pub unsafe fn EXT_MAX_INDEX(header: *const ext4_extent_header) -> *mut ext4_extent_idx {
[INFO] [stdout]     |               ^^^^^^^^^^^^^ help: convert the identifier to snake case: `ext_max_index`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `EXT_HAS_FREE_INDEX` should have a snake case name
[INFO] [stdout]    --> src/extent/helpers.rs:184:15
[INFO] [stdout]     |
[INFO] [stdout] 184 | pub unsafe fn EXT_HAS_FREE_INDEX(header: *const ext4_extent_header) -> bool {
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `ext_has_free_index`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `core::result::Result` that must be used
[INFO] [stdout]    --> src/extent/remove.rs:515:5
[INFO] [stdout]     |
[INFO] [stdout] 515 |     inode_ref.mark_dirty();
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 515 |     let _ = inode_ref.mark_dirty();
[INFO] [stdout]     |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `core::result::Result` that must be used
[INFO] [stdout]    --> src/extent/split.rs:634:5
[INFO] [stdout]     |
[INFO] [stdout] 634 | /     inode_ref.with_inode_mut(|inode| -> Result<()> {
[INFO] [stdout] 635 | |         let data = unsafe {
[INFO] [stdout] 636 | |             core::slice::from_raw_parts_mut(
[INFO] [stdout] 637 | |                 inode.blocks.as_mut_ptr() as *mut u8,
[INFO] [stdout] ...   |
[INFO] [stdout] 658 | |         Ok(())
[INFO] [stdout] 659 | |     })?;
[INFO] [stdout]     | |_______^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 634 |     let _ = inode_ref.with_inode_mut(|inode| -> Result<()> {
[INFO] [stdout]     |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `core::result::Result` that must be used
[INFO] [stdout]    --> src/extent/split.rs:661:5
[INFO] [stdout]     |
[INFO] [stdout] 661 |     inode_ref.mark_dirty();
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 661 |     let _ = inode_ref.mark_dirty();
[INFO] [stdout]     |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `core::result::Result` that must be used
[INFO] [stdout]    --> src/extent/split.rs:707:5
[INFO] [stdout]     |
[INFO] [stdout] 707 | /     inode_ref.with_inode_mut(|inode| -> Result<()> {
[INFO] [stdout] 708 | |         let data = unsafe {
[INFO] [stdout] 709 | |             core::slice::from_raw_parts_mut(
[INFO] [stdout] 710 | |                 inode.blocks.as_mut_ptr() as *mut u8,
[INFO] [stdout] ...   |
[INFO] [stdout] 731 | |         Ok(())
[INFO] [stdout] 732 | |     })?;
[INFO] [stdout]     | |_______^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 707 |     let _ = inode_ref.with_inode_mut(|inode| -> Result<()> {
[INFO] [stdout]     |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `core::result::Result` that must be used
[INFO] [stdout]    --> src/extent/split.rs:734:5
[INFO] [stdout]     |
[INFO] [stdout] 734 |     inode_ref.mark_dirty();
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 734 |     let _ = inode_ref.mark_dirty();
[INFO] [stdout]     |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `core::result::Result` that must be used
[INFO] [stdout]    --> src/extent/unwritten.rs:195:9
[INFO] [stdout]     |
[INFO] [stdout] 195 | /         inode_ref.with_inode_mut(|inode| {
[INFO] [stdout] 196 | |             let header_ptr = inode.blocks.as_mut_ptr() as *mut crate::types::ext4_extent_header;
[INFO] [stdout] 197 | |             let extent_ptr = unsafe {
[INFO] [stdout] 198 | |                 (header_ptr.add(1) as *mut ext4_extent).add(extent_idx)
[INFO] [stdout] ...   |
[INFO] [stdout] 207 | |         });
[INFO] [stdout]     | |__________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 195 |         let _ = inode_ref.with_inode_mut(|inode| {
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `core::result::Result` that must be used
[INFO] [stdout]    --> src/extent/unwritten.rs:216:5
[INFO] [stdout]     |
[INFO] [stdout] 216 | /     inode_ref.with_inode_mut(|inode| {
[INFO] [stdout] 217 | |         let header_ptr = inode.blocks.as_mut_ptr() as *mut crate::types::ext4_extent_header;
[INFO] [stdout] 218 | |         let extent_ptr = unsafe {
[INFO] [stdout] 219 | |             (header_ptr.add(1) as *mut ext4_extent).add(extent_idx)
[INFO] [stdout] ...   |
[INFO] [stdout] 230 | |     });
[INFO] [stdout]     | |______^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 216 |     let _ = inode_ref.with_inode_mut(|inode| {
[INFO] [stdout]     |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `core::result::Result` that must be used
[INFO] [stdout]    --> src/extent/unwritten.rs:251:9
[INFO] [stdout]     |
[INFO] [stdout] 251 | /         inode_ref.with_inode_mut(|inode| {
[INFO] [stdout] 252 | |             let header_ptr = inode.blocks.as_mut_ptr() as *mut crate::types::ext4_extent_header;
[INFO] [stdout] 253 | |             let extent_ptr = unsafe {
[INFO] [stdout] 254 | |                 (header_ptr.add(1) as *mut ext4_extent).add(extent_idx)
[INFO] [stdout] ...   |
[INFO] [stdout] 267 | |         });
[INFO] [stdout]     | |__________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 251 |         let _ = inode_ref.with_inode_mut(|inode| {
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `core::result::Result` that must be used
[INFO] [stdout]    --> src/extent/unwritten_multilevel.rs:239:9
[INFO] [stdout]     |
[INFO] [stdout] 239 |         inode_ref.mark_dirty();
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 239 |         let _ = inode_ref.mark_dirty();
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `core::result::Result` that must be used
[INFO] [stdout]    --> src/extent/write.rs:105:5
[INFO] [stdout]     |
[INFO] [stdout] 105 |     inode_ref.mark_dirty();
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 105 |     let _ = inode_ref.mark_dirty();
[INFO] [stdout]     |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `core::result::Result` that must be used
[INFO] [stdout]     --> src/extent/write.rs:1467:5
[INFO] [stdout]      |
[INFO] [stdout] 1467 | /     inode_ref.with_inode_mut(|inode| {
[INFO] [stdout] 1468 | |         // 获取 extent header
[INFO] [stdout] 1469 | |         let header_ptr = inode.blocks.as_mut_ptr() as *mut ext4_extent_header;
[INFO] [stdout] 1470 | |         let header = unsafe { &mut *header_ptr };
[INFO] [stdout] ...    |
[INFO] [stdout] 1552 | |         Ok(())
[INFO] [stdout] 1553 | |     })?;
[INFO] [stdout]      | |_______^
[INFO] [stdout]      |
[INFO] [stdout]      = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]      |
[INFO] [stdout] 1467 |     let _ = inode_ref.with_inode_mut(|inode| {
[INFO] [stdout]      |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `core::result::Result` that must be used
[INFO] [stdout]     --> src/extent/write.rs:1556:5
[INFO] [stdout]      |
[INFO] [stdout] 1556 |     inode_ref.mark_dirty();
[INFO] [stdout]      |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout]      = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]      |
[INFO] [stdout] 1556 |     let _ = inode_ref.mark_dirty();
[INFO] [stdout]      |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `core::result::Result` that must be used
[INFO] [stdout]     --> src/extent/write.rs:2699:5
[INFO] [stdout]      |
[INFO] [stdout] 2699 | /     inode_ref.with_inode_mut(|inode| {
[INFO] [stdout] 2700 | |         let header_ptr = inode.blocks.as_mut_ptr() as *mut ext4_extent_header;
[INFO] [stdout] 2701 | |         let header = unsafe { &mut *header_ptr };
[INFO] [stdout] ...    |
[INFO] [stdout] 2730 | |         Ok(())
[INFO] [stdout] 2731 | |     })?;
[INFO] [stdout]      | |_______^
[INFO] [stdout]      |
[INFO] [stdout]      = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]      |
[INFO] [stdout] 2699 |     let _ = inode_ref.with_inode_mut(|inode| {
[INFO] [stdout]      |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]    Compiling lwext4_core v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused `core::result::Result` that must be used
[INFO] [stdout]     --> src/extent/write.rs:2733:5
[INFO] [stdout]      |
[INFO] [stdout] 2733 |     inode_ref.mark_dirty();
[INFO] [stdout]      |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout]      = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]      |
[INFO] [stdout] 2733 |     let _ = inode_ref.mark_dirty();
[INFO] [stdout]      |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `core::result::Result` that must be used
[INFO] [stdout]     --> src/extent/write.rs:2747:5
[INFO] [stdout]      |
[INFO] [stdout] 2747 | /     inode_ref.with_inode_mut(|inode| {
[INFO] [stdout] 2748 | |         let header_ptr = inode.blocks.as_ptr() as *const ext4_extent_header;
[INFO] [stdout] 2749 | |         let header = unsafe { &*header_ptr };
[INFO] [stdout] ...    |
[INFO] [stdout] 2775 | |         Ok(())
[INFO] [stdout] 2776 | |     })?;
[INFO] [stdout]      | |_______^
[INFO] [stdout]      |
[INFO] [stdout]      = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]      |
[INFO] [stdout] 2747 |     let _ = inode_ref.with_inode_mut(|inode| {
[INFO] [stdout]      |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `core::result::Result` that must be used
[INFO] [stdout]     --> src/extent/write.rs:2778:5
[INFO] [stdout]      |
[INFO] [stdout] 2778 |     inode_ref.mark_dirty();
[INFO] [stdout]      |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]      |
[INFO] [stdout]      = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]      |
[INFO] [stdout] 2778 |     let _ = inode_ref.mark_dirty();
[INFO] [stdout]      |     +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]    --> src/dir/path_lookup.rs:145:26
[INFO] [stdout]     |
[INFO] [stdout] 145 |     pub fn get_inode_ref(&mut self, path: &str) -> Result<InodeRef<D>> {
[INFO] [stdout]     |                          ^^^^^^^^^                        ^^^^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]     |                          |
[INFO] [stdout]     |                          the lifetime is elided here
[INFO] [stdout]     |
[INFO] [stdout]     = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout]     = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]     |
[INFO] [stdout] 145 |     pub fn get_inode_ref(&mut self, path: &str) -> Result<InodeRef<'_, D>> {
[INFO] [stdout]     |                                                                    +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]   --> src/dir/hash.rs:16:1
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub const EXT2_HTREE_HALF_MD4: u8 = 1;
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]   --> src/dir/hash.rs:17:1
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub const EXT2_HTREE_TEA: u8 = 2;
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]   --> src/dir/hash.rs:18:1
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub const EXT2_HTREE_LEGACY_UNSIGNED: u8 = 3;
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]   --> src/dir/hash.rs:19:1
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub const EXT2_HTREE_HALF_MD4_UNSIGNED: u8 = 4;
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]   --> src/dir/hash.rs:20:1
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub const EXT2_HTREE_TEA_UNSIGNED: u8 = 5;
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/dir/hash.rs:30:5
[INFO] [stdout]    |
[INFO] [stdout] 30 |     pub hash: u32,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/dir/hash.rs:31:5
[INFO] [stdout]    |
[INFO] [stdout] 31 |     pub minor_hash: u32,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/dir/hash.rs:32:5
[INFO] [stdout]    |
[INFO] [stdout] 32 |     pub hash_version: u8,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/dir/hash.rs:33:5
[INFO] [stdout]    |
[INFO] [stdout] 33 |     pub seed: Option<[u32; 4]>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/dir/htree.rs:66:5
[INFO] [stdout]    |
[INFO] [stdout] 66 |     pub hash: u32,
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/dir/htree.rs:67:5
[INFO] [stdout]    |
[INFO] [stdout] 67 |     pub minor_hash: u32,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/dir/htree.rs:68:5
[INFO] [stdout]    |
[INFO] [stdout] 68 |     pub hash_version: u8,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/dir/htree.rs:69:5
[INFO] [stdout]    |
[INFO] [stdout] 69 |     pub seed: Option<[u32; 4]>,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]   --> src/dir/write.rs:46:1
[INFO] [stdout]    |
[INFO] [stdout] 46 | pub const EXT4_DE_REG_FILE: u8 = 1;
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]   --> src/dir/write.rs:47:1
[INFO] [stdout]    |
[INFO] [stdout] 47 | pub const EXT4_DE_DIR: u8 = 2;
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]   --> src/dir/write.rs:48:1
[INFO] [stdout]    |
[INFO] [stdout] 48 | pub const EXT4_DE_CHRDEV: u8 = 3;
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]   --> src/dir/write.rs:49:1
[INFO] [stdout]    |
[INFO] [stdout] 49 | pub const EXT4_DE_BLKDEV: u8 = 4;
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]   --> src/dir/write.rs:50:1
[INFO] [stdout]    |
[INFO] [stdout] 50 | pub const EXT4_DE_FIFO: u8 = 5;
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]   --> src/dir/write.rs:51:1
[INFO] [stdout]    |
[INFO] [stdout] 51 | pub const EXT4_DE_SOCK: u8 = 6;
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]   --> src/dir/write.rs:52:1
[INFO] [stdout]    |
[INFO] [stdout] 52 | pub const EXT4_DE_SYMLINK: u8 = 7;
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]    --> src/fs/filesystem.rs:228:26
[INFO] [stdout]     |
[INFO] [stdout] 228 |     pub fn get_inode_ref(&mut self, inode_num: u32) -> Result<InodeRef<D>> {
[INFO] [stdout]     |                          ^^^^^^^^^                            ^^^^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]     |                          |
[INFO] [stdout]     |                          the lifetime is elided here
[INFO] [stdout]     |
[INFO] [stdout]     = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]     |
[INFO] [stdout] 228 |     pub fn get_inode_ref(&mut self, inode_num: u32) -> Result<InodeRef<'_, D>> {
[INFO] [stdout]     |                                                                        +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]    --> src/fs/filesystem.rs:251:32
[INFO] [stdout]     |
[INFO] [stdout] 251 |     pub fn get_block_group_ref(&mut self, bgid: u32) -> Result<BlockGroupRef<D>> {
[INFO] [stdout]     |                                ^^^^^^^^^                       ^^^^^^^^^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]     |                                |
[INFO] [stdout]     |                                the lifetime is elided here
[INFO] [stdout]     |
[INFO] [stdout]     = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]     |
[INFO] [stdout] 251 |     pub fn get_block_group_ref(&mut self, bgid: u32) -> Result<BlockGroupRef<'_, D>> {
[INFO] [stdout]     |                                                                              +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]    --> src/transaction/simple.rs:116:22
[INFO] [stdout]     |
[INFO] [stdout] 116 |     pub fn get_block(&mut self, lba: u64) -> Result<Block<D>> {
[INFO] [stdout]     |                      ^^^^^^^^^                      ^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]     |                      |
[INFO] [stdout]     |                      the lifetime is elided here
[INFO] [stdout]     |
[INFO] [stdout]     = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]     |
[INFO] [stdout] 116 |     pub fn get_block(&mut self, lba: u64) -> Result<Block<'_, D>> {
[INFO] [stdout]     |                                                           +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]    --> src/transaction/simple.rs:130:29
[INFO] [stdout]     |
[INFO] [stdout] 130 |     pub fn get_block_noread(&mut self, lba: u64) -> Result<Block<D>> {
[INFO] [stdout]     |                             ^^^^^^^^^                      ^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]     |                             |
[INFO] [stdout]     |                             the lifetime is elided here
[INFO] [stdout]     |
[INFO] [stdout]     = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]     |
[INFO] [stdout] 130 |     pub fn get_block_noread(&mut self, lba: u64) -> Result<Block<'_, D>> {
[INFO] [stdout]     |                                                                  +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: hiding a lifetime that's elided elsewhere is confusing
[INFO] [stdout]    --> src/transaction/journal.rs:126:22
[INFO] [stdout]     |
[INFO] [stdout] 126 |     pub fn get_block(&mut self, _lba: u64) -> Result<Block<D>> {
[INFO] [stdout]     |                      ^^^^^^^^^                       ^^^^^^^^ the same lifetime is hidden here
[INFO] [stdout]     |                      |
[INFO] [stdout]     |                      the lifetime is elided here
[INFO] [stdout]     |
[INFO] [stdout]     = help: the same lifetime is referred to in inconsistent ways, making the signature confusing
[INFO] [stdout] help: use `'_` for type paths
[INFO] [stdout]     |
[INFO] [stdout] 126 |     pub fn get_block(&mut self, _lba: u64) -> Result<Block<'_, D>> {
[INFO] [stdout]     |                                                            +++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]   --> src/journal/types.rs:54:1
[INFO] [stdout]    |
[INFO] [stdout] 54 | pub const JBD_COMMIT_BLOCK: u32 = 2;
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]   --> src/journal/types.rs:55:1
[INFO] [stdout]    |
[INFO] [stdout] 55 | pub const JBD_SUPERBLOCK_V1: u32 = 3;
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]   --> src/journal/types.rs:56:1
[INFO] [stdout]    |
[INFO] [stdout] 56 | pub const JBD_SUPERBLOCK_V2: u32 = 4;
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]   --> src/journal/types.rs:57:1
[INFO] [stdout]    |
[INFO] [stdout] 57 | pub const JBD_REVOKE_BLOCK: u32 = 5;
[INFO] [stdout]    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/journal/types.rs:67:5
[INFO] [stdout]    |
[INFO] [stdout] 67 |     Crc32 = 1,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/journal/types.rs:68:5
[INFO] [stdout]    |
[INFO] [stdout] 68 |     Md5 = 2,
[INFO] [stdout]    |     ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/journal/types.rs:69:5
[INFO] [stdout]    |
[INFO] [stdout] 69 |     Sha1 = 3,
[INFO] [stdout]    |     ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a variant
[INFO] [stdout]   --> src/journal/types.rs:70:5
[INFO] [stdout]    |
[INFO] [stdout] 70 |     Crc32c = 4,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `JBD_BLOCKTYPE_DESCRIPTOR` should have a snake case name
[INFO] [stdout]    --> src/journal/recovery.rs:159:13
[INFO] [stdout]     |
[INFO] [stdout] 159 |             JBD_BLOCKTYPE_DESCRIPTOR => {
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `jbd_blocktype_descriptor`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `JBD_BLOCKTYPE_COMMIT` should have a snake case name
[INFO] [stdout]    --> src/journal/recovery.rs:172:13
[INFO] [stdout]     |
[INFO] [stdout] 172 |             JBD_BLOCKTYPE_COMMIT => {
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `jbd_blocktype_commit`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable `JBD_BLOCKTYPE_REVOKE` should have a snake case name
[INFO] [stdout]    --> src/journal/recovery.rs:178:13
[INFO] [stdout]     |
[INFO] [stdout] 178 |             JBD_BLOCKTYPE_REVOKE => {
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^ help: convert the identifier to snake case: `jbd_blocktype_revoke`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `core::result::Result` that must be used
[INFO] [stdout]    --> src/xattr/api.rs:415:9
[INFO] [stdout]     |
[INFO] [stdout] 415 | /         block_handle.with_data_mut(|block_data| {
[INFO] [stdout] 416 | |             // 初始化 xattr block
[INFO] [stdout] 417 | |             block::initialize_block(block_data)?;
[INFO] [stdout] ...   |
[INFO] [stdout] 435 | |             Ok::<(), Error>(())
[INFO] [stdout] 436 | |         })?;
[INFO] [stdout]     | |___________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 415 |         let _ = block_handle.with_data_mut(|block_data| {
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `core::result::Result` that must be used
[INFO] [stdout]    --> src/xattr/api.rs:468:17
[INFO] [stdout]     |
[INFO] [stdout] 468 | /                 new_block.with_data_mut(|new_data| {
[INFO] [stdout] 469 | |                     new_data[..block_size].copy_from_slice(&data_copy);
[INFO] [stdout] 470 | |                     // 设置新块的引用计数为 1
[INFO] [stdout] 471 | |                     block::set_refcount(new_data, 1)?;
[INFO] [stdout] 472 | |                     Ok::<(), Error>(())
[INFO] [stdout] 473 | |                 })?;
[INFO] [stdout]     | |___________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 468 |                 let _ = new_block.with_data_mut(|new_data| {
[INFO] [stdout]     |                 +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `core::result::Result` that must be used
[INFO] [stdout]    --> src/xattr/api.rs:479:17
[INFO] [stdout]     |
[INFO] [stdout] 479 | /                 old_block.with_data_mut(|data| {
[INFO] [stdout] 480 | |                     block::dec_refcount(data)?;
[INFO] [stdout] 481 | |                     Ok::<(), Error>(())
[INFO] [stdout] 482 | |                 })?;
[INFO] [stdout]     | |___________________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 479 |                 let _ = old_block.with_data_mut(|data| {
[INFO] [stdout]     |                 +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `core::result::Result` that must be used
[INFO] [stdout]    --> src/xattr/api.rs:495:9
[INFO] [stdout]     |
[INFO] [stdout] 495 | /         block_handle.with_data_mut(|block_data| {
[INFO] [stdout] 496 | |             let first_offset = core::mem::size_of::<crate::types::ext4_xattr_header>();
[INFO] [stdout] ...   |
[INFO] [stdout] 513 | |             Ok::<(), Error>(())
[INFO] [stdout] 514 | |         })?;
[INFO] [stdout]     | |___________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 495 |         let _ = block_handle.with_data_mut(|block_data| {
[INFO] [stdout]     |         +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `core::result::Result` that must be used
[INFO] [stdout]    --> src/xattr/api.rs:569:13
[INFO] [stdout]     |
[INFO] [stdout] 569 | /             new_block.with_data_mut(|new_data| {
[INFO] [stdout] 570 | |                 new_data[..block_size].copy_from_slice(&data_copy);
[INFO] [stdout] 571 | |                 // 设置新块的引用计数为 1
[INFO] [stdout] 572 | |                 block::set_refcount(new_data, 1)?;
[INFO] [stdout] 573 | |                 Ok::<(), Error>(())
[INFO] [stdout] 574 | |             })?;
[INFO] [stdout]     | |_______________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 569 |             let _ = new_block.with_data_mut(|new_data| {
[INFO] [stdout]     |             +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused `core::result::Result` that must be used
[INFO] [stdout]    --> src/xattr/api.rs:580:13
[INFO] [stdout]     |
[INFO] [stdout] 580 | /             old_block.with_data_mut(|data| {
[INFO] [stdout] 581 | |                 block::dec_refcount(data)?;
[INFO] [stdout] 582 | |                 Ok::<(), Error>(())
[INFO] [stdout] 583 | |             })?;
[INFO] [stdout]     | |_______________^
[INFO] [stdout]     |
[INFO] [stdout]     = note: this `Result` may be an `Err` variant, which should be handled
[INFO] [stdout] help: use `let _ = ...` to ignore the resulting value
[INFO] [stdout]     |
[INFO] [stdout] 580 |             let _ = old_block.with_data_mut(|data| {
[INFO] [stdout]     |             +++++++
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `alloc::vec`
[INFO] [stdout]  --> src/block/device.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use alloc::vec;
[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: `alloc::vec`
[INFO] [stdout]  --> src/superblock/write.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use alloc::vec;
[INFO] [stdout]   |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::types::ext4_sblock`
[INFO] [stdout]    --> src/inode/write.rs:439:9
[INFO] [stdout]     |
[INFO] [stdout] 439 |     use crate::types::ext4_sblock;
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `alloc::vec`
[INFO] [stdout]   --> src/block_group/write.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | use alloc::vec;
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `super::*`
[INFO] [stdout]    --> src/extent/grow.rs:347:9
[INFO] [stdout]     |
[INFO] [stdout] 347 |     use super::*;
[INFO] [stdout]     |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Block` and `consts::*`
[INFO] [stdout]   --> src/extent/merge.rs:25:13
[INFO] [stdout]    |
[INFO] [stdout] 25 |     block::{Block, BlockDevice},
[INFO] [stdout]    |             ^^^^^
[INFO] [stdout] 26 |     consts::*,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ext4_ext_pblock`
[INFO] [stdout]   --> src/extent/merge.rs:33:15
[INFO] [stdout]    |
[INFO] [stdout] 33 |     helpers::{ext4_ext_pblock, ext4_ext_store_pblock},
[INFO] [stdout]    |               ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ext4_ext_pblock` and `ext4_idx_pblock`
[INFO] [stdout]   --> src/extent/remove.rs:33:15
[INFO] [stdout]    |
[INFO] [stdout] 33 |     helpers::{ext4_ext_pblock, ext4_ext_store_pblock, ext4_idx_pblock},
[INFO] [stdout]    |               ^^^^^^^^^^^^^^^                         ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `super::*`
[INFO] [stdout]    --> src/extent/split.rs:776:9
[INFO] [stdout]     |
[INFO] [stdout] 776 |     use super::*;
[INFO] [stdout]     |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `alloc::vec`
[INFO] [stdout]   --> src/extent/tree.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | use alloc::vec;
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `balloc::BlockAllocator`
[INFO] [stdout]   --> src/extent/unwritten.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 28 |     balloc::BlockAllocator,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ExtentPath`, `ext4_ext_pblock`, and `ext4_ext_store_pblock`
[INFO] [stdout]   --> src/extent/unwritten_multilevel.rs:25:15
[INFO] [stdout]    |
[INFO] [stdout] 25 |     helpers::{ext4_ext_pblock, ext4_ext_store_pblock},
[INFO] [stdout]    |               ^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 31 |     write::{ExtentNodeType, ExtentPath, ExtentWriter},
[INFO] [stdout]    |                             ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `alloc::vec::Vec`
[INFO] [stdout]   --> src/extent/unwritten_multilevel.rs:34:5
[INFO] [stdout]    |
[INFO] [stdout] 34 | use alloc::vec::Vec;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `super::*`
[INFO] [stdout]    --> src/extent/unwritten_multilevel.rs:541:9
[INFO] [stdout]     |
[INFO] [stdout] 541 |     use super::*;
[INFO] [stdout]     |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `alloc::vec::Vec`
[INFO] [stdout]   --> src/extent/verify.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 | use alloc::vec::Vec;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `consts::*`
[INFO] [stdout]   --> src/extent/write.rs:32:5
[INFO] [stdout]    |
[INFO] [stdout] 32 |     consts::*,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `metadata-csum`
[INFO] [stdout]    --> src/dir/checksum.rs:147:7
[INFO] [stdout]     |
[INFO] [stdout] 147 | #[cfg(feature = "metadata-csum")]
[INFO] [stdout]     |       ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `c-api`, `default`, and `std`
[INFO] [stdout]     = help: consider adding `metadata-csum` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout]     = note: `#[warn(unexpected_cfgs)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `metadata-csum`
[INFO] [stdout]    --> src/dir/checksum.rs:173:11
[INFO] [stdout]     |
[INFO] [stdout] 173 | #[cfg(not(feature = "metadata-csum"))]
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `c-api`, `default`, and `std`
[INFO] [stdout]     = help: consider adding `metadata-csum` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `metadata-csum`
[INFO] [stdout]    --> src/dir/checksum.rs:192:7
[INFO] [stdout]     |
[INFO] [stdout] 192 | #[cfg(feature = "metadata-csum")]
[INFO] [stdout]     |       ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `c-api`, `default`, and `std`
[INFO] [stdout]     = help: consider adding `metadata-csum` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `metadata-csum`
[INFO] [stdout]    --> src/dir/checksum.rs:223:11
[INFO] [stdout]     |
[INFO] [stdout] 223 | #[cfg(not(feature = "metadata-csum"))]
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `c-api`, `default`, and `std`
[INFO] [stdout]     = help: consider adding `metadata-csum` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `BlockDev` and `superblock::Superblock`
[INFO] [stdout]   --> src/dir/iterator.rs:15:20
[INFO] [stdout]    |
[INFO] [stdout] 15 |     block::{Block, BlockDev, BlockDevice},
[INFO] [stdout]    |                    ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 19 |     superblock::Superblock,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `super::*`
[INFO] [stdout]    --> src/dir/path_lookup.rs:187:9
[INFO] [stdout]     |
[INFO] [stdout] 187 |     use super::*;
[INFO] [stdout]     |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `BlockDev`
[INFO] [stdout]   --> src/dir/htree.rs:38:20
[INFO] [stdout]    |
[INFO] [stdout] 38 |     block::{Block, BlockDev, BlockDevice},
[INFO] [stdout]    |                    ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ext4_dir_idx_node`
[INFO] [stdout]    --> src/dir/htree.rs:574:54
[INFO] [stdout]     |
[INFO] [stdout] 574 | use crate::types::{ext4_dir_en, ext4_dir_entry_tail, ext4_dir_idx_node, ext4_fake_dir_entry};
[INFO] [stdout]     |                                                      ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `get_tail_mut`
[INFO] [stdout]    --> src/dir/htree.rs:576:40
[INFO] [stdout]     |
[INFO] [stdout] 576 | use super::checksum::{init_entry_tail, get_tail_mut};
[INFO] [stdout]     |                                        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `BlockDev`
[INFO] [stdout]   --> src/dir/write.rs:34:20
[INFO] [stdout]    |
[INFO] [stdout] 34 |     block::{Block, BlockDev, BlockDevice},
[INFO] [stdout]    |                    ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `alloc::vec::Vec`
[INFO] [stdout]   --> src/dir/write.rs:42:5
[INFO] [stdout]    |
[INFO] [stdout] 42 | use alloc::vec::Vec;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `metadata-csum`
[INFO] [stdout]    --> src/dir/write.rs:966:11
[INFO] [stdout]     |
[INFO] [stdout] 966 |     #[cfg(feature = "metadata-csum")]
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `c-api`, `default`, and `std`
[INFO] [stdout]     = help: consider adding `metadata-csum` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `metadata-csum`
[INFO] [stdout]    --> src/dir/write.rs:994:15
[INFO] [stdout]     |
[INFO] [stdout] 994 |     #[cfg(not(feature = "metadata-csum"))]
[INFO] [stdout]     |               ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `c-api`, `default`, and `std`
[INFO] [stdout]     = help: consider adding `metadata-csum` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `super::*`
[INFO] [stdout]    --> src/dir/lookup.rs:178:9
[INFO] [stdout]     |
[INFO] [stdout] 178 |     use super::*;
[INFO] [stdout]     |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `self`
[INFO] [stdout]     --> src/fs/filesystem.rs:1022:45
[INFO] [stdout]      |
[INFO] [stdout] 1022 |         use crate::{consts::*, dir::write::{self, EXT4_DE_REG_FILE}, extent::tree_init};
[INFO] [stdout]      |                                             ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `self`
[INFO] [stdout]     --> src/fs/filesystem.rs:1093:45
[INFO] [stdout]      |
[INFO] [stdout] 1093 |         use crate::{consts::*, dir::write::{self, EXT4_DE_DIR}, extent::tree_init};
[INFO] [stdout]      |                                             ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `super::*`
[INFO] [stdout]     --> src/fs/filesystem.rs:2524:9
[INFO] [stdout]      |
[INFO] [stdout] 2524 |     use super::*;
[INFO] [stdout]      |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `extent::ExtentTree`
[INFO] [stdout]  --> src/fs/file.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 |     extent::ExtentTree,
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `super::*`
[INFO] [stdout]    --> src/fs/file.rs:248:9
[INFO] [stdout]     |
[INFO] [stdout] 248 |     use super::*;
[INFO] [stdout]     |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `super::*`
[INFO] [stdout]     --> src/fs/inode_ref.rs:1054:9
[INFO] [stdout]      |
[INFO] [stdout] 1054 |     use super::*;
[INFO] [stdout]      |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `super::*`
[INFO] [stdout]    --> src/fs/block_group_ref.rs:370:9
[INFO] [stdout]     |
[INFO] [stdout] 370 |     use super::*;
[INFO] [stdout]     |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `block_group::BlockGroup`
[INFO] [stdout]  --> src/ialloc/alloc.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 |     block_group::BlockGroup,
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ErrorKind` and `block_group::BlockGroup`
[INFO] [stdout]  --> src/ialloc/free.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 |     block_group::BlockGroup,
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 7 |     error::{Error, ErrorKind, Result},
[INFO] [stdout]   |                    ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `super::*`
[INFO] [stdout]    --> src/ialloc/free.rs:103:9
[INFO] [stdout]     |
[INFO] [stdout] 103 |     use super::*;
[INFO] [stdout]     |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `metadata-csum`
[INFO] [stdout]   --> src/ialloc/checksum.rs:23:7
[INFO] [stdout]    |
[INFO] [stdout] 23 | #[cfg(feature = "metadata-csum")]
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `c-api`, `default`, and `std`
[INFO] [stdout]    = help: consider adding `metadata-csum` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `metadata-csum`
[INFO] [stdout]   --> src/ialloc/checksum.rs:42:11
[INFO] [stdout]    |
[INFO] [stdout] 42 | #[cfg(not(feature = "metadata-csum"))]
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `c-api`, `default`, and `std`
[INFO] [stdout]    = help: consider adding `metadata-csum` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `metadata-csum`
[INFO] [stdout]   --> src/ialloc/checksum.rs:87:7
[INFO] [stdout]    |
[INFO] [stdout] 87 | #[cfg(feature = "metadata-csum")]
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `c-api`, `default`, and `std`
[INFO] [stdout]    = help: consider adding `metadata-csum` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `metadata-csum`
[INFO] [stdout]    --> src/ialloc/checksum.rs:113:11
[INFO] [stdout]     |
[INFO] [stdout] 113 | #[cfg(not(feature = "metadata-csum"))]
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `c-api`, `default`, and `std`
[INFO] [stdout]     = help: consider adding `metadata-csum` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `metadata-csum`
[INFO] [stdout]    --> src/ialloc/checksum.rs:126:19
[INFO] [stdout]     |
[INFO] [stdout] 126 |         #[cfg(not(feature = "metadata-csum"))]
[INFO] [stdout]     |                   ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `c-api`, `default`, and `std`
[INFO] [stdout]     = help: consider adding `metadata-csum` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `metadata-csum`
[INFO] [stdout]   --> src/balloc/checksum.rs:23:7
[INFO] [stdout]    |
[INFO] [stdout] 23 | #[cfg(feature = "metadata-csum")]
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `c-api`, `default`, and `std`
[INFO] [stdout]    = help: consider adding `metadata-csum` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `metadata-csum`
[INFO] [stdout]   --> src/balloc/checksum.rs:42:11
[INFO] [stdout]    |
[INFO] [stdout] 42 | #[cfg(not(feature = "metadata-csum"))]
[INFO] [stdout]    |           ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `c-api`, `default`, and `std`
[INFO] [stdout]    = help: consider adding `metadata-csum` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `metadata-csum`
[INFO] [stdout]   --> src/balloc/checksum.rs:87:7
[INFO] [stdout]    |
[INFO] [stdout] 87 | #[cfg(feature = "metadata-csum")]
[INFO] [stdout]    |       ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: expected values for `feature` are: `c-api`, `default`, and `std`
[INFO] [stdout]    = help: consider adding `metadata-csum` as a feature in `Cargo.toml`
[INFO] [stdout]    = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `metadata-csum`
[INFO] [stdout]    --> src/balloc/checksum.rs:113:11
[INFO] [stdout]     |
[INFO] [stdout] 113 | #[cfg(not(feature = "metadata-csum"))]
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `c-api`, `default`, and `std`
[INFO] [stdout]     = help: consider adding `metadata-csum` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unexpected `cfg` condition value: `metadata-csum`
[INFO] [stdout]    --> src/balloc/checksum.rs:126:19
[INFO] [stdout]     |
[INFO] [stdout] 126 |         #[cfg(not(feature = "metadata-csum"))]
[INFO] [stdout]     |                   ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: expected values for `feature` are: `c-api`, `default`, and `std`
[INFO] [stdout]     = help: consider adding `metadata-csum` as a feature in `Cargo.toml`
[INFO] [stdout]     = note: see <https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html> for more information about checking conditional configuration
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `block_group::BlockGroup`
[INFO] [stdout]  --> src/balloc/free.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 |     block_group::BlockGroup,
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `super::*`
[INFO] [stdout]    --> src/balloc/free.rs:199:9
[INFO] [stdout]     |
[INFO] [stdout] 199 |     use super::*;
[INFO] [stdout]     |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `block_group::BlockGroup`
[INFO] [stdout]  --> src/balloc/alloc.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 |     block_group::BlockGroup,
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `BlockGroupRef`
[INFO] [stdout]  --> src/balloc/fs_integration.rs:9:10
[INFO] [stdout]   |
[INFO] [stdout] 9 |     fs::{BlockGroupRef, InodeRef},
[INFO] [stdout]   |          ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `super::*`
[INFO] [stdout]    --> src/balloc/fs_integration.rs:137:9
[INFO] [stdout]     |
[INFO] [stdout] 137 |     use super::*;
[INFO] [stdout]     |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ErrorKind`
[INFO] [stdout]  --> src/journal/jbd_fs.rs:9:20
[INFO] [stdout]   |
[INFO] [stdout] 9 |     error::{Error, ErrorKind, Result},
[INFO] [stdout]   |                    ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::error::Result`
[INFO] [stdout]  --> src/journal/jbd_journal.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::error::Result;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `types::*`
[INFO] [stdout]  --> src/journal/jbd_trans.rs:5:21
[INFO] [stdout]   |
[INFO] [stdout] 5 | use super::{JbdBuf, types::*};
[INFO] [stdout]   |                     ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `BlockDevice`, `Block`, and `error::Result`
[INFO] [stdout]  --> src/journal/jbd_buf.rs:6:13
[INFO] [stdout]   |
[INFO] [stdout] 6 |     block::{Block, BlockDevice},
[INFO] [stdout]   |             ^^^^^  ^^^^^^^^^^^
[INFO] [stdout] 7 |     error::Result,
[INFO] [stdout]   |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `alloc::collections::VecDeque`
[INFO] [stdout]  --> src/journal/jbd_buf.rs:9:5
[INFO] [stdout]   |
[INFO] [stdout] 9 | use alloc::collections::VecDeque;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `JournalError` and `checksum`
[INFO] [stdout]  --> src/journal/recovery.rs:5:13
[INFO] [stdout]   |
[INFO] [stdout] 5 | use super::{checksum, types::*, JbdFs, JournalError};
[INFO] [stdout]   |             ^^^^^^^^                   ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ErrorKind`
[INFO] [stdout]  --> src/journal/recovery.rs:8:20
[INFO] [stdout]   |
[INFO] [stdout] 8 |     error::{Error, ErrorKind, Result},
[INFO] [stdout]   |                    ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `ErrorKind`
[INFO] [stdout]  --> src/journal/commit.rs:8:20
[INFO] [stdout]   |
[INFO] [stdout] 8 |     error::{Error, ErrorKind, Result},
[INFO] [stdout]   |                    ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `JournalError`
[INFO] [stdout]  --> src/journal/checkpoint.rs:5:52
[INFO] [stdout]   |
[INFO] [stdout] 5 | use super::{types::*, JbdFs, JbdJournal, JbdTrans, JournalError};
[INFO] [stdout]   |                                                    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::error::Result`
[INFO] [stdout]  --> src/journal/checksum.rs:6:5
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::error::Result;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around assigned value
[INFO] [stdout]    --> src/xattr/search.rs:249:15
[INFO] [stdout]     |
[INFO] [stdout] 249 |     let len = ((name_len + EXT4_XATTR_ROUND as usize + size_of::<ext4_xattr_entry>())
[INFO] [stdout]     |               ^
[INFO] [stdout] 250 |         & !(EXT4_XATTR_ROUND as usize));
[INFO] [stdout]     |                                       ^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_parens)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 249 ~     let len = (name_len + EXT4_XATTR_ROUND as usize + size_of::<ext4_xattr_entry>())
[INFO] [stdout] 250 ~         & !(EXT4_XATTR_ROUND as usize);
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around assigned value
[INFO] [stdout]    --> src/xattr/ibody.rs:261:23
[INFO] [stdout]     |
[INFO] [stdout] 261 |             let len = ((entry_name_len + EXT4_XATTR_ROUND as usize + size_of::<ext4_xattr_entry>())
[INFO] [stdout]     |                       ^
[INFO] [stdout] 262 |                 & !(EXT4_XATTR_ROUND as usize));
[INFO] [stdout]     |                                               ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 261 ~             let len = (entry_name_len + EXT4_XATTR_ROUND as usize + size_of::<ext4_xattr_entry>())
[INFO] [stdout] 262 ~                 & !(EXT4_XATTR_ROUND as usize);
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `super::*`
[INFO] [stdout]    --> src/xattr/ibody.rs:417:9
[INFO] [stdout]     |
[INFO] [stdout] 417 |     use super::*;
[INFO] [stdout]     |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around assigned value
[INFO] [stdout]    --> src/xattr/block.rs:142:25
[INFO] [stdout]     |
[INFO] [stdout] 142 |         let entry_len = ((name_len + EXT4_XATTR_ROUND as usize + size_of::<ext4_xattr_entry>())
[INFO] [stdout]     |                         ^
[INFO] [stdout] 143 |             & !(EXT4_XATTR_ROUND as usize));
[INFO] [stdout]     |                                           ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 142 ~         let entry_len = (name_len + EXT4_XATTR_ROUND as usize + size_of::<ext4_xattr_entry>())
[INFO] [stdout] 143 ~             & !(EXT4_XATTR_ROUND as usize);
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around assigned value
[INFO] [stdout]    --> src/xattr/block.rs:314:25
[INFO] [stdout]     |
[INFO] [stdout] 314 |         let entry_len = ((name_len + EXT4_XATTR_ROUND as usize + size_of::<ext4_xattr_entry>())
[INFO] [stdout]     |                         ^
[INFO] [stdout] 315 |             & !(EXT4_XATTR_ROUND as usize));
[INFO] [stdout]     |                                           ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 314 ~         let entry_len = (name_len + EXT4_XATTR_ROUND as usize + size_of::<ext4_xattr_entry>())
[INFO] [stdout] 315 ~             & !(EXT4_XATTR_ROUND as usize);
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around block return value
[INFO] [stdout]   --> src/xattr/write.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 19 |     ((name_len + EXT4_XATTR_ROUND as usize + size_of::<ext4_xattr_entry>())
[INFO] [stdout]    |     ^
[INFO] [stdout] 20 |         & !(EXT4_XATTR_ROUND as usize))
[INFO] [stdout]    |                                       ^
[INFO] [stdout]    |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 19 ~     (name_len + EXT4_XATTR_ROUND as usize + size_of::<ext4_xattr_entry>())
[INFO] [stdout] 20 ~         & !(EXT4_XATTR_ROUND as usize)
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around block return value
[INFO] [stdout]   --> src/xattr/write.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 28 |     ((value_len + EXT4_XATTR_ROUND as usize) & !(EXT4_XATTR_ROUND as usize))
[INFO] [stdout]    |     ^                                                                      ^
[INFO] [stdout]    |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]    |
[INFO] [stdout] 28 -     ((value_len + EXT4_XATTR_ROUND as usize) & !(EXT4_XATTR_ROUND as usize))
[INFO] [stdout] 28 +     (value_len + EXT4_XATTR_ROUND as usize) & !(EXT4_XATTR_ROUND as usize)
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `balloc` and `superblock::Superblock`
[INFO] [stdout]   --> src/xattr/api.rs:44:5
[INFO] [stdout]    |
[INFO] [stdout] 44 |     superblock::Superblock,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 45 |     balloc,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `super::prefix`
[INFO] [stdout]   --> src/xattr/api.rs:48:5
[INFO] [stdout]    |
[INFO] [stdout] 48 | use super::prefix;
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary parentheses around assigned value
[INFO] [stdout]    --> src/xattr/api.rs:151:33
[INFO] [stdout]     |
[INFO] [stdout] 151 | ...   let entry_len = ((name_len + crate::consts::EXT4_XATTR_ROUND as usize + core::mem::size_of::<crate::types::ext4_xattr_entry>())
[INFO] [stdout]     |                       ^
[INFO] [stdout] 152 | ...       & !(crate::consts::EXT4_XATTR_ROUND as usize));
[INFO] [stdout]     |                                                        ^
[INFO] [stdout]     |
[INFO] [stdout] help: remove these parentheses
[INFO] [stdout]     |
[INFO] [stdout] 151 ~                 let entry_len = (name_len + crate::consts::EXT4_XATTR_ROUND as usize + core::mem::size_of::<crate::types::ext4_xattr_entry>())
[INFO] [stdout] 152 ~                     & !(crate::consts::EXT4_XATTR_ROUND as usize);
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `super::*`
[INFO] [stdout]    --> src/xattr/api.rs:646:9
[INFO] [stdout]     |
[INFO] [stdout] 646 |     use super::*;
[INFO] [stdout]     |         ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `dir::entry::tests::test_dir_entry_type_checks`: Use `iterator` module instead
[INFO] [stdout]    --> src/dir/entry.rs:224:5
[INFO] [stdout]     |
[INFO] [stdout] 224 | /     fn test_dir_entry_type_checks() {
[INFO] [stdout] 225 | |         let mut entry = DirEntry {
[INFO] [stdout] 226 | |             inode: 2,
[INFO] [stdout] 227 | |             name: "test".into(),
[INFO] [stdout] ...   |
[INFO] [stdout] 243 | |         assert!(entry.is_symlink());
[INFO] [stdout] 244 | |     }
[INFO] [stdout]     | |_____^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(deprecated)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated constant `dir::lookup::tests::test_path_lookup_api`: Use `path_lookup` module instead
[INFO] [stdout]    --> src/dir/lookup.rs:181:5
[INFO] [stdout]     |
[INFO] [stdout] 181 | /     fn test_path_lookup_api() {
[INFO] [stdout] ...   |
[INFO] [stdout] 184 | |     }
[INFO] [stdout]     | |_____^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `dir::entry::DirIterator`: Use `iterator` module instead
[INFO] [stdout]   --> src/dir/lookup.rs:13:19
[INFO] [stdout]    |
[INFO] [stdout] 13 | use super::entry::DirIterator;
[INFO] [stdout]    |                   ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated struct `dir::entry::DirIterator`: Use `iterator` module instead
[INFO] [stdout]   --> src/dir/lookup.rs:40:24
[INFO] [stdout]    |
[INFO] [stdout] 40 |         let mut iter = DirIterator::new(self.bdev, self.sb, dir_inode)?;
[INFO] [stdout]    |                        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated associated function `dir::entry::DirIterator::<'a, D>::new`: Use `iterator` module instead
[INFO] [stdout]   --> src/dir/lookup.rs:40:37
[INFO] [stdout]    |
[INFO] [stdout] 40 |         let mut iter = DirIterator::new(self.bdev, self.sb, dir_inode)?;
[INFO] [stdout]    |                                     ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `dir::entry::DirIterator::<'a, D>::next_entry`: Use `iterator` module instead
[INFO] [stdout]   --> src/dir/lookup.rs:42:38
[INFO] [stdout]    |
[INFO] [stdout] 42 |         while let Some(entry) = iter.next_entry()? {
[INFO] [stdout]    |                                      ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `dir::entry::DirEntry::name`: Use `iterator` module instead
[INFO] [stdout]   --> src/dir/lookup.rs:43:16
[INFO] [stdout]    |
[INFO] [stdout] 43 |             if entry.name == name {
[INFO] [stdout]    |                ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated field `dir::entry::DirEntry::inode`: Use `iterator` module instead
[INFO] [stdout]   --> src/dir/lookup.rs:44:32
[INFO] [stdout]    |
[INFO] [stdout] 44 |                 return Ok(Some(entry.inode));
[INFO] [stdout]    |                                ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/inode/write.rs:443:13
[INFO] [stdout]     |
[INFO] [stdout] 443 |         let mut inode_inner = ext4_inode::default();
[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: `depth`
[INFO] [stdout]    --> src/extent/remove.rs:174:10
[INFO] [stdout]     |
[INFO] [stdout] 174 |     let (depth, root_is_leaf) = inode_ref.with_inode(|inode| -> Result<(u16, bool)> {
[INFO] [stdout]     |          ^^^^^ help: if this is intentional, prefix it with an underscore: `_depth`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `allocator`
[INFO] [stdout]    --> src/extent/remove.rs:462:5
[INFO] [stdout]     |
[INFO] [stdout] 462 |     allocator: &mut BlockAllocator,
[INFO] [stdout]     |     ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_allocator`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `depth`
[INFO] [stdout]   --> src/extent/split.rs:76:9
[INFO] [stdout]    |
[INFO] [stdout] 76 |     let depth = node.depth;
[INFO] [stdout]    |         ^^^^^ help: if this is intentional, prefix it with an underscore: `_depth`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `depth`
[INFO] [stdout]    --> src/extent/split.rs:139:9
[INFO] [stdout]     |
[INFO] [stdout] 139 |     let depth = node.depth;
[INFO] [stdout]     |         ^^^^^ help: if this is intentional, prefix it with an underscore: `_depth`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `leaf_depth`
[INFO] [stdout]   --> src/extent/unwritten_multilevel.rs:83:9
[INFO] [stdout]    |
[INFO] [stdout] 83 |     let leaf_depth = leaf.depth;
[INFO] [stdout]    |         ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_leaf_depth`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ee_start`
[INFO] [stdout]   --> src/extent/unwritten_multilevel.rs:94:28
[INFO] [stdout]    |
[INFO] [stdout] 94 |     let (ee_block, ee_len, ee_start, _was_unwritten) = extent_info;
[INFO] [stdout]    |                            ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_ee_start`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `block_size`
[INFO] [stdout]    --> src/extent/unwritten_multilevel.rs:209:5
[INFO] [stdout]     |
[INFO] [stdout] 209 |     block_size: u32,
[INFO] [stdout]     |     ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_block_size`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `ee_start`
[INFO] [stdout]    --> src/extent/unwritten_multilevel.rs:384:45
[INFO] [stdout]     |
[INFO] [stdout] 384 |         let (extent_idx, (ee_block, ee_len, ee_start, was_unwritten)) =
[INFO] [stdout]     |                                             ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_ee_start`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `pblock`
[INFO] [stdout]   --> src/extent/verify.rs:83:5
[INFO] [stdout]    |
[INFO] [stdout] 83 |     pblock: u64,
[INFO] [stdout]    |     ^^^^^^ help: if this is intentional, prefix it with an underscore: `_pblock`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `block_size`
[INFO] [stdout]    --> src/extent/write.rs:733:13
[INFO] [stdout]     |
[INFO] [stdout] 733 |         let block_size = inode_ref.bdev().block_size();
[INFO] [stdout]     |             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_block_size`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `depth`
[INFO] [stdout]     --> src/extent/write.rs:1392:22
[INFO] [stdout]      |
[INFO] [stdout] 1392 |     let (leaf_block, depth) = inode_ref.with_inode(|inode| -> Result<(u64, u16)> {
[INFO] [stdout]      |                      ^^^^^ help: if this is intentional, prefix it with an underscore: `_depth`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `fake_entry`
[INFO] [stdout]    --> src/dir/htree.rs:284:21
[INFO] [stdout]     |
[INFO] [stdout] 284 |                 let fake_entry = unsafe { &*(data.as_ptr() as *const crate::types::ext4_fake_dir_entry) };
[INFO] [stdout]     |                     ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_fake_entry`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `block_size`
[INFO] [stdout]    --> src/dir/htree.rs:239:9
[INFO] [stdout]     |
[INFO] [stdout] 239 |     let block_size = inode_ref.sb().block_size();
[INFO] [stdout]     |         ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_block_size`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `fake_entry`
[INFO] [stdout]    --> src/dir/htree.rs:417:21
[INFO] [stdout]     |
[INFO] [stdout] 417 |                 let fake_entry = unsafe { &*(data.as_ptr() as *const crate::types::ext4_fake_dir_entry) };
[INFO] [stdout]     |                     ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_fake_entry`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `block_size`
[INFO] [stdout]    --> src/dir/htree.rs:373:9
[INFO] [stdout]     |
[INFO] [stdout] 373 |     let block_size = inode_ref.sb().block_size();
[INFO] [stdout]     |         ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_block_size`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `leaf_block`
[INFO] [stdout]    --> src/dir/htree.rs:523:9
[INFO] [stdout]     |
[INFO] [stdout] 523 |     let leaf_block = get_leaf_block(inode_ref, &hash_info)?;
[INFO] [stdout]     |         ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_leaf_block`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `position_in_entries`
[INFO] [stdout]     --> src/dir/htree.rs:1110:5
[INFO] [stdout]      |
[INFO] [stdout] 1110 |     position_in_entries: usize,
[INFO] [stdout]      |     ^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_position_in_entries`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `required_len`
[INFO] [stdout]    --> src/dir/write.rs:572:5
[INFO] [stdout]     |
[INFO] [stdout] 572 |     required_len: u16,
[INFO] [stdout]     |     ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_required_len`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `required_len`
[INFO] [stdout]    --> src/dir/write.rs:652:5
[INFO] [stdout]     |
[INFO] [stdout] 652 |     required_len: u16,
[INFO] [stdout]     |     ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_required_len`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unnecessary `unsafe` block
[INFO] [stdout]    --> src/dir/entry.rs:141:29
[INFO] [stdout]     |
[INFO] [stdout] 141 |             let entry_ptr = unsafe {
[INFO] [stdout]     |                             ^^^^^^ unnecessary `unsafe` block
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_unsafe)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `new_links`
[INFO] [stdout]     --> src/fs/filesystem.rs:2311:34
[INFO] [stdout]      |
[INFO] [stdout] 2311 |                 let (old_is_dir, new_links) = {
[INFO] [stdout]      |                                  ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_new_links`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `partition_offset`
[INFO] [stdout]    --> src/cache/block_cache.rs:364:9
[INFO] [stdout]     |
[INFO] [stdout] 364 |         partition_offset: u64,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_partition_offset`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `used_dirs`
[INFO] [stdout]   --> src/ialloc/alloc.rs:72:31
[INFO] [stdout]    |
[INFO] [stdout] 72 |             let (free_inodes, used_dirs, bmp_blk_addr, bg_copy) = {
[INFO] [stdout]    |                               ^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_used_dirs`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/ialloc/checksum.rs:129:17
[INFO] [stdout]     |
[INFO] [stdout] 129 |             let mut sb_inner = crate::types::ext4_sblock::default();
[INFO] [stdout]     |                 ----^^^^^^^^
[INFO] [stdout]     |                 |
[INFO] [stdout]     |                 help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/balloc/checksum.rs:129:17
[INFO] [stdout]     |
[INFO] [stdout] 129 |             let mut sb_inner = crate::types::ext4_sblock::default();
[INFO] [stdout]     |                 ----^^^^^^^^
[INFO] [stdout]     |                 |
[INFO] [stdout]     |                 help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/journal/recovery.rs:172:13
[INFO] [stdout]     |
[INFO] [stdout] 159 |             JBD_BLOCKTYPE_DESCRIPTOR => {
[INFO] [stdout]     |             ------------------------ matches any value
[INFO] [stdout] ...
[INFO] [stdout] 172 |             JBD_BLOCKTYPE_COMMIT => {
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^ no value can reach this
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unreachable_patterns)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/journal/recovery.rs:178:13
[INFO] [stdout]     |
[INFO] [stdout] 159 |             JBD_BLOCKTYPE_DESCRIPTOR => {
[INFO] [stdout]     |             ------------------------ matches any value
[INFO] [stdout] ...
[INFO] [stdout] 178 |             JBD_BLOCKTYPE_REVOKE => {
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^ no value can reach this
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unreachable pattern
[INFO] [stdout]    --> src/journal/recovery.rs:182:13
[INFO] [stdout]     |
[INFO] [stdout] 159 |             JBD_BLOCKTYPE_DESCRIPTOR => {
[INFO] [stdout]     |             ------------------------ matches any value
[INFO] [stdout] ...
[INFO] [stdout] 182 |             _ => {
[INFO] [stdout]     |             ^ no value can reach this
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `JBD_BLOCKTYPE_DESCRIPTOR`
[INFO] [stdout]    --> src/journal/recovery.rs:159:13
[INFO] [stdout]     |
[INFO] [stdout] 159 |             JBD_BLOCKTYPE_DESCRIPTOR => {
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_JBD_BLOCKTYPE_DESCRIPTOR`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `JBD_BLOCKTYPE_COMMIT`
[INFO] [stdout]    --> src/journal/recovery.rs:172:13
[INFO] [stdout]     |
[INFO] [stdout] 172 |             JBD_BLOCKTYPE_COMMIT => {
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_JBD_BLOCKTYPE_COMMIT`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `JBD_BLOCKTYPE_REVOKE`
[INFO] [stdout]    --> src/journal/recovery.rs:178:13
[INFO] [stdout]     |
[INFO] [stdout] 178 |             JBD_BLOCKTYPE_REVOKE => {
[INFO] [stdout]     |             ^^^^^^^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_JBD_BLOCKTYPE_REVOKE`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/journal/commit.rs:167:25
[INFO] [stdout]     |
[INFO] [stdout] 167 |                     let mut tag = jbd_block_tag {
[INFO] [stdout]     |                         ----^^^
[INFO] [stdout]     |                         |
[INFO] [stdout]     |                         help: remove this `mut`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `trans`
[INFO] [stdout]    --> src/journal/commit.rs:229:5
[INFO] [stdout]     |
[INFO] [stdout] 229 |     trans: &JbdTrans,
[INFO] [stdout]     |     ^^^^^ help: if this is intentional, prefix it with an underscore: `_trans`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `entry_offset`
[INFO] [stdout]    --> src/xattr/write.rs:159:18
[INFO] [stdout]     |
[INFO] [stdout] 159 |     if let Some((entry_offset, old_value_offset, old_value_size)) = found {
[INFO] [stdout]     |                  ^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_entry_offset`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `block_size`
[INFO] [stdout]   --> src/xattr/api.rs:93:13
[INFO] [stdout]    |
[INFO] [stdout] 93 |         let block_size = inode_ref.superblock().block_size() as usize;
[INFO] [stdout]    |             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_block_size`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type `simple::TransactionState` is more private than the item `SimpleTransaction::<'a, D>::state`
[INFO] [stdout]    --> src/transaction/simple.rs:220:5
[INFO] [stdout]     |
[INFO] [stdout] 220 |     pub fn state(&self) -> TransactionState {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ method `SimpleTransaction::<'a, D>::state` is reachable at visibility `pub`
[INFO] [stdout]     |
[INFO] [stdout] note: but type `simple::TransactionState` is only usable at visibility `pub(self)`
[INFO] [stdout]    --> src/transaction/simple.rs:63:1
[INFO] [stdout]     |
[INFO] [stdout]  63 | enum TransactionState {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: `#[warn(private_interfaces)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `inner_mut` is never used
[INFO] [stdout]   --> src/block_group/write.rs:56:19
[INFO] [stdout]    |
[INFO] [stdout] 54 | impl BlockGroup {
[INFO] [stdout]    | --------------- method in this implementation
[INFO] [stdout] 55 |     /// 获取内部块组描述符的可变引用
[INFO] [stdout] 56 |     pub(crate) fn inner_mut(&mut self) -> &mut ext4_group_desc {
[INFO] [stdout]    |                   ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `read_first_leaf_block` is never used
[INFO] [stdout]    --> src/extent/write.rs:692:4
[INFO] [stdout]     |
[INFO] [stdout] 692 | fn read_first_leaf_block<D: BlockDevice>(inode_ref: &mut InodeRef<D>) -> Result<u64> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `block_size` is never read
[INFO] [stdout]     --> src/extent/write.rs:1867:5
[INFO] [stdout]      |
[INFO] [stdout] 1865 | pub struct ExtentWriter<'a, D: BlockDevice> {
[INFO] [stdout]      |            ------------ field in this struct
[INFO] [stdout] 1866 |     trans: &'a mut SimpleTransaction<'a, D>,
[INFO] [stdout] 1867 |     block_size: u32,
[INFO] [stdout]      |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `initialized` is never read
[INFO] [stdout]   --> src/dir/iterator.rs:42:5
[INFO] [stdout]    |
[INFO] [stdout] 32 | pub struct DirIterator {
[INFO] [stdout]    |            ----------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 42 |     initialized: bool,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calculate_entry_space` is never used
[INFO] [stdout]    --> src/dir/htree.rs:207:4
[INFO] [stdout]     |
[INFO] [stdout] 207 | fn calculate_entry_space(block_size: u32, sb: &Superblock) -> u32 {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `insert_index_entry` is never used
[INFO] [stdout]    --> src/dir/htree.rs:887:4
[INFO] [stdout]     |
[INFO] [stdout] 887 | fn insert_index_entry<D: BlockDevice>(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `get_file_block` is never used
[INFO] [stdout]    --> src/fs/filesystem.rs:954:19
[INFO] [stdout]     |
[INFO] [stdout]  68 | impl<D: BlockDevice> Ext4FileSystem<D> {
[INFO] [stdout]     | -------------------------------------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 954 |     pub(crate) fn get_file_block(&mut self, inode_num: u32, logical_block: u32) -> Result<u64> {
[INFO] [stdout]     |                   ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `block_size` is never read
[INFO] [stdout]   --> src/fs/file.rs:31:5
[INFO] [stdout]    |
[INFO] [stdout] 25 | pub struct File<D: BlockDevice> {
[INFO] [stdout]    |            ---- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 31 |     block_size: u32,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Active`, `Committing`, `Committed`, and `Aborted` are never constructed
[INFO] [stdout]   --> src/transaction/journal.rs:70:5
[INFO] [stdout]    |
[INFO] [stdout] 65 | enum JournalState {
[INFO] [stdout]    |      ------------ variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 70 |     Active,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 73 |     Committing,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 76 |     Committed,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 79 |     Aborted,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `JournalState` 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: methods `set_transaction` and `set_block_record` are never used
[INFO] [stdout]   --> src/journal/jbd_buf.rs:91:19
[INFO] [stdout]    |
[INFO] [stdout] 58 | impl JbdBuf {
[INFO] [stdout]    | ----------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 91 |     pub(super) fn set_transaction(&mut self, trans_id: u64) {
[INFO] [stdout]    |                   ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 96 |     pub(super) fn set_block_record(&mut self, rec_id: u64) {
[INFO] [stdout]    |                   ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `sequence` and `start_block` are never read
[INFO] [stdout]   --> src/journal/recovery.rs:84:5
[INFO] [stdout]    |
[INFO] [stdout] 82 | struct TransactionInfo {
[INFO] [stdout]    |        --------------- fields in this struct
[INFO] [stdout] 83 |     /// 事务序列号
[INFO] [stdout] 84 |     sequence: u32,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 85 |     /// 事务起始块号
[INFO] [stdout] 86 |     start_block: u32,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `TransactionInfo` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `commit_transaction` is never used
[INFO] [stdout]   --> src/journal/commit.rs:36:8
[INFO] [stdout]    |
[INFO] [stdout] 36 | pub fn commit_transaction<D: BlockDevice>(
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `write_descriptor_and_data_blocks` is never used
[INFO] [stdout]    --> src/journal/commit.rs:119:4
[INFO] [stdout]     |
[INFO] [stdout] 119 | fn write_descriptor_and_data_blocks<D: BlockDevice>(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `write_commit_block` is never used
[INFO] [stdout]    --> src/journal/commit.rs:227:4
[INFO] [stdout]     |
[INFO] [stdout] 227 | fn write_commit_block<D: BlockDevice>(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `write_revoke_block` is never used
[INFO] [stdout]    --> src/journal/commit.rs:296:4
[INFO] [stdout]     |
[INFO] [stdout] 296 | fn write_revoke_block<D: BlockDevice>(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `trans_commit` is never used
[INFO] [stdout]    --> src/journal/commit.rs:367:8
[INFO] [stdout]     |
[INFO] [stdout] 367 | pub fn trans_commit<D: BlockDevice>(
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `do_checkpoint` is never used
[INFO] [stdout]   --> src/journal/checkpoint.rs:35:8
[INFO] [stdout]    |
[INFO] [stdout] 35 | pub fn do_checkpoint<D: BlockDevice>(
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_transaction_checkpointable` is never used
[INFO] [stdout]    --> src/journal/checkpoint.rs:108:4
[INFO] [stdout]     |
[INFO] [stdout] 108 | fn is_transaction_checkpointable<D: BlockDevice>(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `checkpoint_transaction` is never used
[INFO] [stdout]    --> src/journal/checkpoint.rs:149:4
[INFO] [stdout]     |
[INFO] [stdout] 149 | fn checkpoint_transaction<D: BlockDevice>(
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calculate_descriptor_blocks_count` is never used
[INFO] [stdout]    --> src/journal/checkpoint.rs:196:4
[INFO] [stdout]     |
[INFO] [stdout] 196 | fn calculate_descriptor_blocks_count(data_blocks: u32, block_size: u32) -> u32 {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `next_journal_block` is never used
[INFO] [stdout]    --> src/journal/checkpoint.rs:209:4
[INFO] [stdout]     |
[INFO] [stdout] 209 | fn next_journal_block(current: u32, first: u32, max_len: u32) -> u32 {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `force_checkpoint` is never used
[INFO] [stdout]    --> src/journal/checkpoint.rs:263:8
[INFO] [stdout]     |
[INFO] [stdout] 263 | pub fn force_checkpoint<D: BlockDevice>(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `try_checkpoint` is never used
[INFO] [stdout]    --> src/journal/checkpoint.rs:339:8
[INFO] [stdout]     |
[INFO] [stdout] 339 | pub fn try_checkpoint<D: BlockDevice>(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `verify_descriptor_block` is never used
[INFO] [stdout]   --> src/journal/checksum.rs:38:8
[INFO] [stdout]    |
[INFO] [stdout] 38 | pub fn verify_descriptor_block(uuid: &[u8; 16], data: &[u8]) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `verify_commit_block` is never used
[INFO] [stdout]   --> src/journal/checksum.rs:76:8
[INFO] [stdout]    |
[INFO] [stdout] 76 | pub fn verify_commit_block(uuid: &[u8; 16], data: &[u8]) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calculate_descriptor_csum` is never used
[INFO] [stdout]    --> src/journal/checksum.rs:105:8
[INFO] [stdout]     |
[INFO] [stdout] 105 | pub fn calculate_descriptor_csum(uuid: &[u8; 16], data: &[u8]) -> u32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calculate_commit_csum` is never used
[INFO] [stdout]    --> src/journal/checksum.rs:128:8
[INFO] [stdout]     |
[INFO] [stdout] 128 | pub fn calculate_commit_csum(uuid: &[u8; 16], data: &[u8]) -> u32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calculate_revoke_csum` is never used
[INFO] [stdout]    --> src/journal/checksum.rs:151:8
[INFO] [stdout]     |
[INFO] [stdout] 151 | pub fn calculate_revoke_csum(uuid: &[u8; 16], data: &[u8]) -> u32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `verify_revoke_block` is never used
[INFO] [stdout]    --> src/journal/checksum.rs:174:8
[INFO] [stdout]     |
[INFO] [stdout] 174 | pub fn verify_revoke_block(uuid: &[u8; 16], data: &[u8]) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `base` is never read
[INFO] [stdout]   --> src/xattr/search.rs:22:9
[INFO] [stdout]    |
[INFO] [stdout] 17 | pub struct XattrSearch<'a> {
[INFO] [stdout]    |            ----------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 22 |     pub base: usize,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `XattrSearch` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `free_space` is never used
[INFO] [stdout]    --> src/xattr/search.rs:137:12
[INFO] [stdout]     |
[INFO] [stdout]  37 | impl<'a> XattrSearch<'a> {
[INFO] [stdout]     | ------------------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 137 |     pub fn free_space(&self) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `rehash_block` is never used
[INFO] [stdout]   --> src/xattr/hash.rs:95:8
[INFO] [stdout]    |
[INFO] [stdout] 95 | pub fn rehash_block(
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `compute_block_checksum` is never used
[INFO] [stdout]    --> src/xattr/hash.rs:189:8
[INFO] [stdout]     |
[INFO] [stdout] 189 | pub fn compute_block_checksum(sb: &Superblock, block_num: u64, block_data: &[u8]) -> u32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `set_block_checksum` is never used
[INFO] [stdout]    --> src/xattr/hash.rs:220:8
[INFO] [stdout]     |
[INFO] [stdout] 220 | pub fn set_block_checksum(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_first_entry_offset` is never used
[INFO] [stdout]   --> src/xattr/block.rs:48:4
[INFO] [stdout]    |
[INFO] [stdout] 48 | fn get_first_entry_offset() -> usize {
[INFO] [stdout]    |    ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `validate_block` is never used
[INFO] [stdout]   --> src/xattr/block.rs:64:8
[INFO] [stdout]    |
[INFO] [stdout] 64 | pub fn validate_block(sb: &Superblock, block_data: &[u8]) -> Result<()> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `find_block_entry` is never used
[INFO] [stdout]    --> src/xattr/block.rs:217:8
[INFO] [stdout]     |
[INFO] [stdout] 217 | pub fn find_block_entry(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `list_block_xattr` is never used
[INFO] [stdout]    --> src/xattr/block.rs:245:8
[INFO] [stdout]     |
[INFO] [stdout] 245 | pub fn list_block_xattr(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: calls to `std::mem::drop` with a reference instead of an owned value does nothing
[INFO] [stdout]    --> src/block/device.rs:400:13
[INFO] [stdout]     |
[INFO] [stdout] 400 |             drop(cache);
[INFO] [stdout]     |             ^^^^^-----^
[INFO] [stdout]     |                  |
[INFO] [stdout]     |                  argument has type `&mut block_cache::BlockCache`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dropping_references)]` on by default
[INFO] [stdout] help: use `let _ = ...` to ignore the expression or result
[INFO] [stdout]     |
[INFO] [stdout] 400 -             drop(cache);
[INFO] [stdout] 400 +             let _ = cache;
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: calls to `std::mem::drop` with a reference instead of an owned value does nothing
[INFO] [stdout]   --> src/block/io.rs:63:25
[INFO] [stdout]    |
[INFO] [stdout] 63 |                         drop(cache); // 显式释放借用
[INFO] [stdout]    |                         ^^^^^-----^
[INFO] [stdout]    |                              |
[INFO] [stdout]    |                              argument has type `&mut block_cache::BlockCache`
[INFO] [stdout]    |
[INFO] [stdout] help: use `let _ = ...` to ignore the expression or result
[INFO] [stdout]    |
[INFO] [stdout] 63 -                         drop(cache); // 显式释放借用
[INFO] [stdout] 63 +                         let _ = cache; // 显式释放借用
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: calls to `std::mem::drop` with a reference instead of an owned value does nothing
[INFO] [stdout]    --> src/block/io.rs:128:29
[INFO] [stdout]     |
[INFO] [stdout] 128 | ...                   drop(cache); // 显式释放借用
[INFO] [stdout]     |                       ^^^^^-----^
[INFO] [stdout]     |                            |
[INFO] [stdout]     |                            argument has type `&mut block_cache::BlockCache`
[INFO] [stdout]     |
[INFO] [stdout] help: use `let _ = ...` to ignore the expression or result
[INFO] [stdout]     |
[INFO] [stdout] 128 -                             drop(cache); // 显式释放借用
[INFO] [stdout] 128 +                             let _ = cache; // 显式释放借用
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: calls to `std::mem::drop` with a reference instead of an owned value does nothing
[INFO] [stdout]    --> src/block/handle.rs:100:21
[INFO] [stdout]     |
[INFO] [stdout] 100 |                     drop(cache); // 释放借用
[INFO] [stdout]     |                     ^^^^^-----^
[INFO] [stdout]     |                          |
[INFO] [stdout]     |                          argument has type `&mut block_cache::BlockCache`
[INFO] [stdout]     |
[INFO] [stdout] help: use `let _ = ...` to ignore the expression or result
[INFO] [stdout]     |
[INFO] [stdout] 100 -                     drop(cache); // 释放借用
[INFO] [stdout] 100 +                     let _ = cache; // 释放借用
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: calls to `std::mem::drop` with a reference instead of an owned value does nothing
[INFO] [stdout]    --> src/block/handle.rs:187:21
[INFO] [stdout]     |
[INFO] [stdout] 187 |                     drop(cache); // 释放借用
[INFO] [stdout]     |                     ^^^^^-----^
[INFO] [stdout]     |                          |
[INFO] [stdout]     |                          argument has type `&mut block_cache::BlockCache`
[INFO] [stdout]     |
[INFO] [stdout] help: use `let _ = ...` to ignore the expression or result
[INFO] [stdout]     |
[INFO] [stdout] 187 -                     drop(cache); // 释放借用
[INFO] [stdout] 187 +                     let _ = cache; // 释放借用
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: calls to `std::mem::drop` with a reference instead of an owned value does nothing
[INFO] [stdout]    --> src/block/handle.rs:248:21
[INFO] [stdout]     |
[INFO] [stdout] 248 |                     drop(cache); // 释放借用
[INFO] [stdout]     |                     ^^^^^-----^
[INFO] [stdout]     |                          |
[INFO] [stdout]     |                          argument has type `&mut block_cache::BlockCache`
[INFO] [stdout]     |
[INFO] [stdout] help: use `let _ = ...` to ignore the expression or result
[INFO] [stdout]     |
[INFO] [stdout] 248 -                     drop(cache); // 释放借用
[INFO] [stdout] 248 +                     let _ = cache; // 释放借用
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: calls to `std::mem::drop` with a reference instead of an owned value does nothing
[INFO] [stdout]    --> src/block/handle.rs:290:21
[INFO] [stdout]     |
[INFO] [stdout] 290 |                     drop(cache); // 释放借用
[INFO] [stdout]     |                     ^^^^^-----^
[INFO] [stdout]     |                          |
[INFO] [stdout]     |                          argument has type `&mut block_cache::BlockCache`
[INFO] [stdout]     |
[INFO] [stdout] help: use `let _ = ...` to ignore the expression or result
[INFO] [stdout]     |
[INFO] [stdout] 290 -                     drop(cache); // 释放借用
[INFO] [stdout] 290 +                     let _ = cache; // 释放借用
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]    --> src/consts.rs:408:1
[INFO] [stdout]     |
[INFO] [stdout] 408 | pub const EXT4_XATTR_PAD: u32 = 1 << EXT4_XATTR_PAD_BITS;
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout] note: the lint level is defined here
[INFO] [stdout]    --> src/lib.rs:47:9
[INFO] [stdout]     |
[INFO] [stdout]  47 | #![warn(missing_docs)]
[INFO] [stdout]     |         ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]    --> src/consts.rs:409:1
[INFO] [stdout]     |
[INFO] [stdout] 409 | pub const EXT4_XATTR_ROUND: u32 = EXT4_XATTR_PAD - 1;
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]    --> src/consts.rs:413:1
[INFO] [stdout]     |
[INFO] [stdout] 413 | pub const EXT4_XATTR_INDEX_POSIX_ACL_ACCESS: u8 = 2;
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]    --> src/consts.rs:414:1
[INFO] [stdout]     |
[INFO] [stdout] 414 | pub const EXT4_XATTR_INDEX_POSIX_ACL_DEFAULT: u8 = 3;
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]    --> src/consts.rs:415:1
[INFO] [stdout]     |
[INFO] [stdout] 415 | pub const EXT4_XATTR_INDEX_TRUSTED: u8 = 4;
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]    --> src/consts.rs:416:1
[INFO] [stdout]     |
[INFO] [stdout] 416 | pub const EXT4_XATTR_INDEX_LUSTRE: u8 = 5;
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]    --> src/consts.rs:417:1
[INFO] [stdout]     |
[INFO] [stdout] 417 | pub const EXT4_XATTR_INDEX_SECURITY: u8 = 6;
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]    --> src/consts.rs:418:1
[INFO] [stdout]     |
[INFO] [stdout] 418 | pub const EXT4_XATTR_INDEX_SYSTEM: u8 = 7;
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]    --> src/consts.rs:419:1
[INFO] [stdout]     |
[INFO] [stdout] 419 | pub const EXT4_XATTR_INDEX_RICHACL: u8 = 8;
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]    --> src/consts.rs:420:1
[INFO] [stdout]     |
[INFO] [stdout] 420 | pub const EXT4_XATTR_INDEX_ENCRYPTION: u8 = 9;
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]    --> src/consts.rs:424:1
[INFO] [stdout]     |
[INFO] [stdout] 424 | pub const VALUE_HASH_SHIFT: u32 = 16;
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a constant
[INFO] [stdout]    --> src/consts.rs:425:1
[INFO] [stdout]     |
[INFO] [stdout] 425 | pub const BLOCK_HASH_SHIFT: u32 = 16;
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:25:5
[INFO] [stdout]    |
[INFO] [stdout] 25 |     pub inodes_count: u32,           // 0: 总 inode 数
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:26:5
[INFO] [stdout]    |
[INFO] [stdout] 26 |     pub blocks_count_lo: u32,        // 4: 总块数（低32位）
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:27:5
[INFO] [stdout]    |
[INFO] [stdout] 27 |     pub r_blocks_count_lo: u32,      // 8: 保留块数（低32位）
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 28 |     pub free_blocks_count_lo: u32,   // 12: 空闲块数（低32位）
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:29:5
[INFO] [stdout]    |
[INFO] [stdout] 29 |     pub free_inodes_count: u32,      // 16: 空闲 inode 数
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:30:5
[INFO] [stdout]    |
[INFO] [stdout] 30 |     pub first_data_block: u32,       // 20: 第一个数据块
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:31:5
[INFO] [stdout]    |
[INFO] [stdout] 31 |     pub log_block_size: u32,         // 24: 块大小（2^(10+log_block_size)）
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:32:5
[INFO] [stdout]    |
[INFO] [stdout] 32 |     pub log_cluster_size: u32,       // 28: 簇大小
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:33:5
[INFO] [stdout]    |
[INFO] [stdout] 33 |     pub blocks_per_group: u32,       // 32: 每组块数
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:34:5
[INFO] [stdout]    |
[INFO] [stdout] 34 |     pub clusters_per_group: u32,     // 36: 每组簇数
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:35:5
[INFO] [stdout]    |
[INFO] [stdout] 35 |     pub inodes_per_group: u32,       // 40: 每组 inode 数
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:36:5
[INFO] [stdout]    |
[INFO] [stdout] 36 |     pub mtime: u32,                  // 44: 挂载时间
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:37:5
[INFO] [stdout]    |
[INFO] [stdout] 37 |     pub wtime: u32,                  // 48: 写入时间
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:38:5
[INFO] [stdout]    |
[INFO] [stdout] 38 |     pub mnt_count: u16,              // 52: 挂载次数
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:39:5
[INFO] [stdout]    |
[INFO] [stdout] 39 |     pub max_mnt_count: u16,          // 54: 最大挂载次数
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:40:5
[INFO] [stdout]    |
[INFO] [stdout] 40 |     pub magic: u16,                  // 56: 魔数 (0xEF53)
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:41:5
[INFO] [stdout]    |
[INFO] [stdout] 41 |     pub state: u16,                  // 58: 文件系统状态
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:42:5
[INFO] [stdout]    |
[INFO] [stdout] 42 |     pub errors: u16,                 // 60: 错误处理方式
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:43:5
[INFO] [stdout]    |
[INFO] [stdout] 43 |     pub minor_rev_level: u16,        // 62: 次版本号
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:44:5
[INFO] [stdout]    |
[INFO] [stdout] 44 |     pub lastcheck: u32,              // 64: 最后检查时间
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:45:5
[INFO] [stdout]    |
[INFO] [stdout] 45 |     pub checkinterval: u32,          // 68: 检查间隔
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:46:5
[INFO] [stdout]    |
[INFO] [stdout] 46 |     pub creator_os: u32,             // 72: 创建者操作系统
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:47:5
[INFO] [stdout]    |
[INFO] [stdout] 47 |     pub rev_level: u32,              // 76: 版本级别
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:48:5
[INFO] [stdout]    |
[INFO] [stdout] 48 |     pub def_resuid: u16,             // 80: 默认保留 uid
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:49:5
[INFO] [stdout]    |
[INFO] [stdout] 49 |     pub def_resgid: u16,             // 82: 默认保留 gid
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:52:5
[INFO] [stdout]    |
[INFO] [stdout] 52 |     pub first_ino: u32,              // 84: 第一个非保留 inode
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:53:5
[INFO] [stdout]    |
[INFO] [stdout] 53 |     pub inode_size: u16,             // 88: inode 大小
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:54:5
[INFO] [stdout]    |
[INFO] [stdout] 54 |     pub block_group_nr: u16,         // 90: 本超级块所在的块组号
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:55:5
[INFO] [stdout]    |
[INFO] [stdout] 55 |     pub feature_compat: u32,         // 92: 兼容特性
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:56:5
[INFO] [stdout]    |
[INFO] [stdout] 56 |     pub feature_incompat: u32,       // 96: 不兼容特性
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:57:5
[INFO] [stdout]    |
[INFO] [stdout] 57 |     pub feature_ro_compat: u32,      // 100: 只读兼容特性
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:59:5
[INFO] [stdout]    |
[INFO] [stdout] 59 |     pub uuid: [u8; 16],              // 104: 128位UUID
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:60:5
[INFO] [stdout]    |
[INFO] [stdout] 60 |     pub volume_name: [u8; 16],       // 120: 卷名称
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:61:5
[INFO] [stdout]    |
[INFO] [stdout] 61 |     pub last_mounted: [u8; 64],      // 136: 最后挂载路径
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:62:5
[INFO] [stdout]    |
[INFO] [stdout] 62 |     pub algorithm_usage_bitmap: u32, // 200: 压缩算法位图
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:64:5
[INFO] [stdout]    |
[INFO] [stdout] 64 |     pub prealloc_blocks: u8,         // 204: 预分配块数
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:65:5
[INFO] [stdout]    |
[INFO] [stdout] 65 |     pub prealloc_dir_blocks: u8,     // 205: 目录预分配块数
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:66:5
[INFO] [stdout]    |
[INFO] [stdout] 66 |     pub reserved_gdt_blocks: u16,    // 206: 保留的GDT块数
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:68:5
[INFO] [stdout]    |
[INFO] [stdout] 68 |     pub journal_uuid: [u8; 16],      // 208: 日志UUID
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:69:5
[INFO] [stdout]    |
[INFO] [stdout] 69 |     pub journal_inum: u32,           // 224: 日志inode号
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:70:5
[INFO] [stdout]    |
[INFO] [stdout] 70 |     pub journal_dev: u32,            // 228: 日志设备号
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:71:5
[INFO] [stdout]    |
[INFO] [stdout] 71 |     pub last_orphan: u32,            // 232: 孤儿inode链表头
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:72:5
[INFO] [stdout]    |
[INFO] [stdout] 72 |     pub hash_seed: [u32; 4],         // 236: HTREE哈希种子
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:73:5
[INFO] [stdout]    |
[INFO] [stdout] 73 |     pub def_hash_version: u8,        // 252: 默认哈希版本
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:74:5
[INFO] [stdout]    |
[INFO] [stdout] 74 |     pub jnl_backup_type: u8,         // 253: 日志备份类型
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:75:5
[INFO] [stdout]    |
[INFO] [stdout] 75 |     pub desc_size: u16,              // 254: 组描述符大小
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:76:5
[INFO] [stdout]    |
[INFO] [stdout] 76 |     pub default_mount_opts: u32,     // 256: 默认挂载选项
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:77:5
[INFO] [stdout]    |
[INFO] [stdout] 77 |     pub first_meta_bg: u32,          // 260: 第一个元数据块组
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:78:5
[INFO] [stdout]    |
[INFO] [stdout] 78 |     pub mkfs_time: u32,              // 264: 创建时间
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:79:5
[INFO] [stdout]    |
[INFO] [stdout] 79 |     pub jnl_blocks: [u32; 17],       // 268: 日志备份
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:82:5
[INFO] [stdout]    |
[INFO] [stdout] 82 |     pub blocks_count_hi: u32,        // 336: 总块数（高32位）
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:83:5
[INFO] [stdout]    |
[INFO] [stdout] 83 |     pub r_blocks_count_hi: u32,      // 340: 保留块数（高32位）
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:84:5
[INFO] [stdout]    |
[INFO] [stdout] 84 |     pub free_blocks_count_hi: u32,   // 344: 空闲块数（高32位）
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:85:5
[INFO] [stdout]    |
[INFO] [stdout] 85 |     pub min_extra_isize: u16,        // 348: 最小额外inode大小
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:86:5
[INFO] [stdout]    |
[INFO] [stdout] 86 |     pub want_extra_isize: u16,       // 350: 期望额外inode大小
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:87:5
[INFO] [stdout]    |
[INFO] [stdout] 87 |     pub flags: u32,                  // 352: 标志
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:88:5
[INFO] [stdout]    |
[INFO] [stdout] 88 |     pub raid_stride: u16,            // 356: RAID步长
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:89:5
[INFO] [stdout]    |
[INFO] [stdout] 89 |     pub mmp_interval: u16,           // 358: MMP检查间隔
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:90:5
[INFO] [stdout]    |
[INFO] [stdout] 90 |     pub mmp_block: u64,              // 360: MMP块号
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:91:5
[INFO] [stdout]    |
[INFO] [stdout] 91 |     pub raid_stripe_width: u32,      // 368: RAID条带宽度
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:92:5
[INFO] [stdout]    |
[INFO] [stdout] 92 |     pub log_groups_per_flex: u8,     // 372: flex_bg组大小log2
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:93:5
[INFO] [stdout]    |
[INFO] [stdout] 93 |     pub checksum_type: u8,           // 373: 校验和类型
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:94:5
[INFO] [stdout]    |
[INFO] [stdout] 94 |     pub reserved_pad: u16,           // 374: 保留填充
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:95:5
[INFO] [stdout]    |
[INFO] [stdout] 95 |     pub kbytes_written: u64,         // 376: 已写入的KB数
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:96:5
[INFO] [stdout]    |
[INFO] [stdout] 96 |     pub snapshot_inum: u32,          // 384: 快照inode号
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:97:5
[INFO] [stdout]    |
[INFO] [stdout] 97 |     pub snapshot_id: u32,            // 388: 快照ID
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:98:5
[INFO] [stdout]    |
[INFO] [stdout] 98 |     pub snapshot_r_blocks_count: u64, // 392: 快照保留块数
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]   --> src/types.rs:99:5
[INFO] [stdout]    |
[INFO] [stdout] 99 |     pub snapshot_list: u32,          // 400: 快照链表头
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:100:5
[INFO] [stdout]     |
[INFO] [stdout] 100 |     pub error_count: u32,            // 404: 错误计数
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:101:5
[INFO] [stdout]     |
[INFO] [stdout] 101 |     pub first_error_time: u32,       // 408: 第一次错误时间
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:102:5
[INFO] [stdout]     |
[INFO] [stdout] 102 |     pub first_error_ino: u32,        // 412: 第一次错误inode
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:103:5
[INFO] [stdout]     |
[INFO] [stdout] 103 |     pub first_error_block: u64,      // 416: 第一次错误块号
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:104:5
[INFO] [stdout]     |
[INFO] [stdout] 104 |     pub first_error_func: [u8; 32],  // 424: 第一次错误函数
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:105:5
[INFO] [stdout]     |
[INFO] [stdout] 105 |     pub first_error_line: u32,       // 456: 第一次错误行号
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:106:5
[INFO] [stdout]     |
[INFO] [stdout] 106 |     pub last_error_time: u32,        // 460: 最后错误时间
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:107:5
[INFO] [stdout]     |
[INFO] [stdout] 107 |     pub last_error_ino: u32,         // 464: 最后错误inode
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:108:5
[INFO] [stdout]     |
[INFO] [stdout] 108 |     pub last_error_line: u32,        // 468: 最后错误行号
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:109:5
[INFO] [stdout]     |
[INFO] [stdout] 109 |     pub last_error_block: u64,       // 472: 最后错误块号
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:110:5
[INFO] [stdout]     |
[INFO] [stdout] 110 |     pub last_error_func: [u8; 32],   // 480: 最后错误函数
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:111:5
[INFO] [stdout]     |
[INFO] [stdout] 111 |     pub mount_opts: [u8; 64],        // 512: 挂载选项
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:112:5
[INFO] [stdout]     |
[INFO] [stdout] 112 |     pub usr_quota_inum: u32,         // 576: 用户配额inode
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:113:5
[INFO] [stdout]     |
[INFO] [stdout] 113 |     pub grp_quota_inum: u32,         // 580: 组配额inode
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:114:5
[INFO] [stdout]     |
[INFO] [stdout] 114 |     pub overhead_blocks: u32,        // 584: 开销块数
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:115:5
[INFO] [stdout]     |
[INFO] [stdout] 115 |     pub backup_bgs: [u32; 2],        // 588: 备份块组
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:116:5
[INFO] [stdout]     |
[INFO] [stdout] 116 |     pub encrypt_algos: [u8; 4],      // 596: 加密算法
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:117:5
[INFO] [stdout]     |
[INFO] [stdout] 117 |     pub encrypt_pw_salt: [u8; 16],   // 600: 加密密码盐
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:118:5
[INFO] [stdout]     |
[INFO] [stdout] 118 |     pub lpf_ino: u32,                // 616: lost+found inode
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:119:5
[INFO] [stdout]     |
[INFO] [stdout] 119 |     pub prj_quota_inum: u32,         // 620: 项目配额inode
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:120:5
[INFO] [stdout]     |
[INFO] [stdout] 120 |     pub checksum_seed: u32,          // 624: 校验和种子
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:121:5
[INFO] [stdout]     |
[INFO] [stdout] 121 |     pub reserved: [u32; 98],         // 628: 保留字段
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:122:5
[INFO] [stdout]     |
[INFO] [stdout] 122 |     pub checksum: u32,               // 1020: superblock校验和
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:178:5
[INFO] [stdout]     |
[INFO] [stdout] 178 |     pub mode: u16,                   // 0: 文件模式
[INFO] [stdout]     |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:179:5
[INFO] [stdout]     |
[INFO] [stdout] 179 |     pub uid: u16,                    // 2: 所有者 uid（低16位）
[INFO] [stdout]     |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:180:5
[INFO] [stdout]     |
[INFO] [stdout] 180 |     pub size_lo: u32,                // 4: 文件大小（低32位）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:181:5
[INFO] [stdout]     |
[INFO] [stdout] 181 |     pub atime: u32,                  // 8: 访问时间
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:182:5
[INFO] [stdout]     |
[INFO] [stdout] 182 |     pub ctime: u32,                  // 12: inode改变时间
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:183:5
[INFO] [stdout]     |
[INFO] [stdout] 183 |     pub mtime: u32,                  // 16: 修改时间
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:184:5
[INFO] [stdout]     |
[INFO] [stdout] 184 |     pub dtime: u32,                  // 20: 删除时间
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:185:5
[INFO] [stdout]     |
[INFO] [stdout] 185 |     pub gid: u16,                    // 24: 组 gid（低16位）
[INFO] [stdout]     |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:186:5
[INFO] [stdout]     |
[INFO] [stdout] 186 |     pub links_count: u16,            // 26: 硬链接数
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:187:5
[INFO] [stdout]     |
[INFO] [stdout] 187 |     pub blocks_count_lo: u32,        // 28: 512B块数（低32位）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:188:5
[INFO] [stdout]     |
[INFO] [stdout] 188 |     pub flags: u32,                  // 32: 标志
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:189:5
[INFO] [stdout]     |
[INFO] [stdout] 189 |     pub osd1: u32,                   // 36: OS相关1
[INFO] [stdout]     |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:190:5
[INFO] [stdout]     |
[INFO] [stdout] 190 |     pub blocks: [u32; EXT4_INODE_BLOCKS], // 40: 块指针数组（15个）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:191:5
[INFO] [stdout]     |
[INFO] [stdout] 191 |     pub generation: u32,             // 100: 文件版本
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:192:5
[INFO] [stdout]     |
[INFO] [stdout] 192 |     pub file_acl_lo: u32,            // 104: 文件 ACL（低32位）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:193:5
[INFO] [stdout]     |
[INFO] [stdout] 193 |     pub size_hi: u32,                // 108: 文件大小（高32位）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:194:5
[INFO] [stdout]     |
[INFO] [stdout] 194 |     pub obso_faddr: u32,             // 112: 废弃的fragment地址
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:196:5
[INFO] [stdout]     |
[INFO] [stdout] 196 |     pub blocks_high: u16,            // 116: 块数高16位
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:197:5
[INFO] [stdout]     |
[INFO] [stdout] 197 |     pub file_acl_high: u16,          // 118: ACL高16位
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:198:5
[INFO] [stdout]     |
[INFO] [stdout] 198 |     pub uid_high: u16,               // 120: uid高16位
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:199:5
[INFO] [stdout]     |
[INFO] [stdout] 199 |     pub gid_high: u16,               // 122: gid高16位
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:200:5
[INFO] [stdout]     |
[INFO] [stdout] 200 |     pub checksum_lo: u16,            // 124: 校验和低16位
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:201:5
[INFO] [stdout]     |
[INFO] [stdout] 201 |     pub reserved: u16,               // 126: 保留
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:203:5
[INFO] [stdout]     |
[INFO] [stdout] 203 |     pub extra_isize: u16,            // 128: 额外inode大小
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:204:5
[INFO] [stdout]     |
[INFO] [stdout] 204 |     pub checksum_hi: u16,            // 130: 校验和高16位
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:205:5
[INFO] [stdout]     |
[INFO] [stdout] 205 |     pub ctime_extra: u32,            // 132: 额外change时间
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:206:5
[INFO] [stdout]     |
[INFO] [stdout] 206 |     pub mtime_extra: u32,            // 136: 额外modification时间
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:207:5
[INFO] [stdout]     |
[INFO] [stdout] 207 |     pub atime_extra: u32,            // 140: 额外access时间
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:208:5
[INFO] [stdout]     |
[INFO] [stdout] 208 |     pub crtime: u32,                 // 144: 创建时间
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:209:5
[INFO] [stdout]     |
[INFO] [stdout] 209 |     pub crtime_extra: u32,           // 148: 额外创建时间
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:210:5
[INFO] [stdout]     |
[INFO] [stdout] 210 |     pub version_hi: u32,             // 152: 版本高32位
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:211:5
[INFO] [stdout]     |
[INFO] [stdout] 211 |     pub projid: u32,                 // 156: 项目ID
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:255:5
[INFO] [stdout]     |
[INFO] [stdout] 255 |     pub inode: u32,                  // inode 编号
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:256:5
[INFO] [stdout]     |
[INFO] [stdout] 256 |     pub rec_len: u16,                // 记录长度
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:257:5
[INFO] [stdout]     |
[INFO] [stdout] 257 |     pub name_len: u8,                // 名称长度
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:258:5
[INFO] [stdout]     |
[INFO] [stdout] 258 |     pub file_type: u8,               // 文件类型
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:275:5
[INFO] [stdout]     |
[INFO] [stdout] 275 |     pub limit: u16,                  // 最大条目数
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:276:5
[INFO] [stdout]     |
[INFO] [stdout] 276 |     pub count: u16,                  // 当前条目数
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:313:5
[INFO] [stdout]     |
[INFO] [stdout] 313 |     pub inode: u32,                  // inode 编号
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:314:5
[INFO] [stdout]     |
[INFO] [stdout] 314 |     pub entry_len: u16,              // 记录长度
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:315:5
[INFO] [stdout]     |
[INFO] [stdout] 315 |     pub name_len: u8,                // 名称长度（1 for "."）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:316:5
[INFO] [stdout]     |
[INFO] [stdout] 316 |     pub inode_type: u8,              // 文件类型
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:317:5
[INFO] [stdout]     |
[INFO] [stdout] 317 |     pub name: [u8; 4],               // 名称 ".\0\0\0"
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:344:5
[INFO] [stdout]     |
[INFO] [stdout] 344 |     pub reserved_zero: u32,          // 保留字段，必须为 0
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:345:5
[INFO] [stdout]     |
[INFO] [stdout] 345 |     pub hash_version: u8,            // 哈希版本
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:346:5
[INFO] [stdout]     |
[INFO] [stdout] 346 |     pub info_length: u8,             // 信息长度（8字节）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:347:5
[INFO] [stdout]     |
[INFO] [stdout] 347 |     pub indirect_levels: u8,         // 间接层数
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:348:5
[INFO] [stdout]     |
[INFO] [stdout] 348 |     pub unused_flags: u8,            // 未使用的标志
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:395:5
[INFO] [stdout]     |
[INFO] [stdout] 395 |     pub hash: u32,                   // 哈希值
[INFO] [stdout]     |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:396:5
[INFO] [stdout]     |
[INFO] [stdout] 396 |     pub block: u32,                  // 块号
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:434:5
[INFO] [stdout]     |
[INFO] [stdout] 434 |     pub dots: [ext4_dir_idx_dot_en; 2], // "." 和 ".." 目录项
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:435:5
[INFO] [stdout]     |
[INFO] [stdout] 435 |     pub info: ext4_dir_idx_rinfo,    // 根信息
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:436:5
[INFO] [stdout]     |
[INFO] [stdout] 436 |     pub en: [ext4_dir_idx_entry; 0], // 索引条目数组（变长）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:451:5
[INFO] [stdout]     |
[INFO] [stdout] 451 |     pub fake: ext4_fake_dir_entry,   // 假目录项
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:452:5
[INFO] [stdout]     |
[INFO] [stdout] 452 |     pub entries: [ext4_dir_idx_entry; 0], // 索引条目数组（变长）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:461:5
[INFO] [stdout]     |
[INFO] [stdout] 461 |     pub inode: u32,                  // inode 编号（通常为 0）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:462:5
[INFO] [stdout]     |
[INFO] [stdout] 462 |     pub entry_len: u16,              // 记录长度
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:463:5
[INFO] [stdout]     |
[INFO] [stdout] 463 |     pub name_len: u8,                // 名称长度（0）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:464:5
[INFO] [stdout]     |
[INFO] [stdout] 464 |     pub inode_type: u8,              // 文件类型
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:485:5
[INFO] [stdout]     |
[INFO] [stdout] 485 |     pub reserved: u32,               // 保留字段
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:486:5
[INFO] [stdout]     |
[INFO] [stdout] 486 |     pub checksum: u32,               // 校验和
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:513:5
[INFO] [stdout]     |
[INFO] [stdout] 513 |     pub reserved_zero1: u32,         // 保留字段 1
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:514:5
[INFO] [stdout]     |
[INFO] [stdout] 514 |     pub rec_len: u16,                // 记录长度（通常为 12）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:515:5
[INFO] [stdout]     |
[INFO] [stdout] 515 |     pub reserved_zero2: u8,          // 保留字段 2
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:516:5
[INFO] [stdout]     |
[INFO] [stdout] 516 |     pub reserved_ft: u8,             // 保留文件类型（0xDE）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:517:5
[INFO] [stdout]     |
[INFO] [stdout] 517 |     pub checksum: u32,               // 校验和
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:554:5
[INFO] [stdout]     |
[INFO] [stdout] 554 |     pub block_bitmap_lo: u32,        // 块位图块号（低32位）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:555:5
[INFO] [stdout]     |
[INFO] [stdout] 555 |     pub inode_bitmap_lo: u32,        // inode位图块号（低32位）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:556:5
[INFO] [stdout]     |
[INFO] [stdout] 556 |     pub inode_table_lo: u32,         // inode表起始块号（低32位）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:557:5
[INFO] [stdout]     |
[INFO] [stdout] 557 |     pub free_blocks_count_lo: u16,   // 空闲块数（低16位）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:558:5
[INFO] [stdout]     |
[INFO] [stdout] 558 |     pub free_inodes_count_lo: u16,   // 空闲inode数（低16位）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:559:5
[INFO] [stdout]     |
[INFO] [stdout] 559 |     pub used_dirs_count_lo: u16,     // 目录数（低16位）
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: missing documentation for a struct field
[INFO] [stdout]    --> src/types.rs:560:5
[INFO] [stdout]     |
[WARN] too many lines in the log, truncating it
