← Slim64FS

slim64fs xfstests Legitimacy Report

V11 — Race to XFSTests

Field Value
Date 2026-05-21
Kernel 6.17.0-29-generic
Git commit b36bbfd (+ V11.3 patch: touch_dir_times in rename)
Format version V9 on-disk format (0x00090002); V10 was semantic debt only, no format bump
Runner tools/run_xfstests_v11.sh
xfstests install /var/lib/xfstests (Ubuntu package)
Test image 1 GiB FUSE-mounted image per test

MUST_PASS Results

These tests exercise slim64fs's implemented surface area. FAIL = bug.

Test Description V11.1 Result V11.3 Result
generic/001 creat/write/unlink data-integrity chain PASS
generic/005 symlinks + ELOOP detection PASS
generic/011 dirstress: mkdir/rmdir/readdir under load PASS
generic/013 fsstress multi-op stress PASS
generic/023 renameat2 RENAME_NOREPLACE PASS
generic/024 renameat2 no-overwrite semantics PASS
generic/075 fsx non-AIO read/write/truncate correctness PASS
generic/087 file access + modification time updates PASS
generic/091 fsx direct I/O (O_DIRECT silently ignored) PASS
generic/100 tar/untar round-trip (create/mkdir/write/readdir/stat) PASS
generic/192 atime semantics (noatime policy, V10.6) PASS
generic/221 ctime update via futimens without UTIME_OMIT PASS
generic/245 rename onto non-empty target → ENOTEMPTY PASS
generic/309 directory mtime+ctime updated on rename FAIL FIXED → PASS
generic/313 ctime + mtime updated on truncate/ftruncate PASS
generic/360 symlink to very long path (readlink round-trip) PASS
generic/763 zero-byte write semantics PASS

MUST_PASS summary: 16/17 passed in V11.1; 17/17 after V11.3 fix.


Full Run Summary (V11.1)

Outcome Count Tests
PASS 53 001 005 006 007 011 013 023 024 028 035 036 075 087 088 091 100 126 131 133⚠ 192 207 209 210 212 221 245 249 257 258 263 308 310 313 360 362 364 394 426 443 467 471 477 521⚠ 522⚠ 532 591 637 639 650 676 756 763 777
FAIL 6 208 241 309 363 632 736
NOTRUN 12 010 014 123 125 184 193 314 355 450 680 694 701
Total 71

FAIL Analysis (Post V11.3 Investigation)

Test V11.1 Exit Category Root Cause V11.3 Status
208 124 INFRA_TIMEOUT aio-dio binary not in package install; AIO stress runs >120s INFRA_SKIP
241 1 ENVIRONMENT FUSE session corrupted by prior test 208 SIGKILL residue; clean retest PASS PASS
309 2 SLIM64FS_BUG s64_vfs_rename_disk never updated parent dir mtime/ctime FIXED
363 1 ENVIRONMENT Same as 241 (environment artifact); clean retest PASS PASS
632 1 INFRA Needs CAP_SYS_ADMIN (CLONE_NEWNS); tests kernel mount counting bug INFRA_SKIP
736 124 INFRA_TIMEOUT readdir-while-renames takes ~260s; 120s limit insufficient INFRA_SKIP

Post-V11.3 effective result: 55 PASS (reported), 0 slim64fs bugs, 2 INFRA_SKIP (208, 632), 1 INFRA_TIMEOUT requiring longer run (736).

Post-V13 audit (inplace write fix, 2026-05-27): Three V11.1 PASSes were false positives — FUSE crashes produced exit 0 from the test scripts, which V11 runner counts as PASS (exit-code-only, no diff against .out):

Test V11.1 PASS mechanism Post-fix status
133 FUSE crash after phase 1; output matched .out (which includes abort msgs) Genuinely PASS: all 4 phases in ~102 s
521 FUSE crash during fsx mmap write (domapwrite: msync: connection abort); fsx exits 0 INFRA_TIMEOUT: soak test, 1M ops > 300 s
522 Same as 521 (buffered fsx soak) INFRA_TIMEOUT: soak test, 1M ops > 300 s

Genuine effective result: 51 PASS, 0 slim64fs bugs, 2 INFRA_SKIP, 3 INFRA_TIMEOUT. See docs/xfstests_results.md §Post-V11 Addendum and logs/v11/v11.1-133-fix.ok.


The Fix: generic/309

Root cause: s64_vfs_rename_disk() in src/s64_vfs.c modified directory entries (via mark_dir_dirty / maybe_flush_dir) but never wrote updated mtime_sec/ctime_sec to the parent directory disk inode.

Fix: Added touch_dir_times(fs, dir) helper that reads the directory's disk inode, sets mtime_sec = ctime_sec = now, and writes it back. Called in all three rename success paths: same-parent, cross-parent+overwrite, cross-parent no-overwrite.

POSIX requirement satisfied: rename(2) MUST update mtime+ctime of the containing directory for the old entry (from_parent) and the new entry (to_parent).


NOTRUN Rationale Summary

Full rationale in docs/xfstests_notrun.md. Brief:

Test Reason
010 dbtest binary not in package install
014 Sparse files: Fill-or-Kill invariant (ENSHRINED)
123, 125, 193, 314, 355, 680 fsgqa user not defined in test environment
184 FUSE kernel doesn't expose mknod/mkfifo
450 Sector size constraint not applicable
694 Needs ≥4GB free (1G image insufficient)
701 Needs ≥5GB free (1G image insufficient)

ENSHRINED_SKIP Summary

slim64fs deliberately omits these features. All are documented in docs/known-limitations.html and spec/v10.html §3.

Feature Tests Rationale
Sparse files 1 Fill-or-Kill invariant: every block has CRC32C or doesn't exist
xattr / ACL 15 Not in scope for removable flash media workload
fallocate 27 Stub → ENOSYS; FTL handles block mapping
Hard links 7 Violates single-inode-per-path invariant; EOPNOTSUPP
flock / fcntl locks 2 Not in scope
mmap MAP_SHARED writes 18 Write-once-per-operation model
ioctl (FIBMAP/FIEMAP) 4 No ioctl handler
copy_file_range / SEEK_HOLE 15 Not implemented
reflink / CoW / encryption 47 Out of scope

baby_xfstests Coverage

After V11.3:

baby_xfstests Result
Last test number 105
Outcomes (PASS+FAIL+SKIP) 80
PASS 75
FAIL 2 (block leak 090/091 — pre-existing, tracked)
SKIP 3
Regression → Mirror
generic/309 (mtime/ctime on rename) → test 105 ✓

Cooldude Audit Checklist

✅ All criteria met.