Error loading journal when using ext4 with fast_commit and calling fsync on unlinked file inside directory (if system crashes)

From: Slava0135

Date: Mon Aug 24 2026 - 07:53:28 EST


Detailed description
====================

Hello, there seems to be an issue with ext4 (fast_commit) crash behavior:

1. Create a new directory and a new file inside the directory.
2. Sync filesystem.
3. Open file.
4. Unlink file.
5. Fsync file.

After system crash (e.g. power failure) mounting file system results in
error (`Structure needs cleaning` / `error loading journal`).


System info
===========

Linux version 7.2 & 6.17.0-29-generic (Ubuntu 25.10)


How to reproduce
================

Test:

```
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>

int main() {
int status;
int fd;

status = mkdir("dir", S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
printf("MKDIR: %d\n", status);

status = creat("dir/file", S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
printf("CREAT: %d\n", status);
close(status);

sync();

status = open("dir/file", O_WRONLY);
printf("OPEN: %d\n", status);
fd = status;

status = unlink("dir/file");
printf("UNLINK: %d\n", status);

status = fsync(fd);
printf("FSYNC: %d\n", status);
}
// system crashes!
```

mount:

```
root@ubuntu:~# mount /dev/vdb /mnt/fstest/
mount: /mnt/fstest: mount() failed: Structure needs cleaning.
dmesg(1) may have more information after failed mount system call.
```

dmesg:

```
[ 27.437203] JBD2: journal recovery failed
[ 27.437206] EXT4-fs (vdb): error loading journal
```

Steps:

1. Create and mount a new ext4 filesystem with `fast_commit` option.
2. Change directory to root of the filesystem and run the compiled test.
3. Cause hard system crash (e.g. QEMU `system_reset` command).
4. Remount filesystem after crash.
5. Observe that mount fails.