# 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.
