https://bugs.kde.org/show_bug.cgi?id=527838

--- Comment #7 from [email protected] ---
(In reply to Méven from comment #6)
> (In reply to internet.coma792 from comment #5)
> > I can reproduce the same problem with fuse.gocryptfs. It seems to be traced
> > back to a regression between KIO 6.30.0 and 6.31.0. It looks like this is
> > not specific to mergerfs or to dolphin: any local FUSE mount whose source is
> > not under /dev/ is now treated as slow.
> > 
> > Environment: Arch Linux, Plasma 6.8.2, Frameworks 6.31.0, Qt 6.12.0,
> > Wayland. 
> > 
> > My home directory is a gocryptfs mount, so I noticed some issues right away
> > as soon as I got to the desktop.
> > 
> > Syntoms on that mount with KIO 6.31.0 (all fine with 6.30.0)
> > - Folder icons set thought .directory are ignored; The default icon is
> > showened instead.
> > - The properties dialog (alt+enter) no longer shows the Details tab for
> > files and folders on that mount
> > - The same folder with the same .directory shown from /tmp displays correct
> > icon
> > 
> > Cause, from diffin kio-6.30.0 and kio-6.31.0:
> > 
> > 1) src/core/kfileitem.cpp, KFileItemPrivate::isSlow(): in 6.30.0 it only
> > treated Nfs and Smb (from KFileSystemType) as slow. In 6.31.0 it asks
> > KMountPoint::probablyslow().
> > 
> > 2) src/core/kmountpoint.cpp, KMountPoint::probablySlow(): the old explicit
> > check for "fuse.kio-fuse" was replaced by
> > 
> >      || d->m_mountType.startsWith("fuse."_L1) &&
> > !d->m_mountedFrom.startsWith("/dev/"_L1)
> >      
> >      With the comment "Naive check, would be better for KmountPoint to
> > distinguish fuse blk from fuse dev itself in the future"
> >     
> > gocryptfs, mergerfs, encfs and similar overlays are FUSE mounts whose source
> > is not in /dev/..., so they all match. As described in comment 2, isSlow()
> > returning true makes KFileItem skip reading .directory and the same slow
> > classification also hides the Details tab.
> 
> This was an intentional change, fuse users are more likely to be network
> filesystem.
> We removed this as this is a blocking call, that blocks loading a folder,
> potentially indefinitely.
> 
> mergefs case is even worse, it can be anything.
> 
> I don't know whether we can or should address this, or this is just expected
> behavior.
> 
> We could whilelist mount-points per-mount-points so local folders can still
> have .directory customization, if for instance the fuse mount can either
> reliably expose its underlying filesystem or if mount options can help
> deduce it.

Thank you for the explanation, the blocking-call concern makes sense.

For encrypting overlays like gocryptfs and encfs the situation is a bit
different from a generic FUSE mount: they are not remote by nature. they sit on
top of a directory, and that directory is what mountedFrom reports (in my case
/home/user.cipher). KMountPoint::isEncryptedFs() (since 6.24) already
identifies these two types.

So probablySlow() could, for an encrypted FS, lookup the mount containing the
backing directory and apply the same check to it. That way the result is slow
only if the underlying storage is a slow (network share, another FUSE), and
local encrypted directories keep working, withouth relying on a whitelist by
type. Mergefs would stay classified as slow, as you said.

One caveat: some frontends set a custom fsname (on my system two mounts show
the source as "Gocryptfs@home/.../vaults/folder"), so the backing path would
need to be extracted from that form, or the mount skipped if it cannot be
resolved.

Could that work? My current solution for my personal use is quite hacky and not
suitable for being in KDE as I'm not qualified to do better. I naively hope
someone can properly fix this.

"--- a/src/core/kmountpoint.cpp 2026-11-01 19:41:51.177433675 -0300
+++ b/src/core/kmountpoint.cpp  2026-11-01 19:44:54.799642577 -0300
@@ -748,7 +748,15 @@
         || d->m_mountType == "autofs"_L1
         || d->m_mountType == "subfs"_L1
         // Naive check, would be better for KmountPoint to distinguish fuse
blk from fuse dev itself in the future
-        || d->m_mountType.startsWith("fuse."_L1) &&
!d->m_mountedFrom.startsWith("/dev/"_L1);
+        // FUSE mounts are treated as remote unless they are known local
overlays or their source is an
+        // absolute local path (/dev/..., or a directory). Remote ones (sshfs,
kio-fuse, rclone) are not paths.
+        || (d->m_mountType.startsWith("fuse."_L1)
+            && !d->m_mountedFrom.startsWith("/"_L1)
+            && d->m_mountType != "fuse.gocryptfs"_L1
+            && d->m_mountType != "fuse.encfs"_L1
+            && d->m_mountType != "fuse.cryfs"_L1
+            && d->m_mountType != "fuse.securefs"_L1
+            && d->m_mountType != "fuse.bindfs"_L1);
     /* clang-format on */
 }
"

-- 
You are receiving this mail because:
You are watching all bug changes.

Reply via email to