fix(fuse): stop reads deadlocking on size upgrades and retry stale renames

A read that settles a provisional size invalidated the file's page cache
while the kernel held that read's page lock, so the worker waited on
itself forever (B110). Size upgrades now invalidate attributes only.

Renaming a node right after renaming it could be refused by Drive as out
of date, because the name hash read just before still held the old name.
Every remote rename now goes through Core::rename_remote, which retries
InvalidRequirements for up to ten seconds (B111).
This commit is contained in:
nvrl committed 2026-09-29 19:47:20 +02:00
1 parent f252b09757
commit 54e9921efb
5 files changed
+181 -11

No files matched your search

+1 -4
View File
@@ -2039,10 +2039,7 @@ impl ProtonFs {
return;
}
if newname != name
&& let Err(e) = self
.core
.rt
.block_on(self.core.client.rename_node(&uid, newname, None))
&& let Err(e) = self.core.rename_remote(&uid, newname)
{
error!(%uid, error = %e, "rename failed");
self.core.restore_replaced(victim.as_ref(), newname);