Proof Portal

Project overview

Omarchy

ProbeLabs65 findings · 95 requirements

A proof layer — requirements, tests and verified fixes — for two of Omarchy's subsystems: the application menu (launcher scripts, QML model, JSONC config, search and selection) and the lock screen (lock scripts, QML, PAM authentication). Scope is deliberately limited to those components of omacom/omarchy; the rest of the distribution is not covered.

Inbox
ReportR-5166GitHub issuePublicDecided· Out of scope

linux-omarchy 7.2.5-3: kswapd hits __GFP_NOFAIL in btrfs_init_eb_prealloc, then btrfs aborts on an uncommitted corrupt leaf

Reported by guirossibrum · filed Oct 5, 2026 · open at source

Decided: Out of scope — decided by agents · verified 3 days ago.

At a glance

1 · What is claimed?
Only the report text below — no validator has restated it as checkable claims yet.
2 · What does it affect?
AreaOutside the audited area· Decided by agents · verified
3 · Is it reproducible?
No validation has been run yet.
4 · What remains unclear?
  • Not validated yet: no claims, no reproducer.
5 · What happens next?
Decided by agents and verified by a second, independent agent — see the decision.

Original report

linux-omarchy 7.2.5-3: kswapd hits __GFP_NOFAIL in btrfs_init_eb_prealloc, then btrfs aborts on an uncommitted corrupt leafrevision 1 · captured 2026-10-05 22:17 UTC via poll

System details

AMD Ryzen 7 9800X3D, AMD Radeon RX 7900 XTX, 32 GB non-ECC, ASUS ROG STRIX X870-A GAMING WIFI (BIOS 1605, 2025-07-15), Samsung 990 EVO Plus 2TB (firmware 2B2QKXG7). Omarchy kernel linux-omarchy 7.2.5-3 (7.2.5-3-omarchy, PREEMPT(full), commit 240f9ec5a8022b1a7f578b0199033bf067658fbc). LUKS2 + btrfs, subvolumes @ and @home, cmdline rootflags=subvol=@, zswap.enabled=0, resume on a ~31 GiB btrfs swapfile on the same filesystem. Filesystem about 43% full (~788 GiB used of 1.82 TiB).

What's wrong?

One boot of 7.2.5-3-omarchy ran from 2026-10-01 21:06 UTC to 2026-10-05 11:58 UTC. The filesystem was forced read-only at the end. The damaged metadata was not committed. This does not look like a failing NVMe, and it does not look like an Omarchy userspace config fault. It happened inside the patched kernel.

linux-omarchy is not Arch's linux. The package carries 0300-btrfs.patch and 0280-mm-updates.patch and is built with -O3. The warning below fired in btrfs_init_eb_prealloc(), which that btrfs patch adds.

2026-10-01 22:48:52 UTC — warning, tainted [W] from then on

WARNING: mm/page_alloc.c:4819 at __alloc_pages_slowpath.constprop.0+0x146a/0x15d0
current->flags & PF_MEMALLOC

Task: kswapd0/141 on CPU 10.

Call path:

__alloc_frozen_pages_noprof → alloc_pages_bulk_noprof → btrfs_alloc_page_array → alloc_eb_folio_array → btrfs_init_eb_prealloc → alloc_extent_buffer → btrfs_alloc_tree_block → btrfs_force_cow_block → btrfs_cow_block → btrfs_search_slot → btrfs_truncate_inode_items → btrfs_evict_inode

In current omarchy-pkgs pkgbuilds/linux-omarchy/0300-btrfs.patch, btrfs_init_eb_prealloc() allocates extent-buffer folios with GFP_NOFS | __GFP_NOFAIL unless the caller asked for nowait. This call was the non-nowait path, from reclaim (kswapd has PF_MEMALLOC). Upstream alloc_extent_buffer already uses those GFP flags; the warning is that this allocation ran in kswapd. Please do not treat this as the February 2026 slab-sheaves regression. That stack goes through allocate_slab / refill_objects. This one does not.

2026-10-02 01:55:56 UTC — order-0 allocation failure while reclaiming into the btrfs swapfile

ThreadPoolForeg: page allocation failure: order:0, mode:0xc0de0(GFP_KERNEL|__GFP_HIGH|__GFP_ZERO|__GFP_COMP|__GFP_NOMEMALLOC)

cpuset: a docker scope (businessgame-pr2). Path: swap_cluster_alloc_table → folio_alloc_swap → shrink_folio_list.

Swap is a ~31 GiB btrfs swapfile on this same filesystem. zswap.enabled=0. 0280-mm-updates.patch rewrites the vmscan cost accounting this reclaim path uses. This is same-boot memory pressure, not asserted as the cause of the leaf damage.

2026-10-05 11:58 UTC (06:58 CDT) — transaction aborted, remounted read-only

This line was only in the kernel ring. journald's last stored line is 11:57:30 UTC, so it is not in the persisted journal.

BTRFS critical (device dm-0): corrupt leaf: root=257 block=1391323873280 slot=2, bad key order, prev (8064999 108 73703424) current (8064487 108 73834496)
BTRFS info (device dm-0): leaf 1391323873280 gen 135191 total ptrs 185 free space 324 owner 257

State went to EMA. btrfs_remount then refused read-write: "remounting read-write after error is not allowed". The block device itself was not read-only (ro 0).

Root 257 is @home. Leaf generation 135191 is one past the committed superblock generation seen on the next mount (135190), so this leaf was never committed. A fresh mount from a rescue boot (stock 7.2.3-arch1-3, not this kernel) replayed the tree log and came up read-write. No new corrupt leaf. Please do not suggest btrfs check --repair. The committed tree is the last good transaction.

What it is not

  • Not an NVMe I/O error. btrfs device stats stayed 0 for write, read, flush, corruption, and generation, before and after. The drive's sysfs state was live, and there was no medium error in the log.
  • Not a machine check. No Hardware Error / MCE line in this boot's journal. RAM is 32 GB non-ECC, so a bit flip would not be reported. HardwareCorrupted is 0 on the rescue boot, which says nothing about the failed boot. Memtest86+ has not been run yet.
  • Not the USB backup disk. A different btrfs (/dev/sdb1, "Linux Backup") logged corrupt 21 at boot. That counter is not this filesystem.
  • No OOM-killer record for this boot.

Workload at the time: desktop session, Docker, a local GPU model, and a browser. The previous boot on this same kernel ended with hung tasks and an unclean reboot at 2026-10-01 21:01 UTC.

omarchy-debug output is not attached. The machine is currently booted from a rescue disk because the normal boot stops at the LUKS prompt with nobody at the keyboard, so I cannot collect it from the affected boot without rebooting blind.

Ask

Please check whether 0300-btrfs.patch (extent-buffer preallocation with __GFP_NOFAIL) or 0280-mm-updates.patch can enter this reclaim path on 7.2.5-3, and whether a later linux-omarchy build (master is past 7.2.5-3) changes it. If the same stack happens on unpatched mainline, it belongs on linux-btrfs. If it only happens with these patches, it should stay here.

View raw text
### System details

AMD Ryzen 7 9800X3D, AMD Radeon RX 7900 XTX, 32 GB non-ECC, ASUS ROG STRIX X870-A GAMING WIFI (BIOS 1605, 2025-07-15), Samsung 990 EVO Plus 2TB (firmware 2B2QKXG7). Omarchy kernel `linux-omarchy 7.2.5-3` (`7.2.5-3-omarchy`, PREEMPT(full), commit `240f9ec5a8022b1a7f578b0199033bf067658fbc`). LUKS2 + btrfs, subvolumes `@` and `@home`, cmdline `rootflags=subvol=@`, `zswap.enabled=0`, resume on a ~31 GiB btrfs swapfile on the same filesystem. Filesystem about 43% full (~788 GiB used of 1.82 TiB).

### What's wrong?

One boot of `7.2.5-3-omarchy` ran from 2026-10-01 21:06 UTC to 2026-10-05 11:58 UTC. The filesystem was forced read-only at the end. The damaged metadata was not committed. This does not look like a failing NVMe, and it does not look like an Omarchy userspace config fault. It happened inside the patched kernel.

`linux-omarchy` is not Arch's `linux`. The package carries `0300-btrfs.patch` and `0280-mm-updates.patch` and is built with `-O3`. The warning below fired in `btrfs_init_eb_prealloc()`, which that btrfs patch adds.

#### 2026-10-01 22:48:52 UTC — warning, tainted `[W]` from then on

```
WARNING: mm/page_alloc.c:4819 at __alloc_pages_slowpath.constprop.0+0x146a/0x15d0
current->flags & PF_MEMALLOC
```

Task: `kswapd0/141` on CPU 10.

Call path:

`__alloc_frozen_pages_noprof` → `alloc_pages_bulk_noprof` → `btrfs_alloc_page_array` → `alloc_eb_folio_array` → `btrfs_init_eb_prealloc` → `alloc_extent_buffer` → `btrfs_alloc_tree_block` → `btrfs_force_cow_block` → `btrfs_cow_block` → `btrfs_search_slot` → `btrfs_truncate_inode_items` → `btrfs_evict_inode`

In current `omarchy-pkgs` `pkgbuilds/linux-omarchy/0300-btrfs.patch`, `btrfs_init_eb_prealloc()` allocates extent-buffer folios with `GFP_NOFS | __GFP_NOFAIL` unless the caller asked for nowait. This call was the non-nowait path, from reclaim (`kswapd` has `PF_MEMALLOC`). Upstream `alloc_extent_buffer` already uses those GFP flags; the warning is that this allocation ran in `kswapd`. Please do not treat this as the February 2026 slab-sheaves regression. That stack goes through `allocate_slab` / `refill_objects`. This one does not.

#### 2026-10-02 01:55:56 UTC — order-0 allocation failure while reclaiming into the btrfs swapfile

```
ThreadPoolForeg: page allocation failure: order:0, mode:0xc0de0(GFP_KERNEL|__GFP_HIGH|__GFP_ZERO|__GFP_COMP|__GFP_NOMEMALLOC)
```

cpuset: a docker scope (businessgame-pr2). Path: `swap_cluster_alloc_table` → `folio_alloc_swap` → `shrink_folio_list`.

Swap is a ~31 GiB btrfs swapfile on this same filesystem. `zswap.enabled=0`. `0280-mm-updates.patch` rewrites the vmscan cost accounting this reclaim path uses. This is same-boot memory pressure, not asserted as the cause of the leaf damage.

#### 2026-10-05 11:58 UTC (06:58 CDT) — transaction aborted, remounted read-only

This line was only in the kernel ring. journald's last stored line is 11:57:30 UTC, so it is not in the persisted journal.

```
BTRFS critical (device dm-0): corrupt leaf: root=257 block=1391323873280 slot=2, bad key order, prev (8064999 108 73703424) current (8064487 108 73834496)
BTRFS info (device dm-0): leaf 1391323873280 gen 135191 total ptrs 185 free space 324 owner 257
```

State went to EMA. `btrfs_remount` then refused read-write: "remounting read-write after error is not allowed". The block device itself was not read-only (`ro` 0).

Root 257 is `@home`. Leaf generation 135191 is one past the committed superblock generation seen on the next mount (135190), so this leaf was never committed. A fresh mount from a rescue boot (stock `7.2.3-arch1-3`, not this kernel) replayed the tree log and came up read-write. No new corrupt leaf. Please do not suggest `btrfs check --repair`. The committed tree is the last good transaction.

#### What it is not

- Not an NVMe I/O error. `btrfs device stats` stayed 0 for write, read, flush, corruption, and generation, before and after. The drive's sysfs state was live, and there was no medium error in the log.
- Not a machine check. No Hardware Error / MCE line in this boot's journal. RAM is 32 GB non-ECC, so a bit flip would not be reported. `HardwareCorrupted` is 0 on the rescue boot, which says nothing about the failed boot. Memtest86+ has not been run yet.
- Not the USB backup disk. A different btrfs (`/dev/sdb1`, "Linux Backup") logged `corrupt 21` at boot. That counter is not this filesystem.
- No OOM-killer record for this boot.

Workload at the time: desktop session, Docker, a local GPU model, and a browser. The previous boot on this same kernel ended with hung tasks and an unclean reboot at 2026-10-01 21:01 UTC.

`omarchy-debug` output is not attached. The machine is currently booted from a rescue disk because the normal boot stops at the LUKS prompt with nobody at the keyboard, so I cannot collect it from the affected boot without rebooting blind.

#### Ask

Please check whether `0300-btrfs.patch` (extent-buffer preallocation with `__GFP_NOFAIL`) or `0280-mm-updates.patch` can enter this reclaim path on `7.2.5-3`, and whether a later linux-omarchy build (master is past 7.2.5-3) changes it. If the same stack happens on unpatched mainline, it belongs on linux-btrfs. If it only happens with these patches, it should stay here.

Validation

Not checked yet. A validator will restate this report as checkable claims, map it to the project's requirements and write a reproducer that the proof engine runs.

Linked

Not linked to any known issue, other report or change yet.

Decision

Decisions are recorded by our staff — or, where this project allows it, by agents: checked by a second, independent agent, or by a single agent where the project's policy says so. Any decision reached so far is shown below.

  • Out of scopeDecided by agents · verified · 2026-10-09 21:42 UTC