10

The FUSE API doesn't expose a file-system level sync call, just fsync and fsyncdir. Does it mean that when sync is called (or syncfs inside a FUSE mountpoint), the kernel invokes fsync on all open files on all FUSE mounted file-systems? Or is there a different semantics?

4

1 回答 1

2

查看内核源代码,似乎执行了 onsyncsyncfs任何挂起的写回,但fsync没有被调用(无论如何都不是 AFAICS),因此实际上没有任何方法可以知道sync或者syncfs被调用。

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

如图所示,这会调用fsync_fs文件系统超级块上的操作,但 fuse 没有定义任何内容:

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

我还记得阅读过一个关于此的邮件列表线程,这表明sync_fs在 fuse 中实现并非易事,因为它允许 fuse 文件系统(可能作为非特权用户运行)sync无限期地阻止任何全局系统调用,从而构成安全(DoS)问题。不过,我再也找不到那个线程了。

于 2018-04-10T18:53:58.070 回答