Repository navigation
lambutter 0.4.0
lambutter 0.4.0 fixes three ways 0.3.1 could read the wrong data, adds opening a btrfs filesystem at a chosen subvolume, and moves to ruzstd 0.9.1.
Fixed
- Reads that stopped at a B-tree leaf boundary. A file whose extent items continue in the next leaf read as zeros from that point, and a directory whose index had a gap at a leaf boundary lost entries. On images written by Linux, a 12 MB kernel read zeros from 3.5 MB on, a 190 MB zstd file read wrong, and a 200-entry
loader/entrieslisted 72. - Subvolumes. An entry naming a subvolume was read as an inode in the parent, so a
/bootsubvolume resolved to the parent's root directory. Paths and listings now cross into subvolumes the way a Linux mount shows them, and a snapshot's copy of a nested subvolume's entry reads as an empty directory, as in Linux. - LZO. Padding was detected at the wrong offsets, so many real LZO extents failed with
BadCompression, and sectors above 4 KiB weren't handled. - Feature checks. Unknown incompat bits are refused instead of ignored, remap-tree is refused until it's supported, and xxhash, sha256 and blake2 filesystems report
UnsupportedChecksuminstead of a checksum mismatch.
Breaking changes
Inodecarries its subvolume and its fields are private. Useobjectid()andsubvolume().DirEntrygainsinodeand is#[non_exhaustive].ErrorgainsNotASubvolume.- The MSRV is Rust 1.87, which ruzstd 0.9 requires.
Added
Btrfs::open_subvol_idandBtrfs::open_subvol_path, matching the kernel'ssubvolid=andsubvol=.Btrfs::subvolume(), replacingdefault_subvol_objectid(), which remains as a deprecated alias.- ruzstd 0.9.1, which fixes RUSTSEC-2026-0344, and miniz_oxide 0.9.1.
The full list is in CHANGELOG.md.
lambutter is the btrfs reader in LamBoot, from Lamco Development LLC.