On Fri, 25 Oct 2024 at 19:36, Joanne Koong <joannelkoong@xxxxxxxxx> wrote: > That's a great point. It seems like we can just skip waiting on > writeback to finish for fuse folios in sync(2) altogether then. I'll > look into what's the best way to do this. I just tested this, and it turns out this doesn't quite work the way I'd expected. I can trigger sync(2) being blocked by a suspended fuse server: task:kworker/u16:3 state:D stack:0 pid:172 tgid:172 ppid:2 flags:0x00004000 Workqueue: writeback wb_workfn (flush-0:30) Call Trace: __schedule+0x40b/0xad0 schedule+0x36/0x120 inode_sleep_on_writeback+0x9d/0xb0 wb_writeback+0x104/0x3d0 wb_workfn+0x325/0x490 process_one_work+0x1d8/0x520 worker_thread+0x1af/0x390 kthread+0xcc/0x100 ret_from_fork+0x2d/0x50 ret_from_fork_asm+0x1a/0x30 task:dd state:S stack:0 pid:1364 tgid:1364 ppid:1336 flags:0x00000002 Call Trace: __schedule+0x40b/0xad0 schedule+0x36/0x120 request_wait_answer+0x16b/0x200 __fuse_simple_request+0xd6/0x290 fuse_flush_times+0x119/0x140 fuse_write_inode+0x6d/0xc0 __writeback_single_inode+0x36d/0x480 writeback_single_inode+0xa8/0x170 write_inode_now+0x75/0xa0 fuse_flush+0x85/0x1c0 filp_flush+0x2c/0x70 __x64_sys_close+0x2e/0x80 do_syscall_64+0x64/0x140 entry_SYSCALL_64_after_hwframe+0x76/0x7e task:sync state:D stack:0 pid:1365 tgid:1365 ppid:1336 flags:0x00004002 Call Trace: __schedule+0x40b/0xad0 schedule+0x36/0x120 wb_wait_for_completion+0x56/0x80 sync_inodes_sb+0xc5/0x450 iterate_supers+0x69/0xd0 ksys_sync+0x40/0xa0 __do_sys_sync+0xa/0x20 do_syscall_64+0x64/0x140 entry_SYSCALL_64_after_hwframe+0x76/0x7e Maybe I'm too paranoid about this, and in practice we can just let sync(2) block in any case. But I want to understand this better first. Thanks, Miklos