{
  "slug": "ext4-orphan-file",
  "term": "Ext4 orphan file",
  "aliases": [
    "orphan_file",
    "COMPAT_ORPHAN_FILE"
  ],
  "definition": "An ext4 orphan file is an internal metadata file that stores inode-number slots for orphan cleanup when the orphan_file filesystem feature is enabled.",
  "note": "The legacy orphan list starts at s_last_orphan and uses each inode's i_dtime field as a next-inode link. The orphan file instead uses the special inode referenced by s_orphan_file_inum; a zero slot is unused. RO_COMPAT_ORPHAN_PRESENT indicates that entries may require recovery, not that an orphan definitely exists. It is set during writable use and cleared on clean unmount. [linux-ext4-orphan-layout] Unlike COMPAT_ORPHAN_FILE, an unknown RO_COMPAT_ORPHAN_PRESENT bit prevents an older kernel from mounting read-write; clearing it removes this barrier, not restrictions from other features or older checking tools. [linux-ext4-superblock] Linux v6.12 falls back to the legacy list when orphan-file insertion returns ENOSPC. Here ENOSPC can mean no available orphan-file slots or a bounded slot search giving up, not necessarily filesystem-wide space exhaustion. This insertion path does not dynamically grow the preallocated orphan file, and fallback does not itself establish a user-visible operation failure. [linux-v6-12-ext4-orphan] See the paired recovery analysis. [hesela-ext4-orphan-cleanup]",
  "status": "shipping",
  "advantages": [],
  "limitations": [
    {
      "text": "The feature changes recovery bookkeeping, not unlink semantics or application synchronization requirements.",
      "citationIds": [
        "linux-ext4-orphan-layout",
        "linux-unlink-2",
        "linux-fsync-2"
      ]
    }
  ],
  "related": [
    "ext4-orphan-inode",
    "inode",
    "unlink"
  ],
  "supersedes": [],
  "supersededBy": [],
  "firstSeen": null,
  "lastSeen": null,
  "citations": [
    {
      "id": "linux-ext4-orphan-layout",
      "title": "Linux ext4 documentation: Orphan file (v6.12)",
      "url": "https://github.com/torvalds/linux/blob/adc218676eef25575469234709c2d87185ca223a/Documentation/filesystems/ext4/orphan.rst",
      "accessed": "2026-10-15"
    },
    {
      "id": "linux-v6-12-ext4-orphan",
      "title": "Linux v6.12: ext4 orphan inode handling",
      "url": "https://github.com/torvalds/linux/blob/adc218676eef25575469234709c2d87185ca223a/fs/ext4/orphan.c",
      "accessed": "2026-10-15"
    },
    {
      "id": "linux-ext4-superblock",
      "title": "Linux ext4 documentation: Super block feature compatibility (v6.12)",
      "url": "https://github.com/torvalds/linux/blob/adc218676eef25575469234709c2d87185ca223a/Documentation/filesystems/ext4/super.rst",
      "accessed": "2026-10-15"
    },
    {
      "id": "linux-unlink-2",
      "title": "Linux manual: unlink(2)",
      "url": "https://man7.org/linux/man-pages/man2/unlink.2.html",
      "accessed": "2026-10-15"
    },
    {
      "id": "linux-fsync-2",
      "title": "Linux manual: fsync(2)",
      "url": "https://man7.org/linux/man-pages/man2/fsync.2.html",
      "accessed": "2026-10-15"
    },
    {
      "id": "hesela-ext4-orphan-cleanup",
      "title": "Hesela: ext4 journal replay and orphan cleanup",
      "url": "https://hesela.com/analyses/ext4-journal-replay-revocation/#orphan-cleanup",
      "accessed": "2026-10-15"
    }
  ],
  "updated": "2026-10-15"
}
