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

时间:2015-08-31 13:16:47

标签: linux filesystems sync fuse fsync

FUSE API不会公开文件系统级sync来电,只有fsyncfsyncdir。这是否意味着当调用sync(或FUSE挂载点内的syncfs)时,内核会对所有FUSE挂载的文件系统上的所有打开文件调用fsync?或者是否有不同的语义?

1 个答案:

答案 0 :(得分:2)

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

相关代码位于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操作,但保险丝不会定义任何:

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

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