78 lines
3.3 KiB
Markdown
78 lines
3.3 KiB
Markdown
# EROFS Feature Status
|
|
|
|
This list describes behavior implemented and manually qualified in the
|
|
FreeBSD 15 module. It is not a claim of complete Linux EROFS feature parity.
|
|
|
|
## Filesystem and Metadata
|
|
|
|
- Read-only mount/unmount and `statfs`.
|
|
- Superblock CRC32C, declared image/media bounds, 48-bit block/root-NID decode.
|
|
- Compact and extended inodes.
|
|
- Correct compact non-directory `I_NLINK_1` semantics and directory
|
|
`dot_omitted` semantics.
|
|
- Linux `new_decode_dev` major/minor decoding followed by FreeBSD `makedev()`.
|
|
- Superblock-seeded, inode-metadata-derived vnode/NFS generation synchronized
|
|
with `va_gen`; metadata-identical payload replacement is outside the stale
|
|
handle guarantee.
|
|
- NFS export, 64-bit NID file handles, stale-generation and malformed-FID
|
|
validation.
|
|
|
|
## Data Layouts
|
|
|
|
- `FLAT_PLAIN` and `FLAT_INLINE` reads.
|
|
- Inline tails constrained to the inode metadata block and declared backing
|
|
bounds.
|
|
- Chunk-based files, chunk indexes, holes, device tables, explicit devices,
|
|
and flatdev mapping.
|
|
- LZ4, MicroLZMA, DEFLATE, and ZSTD compressed reads.
|
|
- Full and compact indexes, partial references, HEAD2/interlaced records,
|
|
ztailpacking, and fragment-backed compressed data used by qualified images.
|
|
- Compressed `va_bytes`/`st_blocks` from the complete 48-bit on-disk compressed
|
|
block count; plain, inline, and chunk files retain logical block rounding.
|
|
|
|
## Vnode and Directory Operations
|
|
|
|
- `vget`, root lookup, `vfs_hash`, namecache, and `vn_vget_ino` integration.
|
|
- `lookup`, `readdir`, stable restart cookies, cold nested lookup, and
|
|
Linux-compatible nonzero final-name padding.
|
|
- Shared strict validation for dirent arrays, `nameoff`, block bounds, and
|
|
illegal names.
|
|
- `getattr`, access checks, `readlink`, `pathconf`, and read-only mutation
|
|
rejection, including combined special-vnode setattr requests.
|
|
- FreeBSD 15 `vnode_pager_local_getpages` and compatible async pager entry;
|
|
`VOP_BMAP` remains explicitly unsupported.
|
|
|
|
## Xattrs and ACLs
|
|
|
|
- Inline and shared `user.*`, `trusted.*`, and `security.*` attributes.
|
|
- Shared attributes in primary metadata and metabox containers.
|
|
- Long-prefix and packed-prefix-table lookup.
|
|
- FreeBSD user/system namespace exposure and POSIX access/default ACL reads.
|
|
- Read-only xattr/ACL mutation behavior.
|
|
|
|
## Documentation and Validation
|
|
|
|
- `erofs(5)` manual page.
|
|
- Markdown manual tests TC001-TC161, with unresolved cases tracked in
|
|
`issues/`.
|
|
- FreeBSD 15 manual reports with fixture hashes and cleanup evidence.
|
|
- Final explicit-extent ordering, 48-bit allocation, special setattr,
|
|
`OFF_MAX` directory-cookie, and build-tool failure checks.
|
|
|
|
## Build Qualification
|
|
|
|
- FreeBSD 15 `amd64` is the only currently validated and accepted target;
|
|
`src/Makefile` rejects other architectures.
|
|
- ZSTD support is disabled by default (`WITH_ZSTDIO=0`). Opt-in builds use
|
|
`WITH_ZSTDIO=1` and require a kernel built with `options ZSTDIO`.
|
|
|
|
## Not Implemented or Not Claimed
|
|
|
|
- Writable filesystem operations.
|
|
- A CI pipeline or automated kernel-test harness.
|
|
- Positive mapped-payload execution of the explicit compressed-extent format;
|
|
TC146 remains PARTIAL and the fixture limitation is tracked under `issues/`.
|
|
- Blanket support for every future EROFS incompat feature or every dedupe
|
|
encoding; only the explicitly qualified fragment/metabox forms are claimed.
|
|
- Performance guarantees from the manual throughput observations.
|