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?
问问题
1646 次
1 回答
2
查看内核源代码,似乎执行了 onsync
和syncfs
任何挂起的写回,但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 回答