'sync' 和 'syncfs' 系统调用是否映射到 FUSE 的 'fsync' 调用?

Do the 'sync' and 'syncfs' system calls map to FUSE's 'fsync' calls?

FUSE API doesn't expose a file-system level sync call, just fsyncfsyncdir。这是否意味着当 sync 被调用时(或 FUSE 挂载点内的 syncfs),内核对所有 FUSE 挂载文件系统上的所有打开文件调用 fsync?还是有不同的语义?

查看内核源代码,似乎在 syncsyncfs 上执行了任何挂起的回写,但是 fsync 没有被调用(反正不是 AFAICS),所以有没有任何方法可以知道调用了 syncsyncfs

相关代码在https://github.com/torvalds/linux/blob/v4.16/fs/sync.c, e.g. https://github.com/torvalds/linux/blob/v4.16/fs/sync.c#L31-L41

如图所示,这调用了fileystem superblock上的fsync_fs操作,但是fuse没有定义任何:

https://github.com/torvalds/linux/blob/v4.16/fs/fuse/inode.c#L803-L814

我还记得读过一个关于这个的邮件列表线程,它建议在 fuse 中实现 sync_fs 是 non-trivial,因为它会允许一个 fuse 文件系统(可能 运行 作为non-privileged 用户)无限期地阻止任何全局 sync 系统调用,造成安全 (DoS) 问题。不过,我再也找不到那个帖子了。