diff options
| author | SulfurNitride <lukew19@proton.me> | 2026-06-24 14:45:04 -0500 |
|---|---|---|
| committer | SulfurNitride <lukew19@proton.me> | 2026-06-24 14:45:04 -0500 |
| commit | 0e993b45d3c4db36bf01ec0e56e11fd836cc59a2 (patch) | |
| tree | 0882e6f3bada56a32d7e36a16ed180c0b3093dc8 /libs/plugin_python/src/pybind11-utils/include/pybind11_utils | |
| parent | 59f3ba27e5d180c8e1861b41a1db3f58663bdd0f (diff) | |
Fix shader cache write failures and INI key clobber
Shader cache (mo2_lookup): Starfield skips mkdir("ShaderCache/Lighting/")
and goes straight to CreateFile("ShaderCache/Lighting/X.pso"). USVFS
handles this by intercepting at Win32 level and auto-creating parent dirs
in overwrite. FUSE operates below the kernel path-resolver, so if a parent
component is missing the kernel returns ENOENT before mo2_create is ever
called. Fix: in mo2_lookup, when a name has no '.' (directory-like) and is
not found in the VFS, auto-create it in staging and return a positive inode
so the kernel can continue resolving the path. createDirectory uses
create_directories internally, so staging parent dirs are also created when
the parent came from overwrite rather than this session.
INI key clobber (mo2_open / mo2_write): keep_cache=1 with AUTO_INVAL_DATA
disabled let the kernel serve stale pre-COW page cache on re-reads. Wine's
WritePrivateProfileString does open→read→close→open(O_TRUNC)→write per key;
after the first write triggered COW, subsequent reads got old cached content,
so each new key was written on top of the original file — only the last key
survived. Fix: call fuse_lowlevel_notify_inval_inode at all four COW and
O_TRUNC paths to flush stale kernel pages precisely at the moment the
backing path changes, without the blanket performance cost of keep_cache=0.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Diffstat (limited to 'libs/plugin_python/src/pybind11-utils/include/pybind11_utils')
0 files changed, 0 insertions, 0 deletions
