Linux Power Management development
 help / color / mirror / Atom feed
* Re: [PATCH v2] fuse: permit freezing while waiting for request answer
@ 2026-10-23  3:43 test75
  0 siblings, 0 replies; only message in thread
From: test75 @ 2026-10-23  3:43 UTC (permalink / raw)
  To: linux-fsdevel, linux-pm; +Cc: miklos, senozhatsky, peterz, rafael

Hi,

A field report that may help with the design discussion in this
thread. It is a case where freeze ordering alone would not help.

Setup: Ubuntu 26.04, 7.0.0-38-generic, Framework 13 (AMD, s2idle),
systemd 259, rclone 1.60 FUSE mounts (Google Drive, SMB, SFTP).

On lid close, a gvfs backend thread was in statx() on an rclone mount.
The rclone server was not frozen. It was waiting on the network, and
NetworkManager takes the Wi-Fi down as part of the sleep sequence.
That dependency is invisible to the kernel (the same point as the
sshfs/ssh example earlier in the thread). The request never completed,
so every suspend attempt failed. With the lid closed, logind retried
every ~100 s for 6 hours (about 210 cycles):

   Freezing user space processes failed after 20.003 seconds (3 tasks 
refusing to freeze, wq_busy=0):
   task:pool-906  state:D  pid:153003 tgid:6222 ppid:4922
    request_wait_answer+0xd8/0x280
    __fuse_simple_request+0x11f/0x370
    fuse_lookup_name+0xd6/0x260
    fuse_lookup+0x9d/0x1e0
    __lookup_slow+0x86/0x150
    lookup_slow+0x3c/0x60
    link_path_walk+0x348/0x410
    path_lookupat / filename_lookup / vfs_statx / do_statx
   task:pool-907  state:D  pid:171158 tgid:6222 ppid:4922
    request_wait_answer+0xd8/0x280
    __fuse_simple_request+0x11f/0x370
    fuse_dentry_revalidate+0x146/0x410
    lookup_fast+0x15c/0x170
    link_path_walk / ... / do_statx
   task:pool-908  state:D  pid:197388 tgid:6222 ppid:4922
    d_alloc_parallel+0x37b/0x460
    __lookup_slow+0x5d/0x150
    lookup_slow+0x3c/0x60
    link_path_walk / ... / do_statx

Two observations:

1. pool-906 and pool-907 would be covered by a freezable wait in
    request_wait_answer(). pool-906 sits in lookup_slow(), so it holds
    the parent's i_rwsem shared at freeze time.

2. pool-908 is the third task. It is not in FUSE code. It waits in
    d_alloc_parallel() on the in-lookup dentry owned by pool-906. So
    even with v2 applied, this suspend would still have failed. This
    matches the "contended VFS lock" limitation in the v2 changelog,
    but here the second waiter is a plain uninterruptible wait in the
    dcache rather than a lock. This pattern looks common in practice:
    desktop indexers and trash/thumbnail daemons stat the same
    directory from several threads.

The same signature shows up 1,000+ times in this machine's journal
since April (gvfsd-trash, localsearch-extractor as clients). I can
provide the full logs.

Thanks,
Phil

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2026-10-23  3:43 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-23  3:43 [PATCH v2] fuse: permit freezing while waiting for request answer test75

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox