Skip to content

Releases: emmanuel-deloget/fsforge

fsforge v0.2.0

Choose a tag to compare

@emmanuel-deloget emmanuel-deloget released this 26 Jul 15:23
v0.2.0
f8a1217

fsforge v0.2.0

Large-file support in the ext engines, plus the allocator work it needed.

alloc: an allocation is no longer required to fit in a single contiguous
run. AllocRuns chains as many runs as a request needs — the whole remainder
when it fits, otherwise the largest run available — and rolls back entirely
on failure. Handing out a partial run is the new optional RunAllocator
capability (AllocUpTo); a plain Allocator is probed by halving instead, so
an injected policy keeps working unchanged. Bitmap now scans 64 bits at a
time from a free hint rather than bit by bit from block 0, which took layout
from quadratic to near-linear in block count; first-fit stays exact, so
layouts are byte-identical to v0.1.1.

ext: files, directories and long symlink targets are laid out across several
runs. Every block group opens with its own metadata, so no free run can span
more than one group — 128 MiB at 4 KiB blocks, 8 MiB at 1 KiB — and any
larger object previously failed with "alloc: no contiguous space" whatever
the image size. ext2 and ext4 were both affected.

ext4: the extent tree grows index nodes once the leaves outgrow the four
that fit in i_block, adding a level until the root fits, capped at the
kernel's depth of 5. i_blocks accounts for those nodes.

ext: a file above 4 GiB is now refused rather than silently truncated;
i_size is written as a 32-bit field and large_file is not implemented.

Validated with e2fsck plus a byte-for-byte debugfs extraction, and by
mounting under the Linux kernel: 220 MiB (inline extents), 700 MiB and a
1 KiB-block 40 MiB file (indexed trees), and an OCI-shaped 20 003-file,
732 MiB rootfs. (#14)

fsforge v0.1.1

Choose a tag to compare

@emmanuel-deloget emmanuel-deloget released this 21 Jun 23:06
v0.1.1
1b94649

Bug-fix release.

Fixes

  • ext (ext4): drop a runt final block group that could overrun its inode table. When the device size left a small remainder past the last full block group, the final group was laid out with the full per-group inode table, which ran past the group and the end of the device. The Linux kernel's ext4_check_descriptors then refused to mount the image (Inode table for group N not in group), making the failure size-dependent. computeGeometry now drops such a runt group (rounding down to the group boundary), matching mke2fs behaviour. (#13, fixes #12)

Full changelog: v0.1.0...v0.1.1

v0.1.0

Choose a tag to compare

@emmanuel-deloget emmanuel-deloget released this 21 Jun 14:28
v0.1.0
90480c2

What's Changed

New Contributors

Full Changelog: https://github.com/emmanuel-deloget/fsforge/commits/v0.1.0