diff options
| author | SulfurNitride <lukew19@proton.me> | 2026-06-25 15:05:03 -0500 |
|---|---|---|
| committer | SulfurNitride <lukew19@proton.me> | 2026-06-25 15:05:03 -0500 |
| commit | b1f8b9de5d24213d32022b6023e7513003f1169f (patch) | |
| tree | 6ddc89efefdbdbd6849cd210bcb8aa2d9ba46b0d /src | |
| parent | 22f1f1812ebd554c92d1150a6a7bdfff78c2053b (diff) | |
Fix VFS not intercepting writes for games on SD card
pressure-vessel's default sharing of /run/media and home uses non-recursive
bind mounts that don't propagate FUSE submounts into the container. The
shouldExposeMountPointToPressureVessel function excluded all paths under /run
(isSystemRootPath) and under /run/media (pressureVesselSharesByDefault), so
the fuse.mo2linux mount point was never added to PRESSURE_VESSEL_FILESYSTEMS_RW.
Inside the container, the game saw the real SD card Data directory instead of
the FUSE overlay, so all VFS writes (shader cache, config files, overwrite)
bypassed staging entirely — VFS_staging stayed empty and write-heavy mods like
Community Shaders logged "Failed to save shader" on every compile.
Internal-drive games were unaffected because pressure-vessel's home directory
handling is recursive and propagates FUSE submounts correctly.
Fix: detect fuse.mo2linux in the mountinfo scan and always add it to
PRESSURE_VESSEL_FILESYSTEMS_RW regardless of its parent path classification.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Diffstat (limited to 'src')
| -rw-r--r-- | src/src/protonlauncher.cpp | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/src/src/protonlauncher.cpp b/src/src/protonlauncher.cpp index f6059e3..e8c2a89 100644 --- a/src/src/protonlauncher.cpp +++ b/src/src/protonlauncher.cpp @@ -169,6 +169,14 @@ bool shouldExposeMountPointToPressureVessel(const QString& mountPoint, const QString& fsType, const QString& source) { + // Always expose our VFS FUSE mount explicitly. pressure-vessel's default + // sharing of /run/media (and home) uses non-recursive bind mounts that do + // not propagate FUSE submounts into the container — games on SD card end up + // writing to the real game directory and bypassing the VFS entirely. + if (fsType == QStringLiteral("fuse.mo2linux")) { + return !mountPoint.isEmpty() && mountPoint != "/"; + } + if (mountPoint.isEmpty() || mountPoint == "/" || pressureVesselSharesByDefault(mountPoint) || isSystemRootPath(mountPoint)) { |
