ext4: spurious "orphan cleanup on readonly fs" due to remount,ro failing to reset orphan_file structures

Tigran Aivazian <[email protected]> Sun, 2 Aug 2026 23:18:39 +0100
Newsgroups org.kernel.vger.linux-fsdevel,org.kernel.vger.linux-kernel
Message-ID <CAK+_RLmWU-GjYu9Z+AWnoKd__AiaWZUt=zOkx3jr2-a4Hv3KHg@mail.gmail.com>
Hello,

I have been experimenting with optimising rootfs for custom builds of
Ubuntu 26 with various options like fast_commit, sparse_super2,
orphan_file, inline_data, metadata_csum_seed, etc. And I noticed
something strange: if my root filesystem is made with "orphan_file"
feature then on every reboot I get this message:

EXT4-fs (sda): orphan cleanup on readonly fs

(tested with SSD, NVMe and even old HDD -- because initially I thought
that maybe it was NVMe controller failing to flush its volatile DRAM
cache to the NAND flash, but no, it wasn't the reason)

I think what happens here is that when a filesystem with the
"orphan_file" feature is fully unmounted, ext4_put_super()
successfully clears the "orphan_present" superblock flag AND properly
collapses/resets the physical orphan file headers. However, during a
read-only remount (which systemd must do for / in order to halt the
system) ext4_reconfigure() clears the "orphan_present" superblock flag
but skips resetting the physical orphan file structures. Consequently,
on the next boot (which starts with a read-only mount of /),
ext4_fill_super() observes that while the superblock flag is clear,
the orphan file itself appears non-empty. This unconditionally
triggers ext4_orphan_cleanup(), which prints the spurious warning,
scans the file, finds 0 orphans, and completes silently.

Let's test this theory on the kernel 7.0.0-28-generic of Ubuntu 26:

# 1. Create a filesystem with the orphan_file feature
mkfs.ext4 -O orphan_file /dev/sda

# 2. Mount read-write
mount -o rw /dev/sda /mnt

# 3. Remount read-only (Simulating systemd shutdown)
# This clears the orphan_present flag in the superblock, but leaves
the orphan file structures intact.
mount -o remount,ro /mnt

# 4. Unmount and mount read-only (Simulating the next boot)
umount /mnt
mount -o ro /dev/sda /mnt

Expected result in dmesg: nothing (well, except the usual
mount/remount messages about ordered data mode, etc).

Actual result in dmesg:

EXT4-fs (sda): orphan cleanup on readonly fs

Since this affects the default shutdown path for any modern Linux
distribution using systemd and ext4 with the "orphan_file" feature, it
would be great to get the remount,ro teardown path aligned with the
full unmount teardown path in this aspect.

Kind regards,
Tigran