如何在FUSE / OSXFUSE低级API中使用entry_timeout和attr_timeout?

时间:2014-02-03 23:55:23

标签: filesystems fuse macfuse

有没有办法在非只读文件系统中安全地使用非零超时?我好像找不到一个。几个反例:

示例一(非零否定录入超时):

  1. 应用程序调用stat()并获取ENOENT;
  2. 调用create();
  3. 调用stat(),期望成功,但由于负输入超时而获得ENOENT,因此它断定FS已损坏/不一致/等。
  4. 示例二(非零attr超时):

    1. 应用程序调用utimes();
    2. 调用stat(),但得到陈旧的值并得出结论FS已损坏/不一致/等。
    3. 我无法想出一个正向输入超时的反例 - 似乎即使lookup()返回一些陈旧的inode,文件系统仍然可以返回ENOENT以用于稍后的getattr()调用。

      但是上面两个例子呢?

1 个答案:

答案 0 :(得分:3)

仅供参考,同一问题已发布在FUSE mailing list上。

以下是关于非零超时工作原因的answer from Kyle Lippincott

  

如果create()通过内核,它会使负数无效   进入超时。如果创建发生在外部,则超时   仍然坚持。

当非零超时成为问题时,请引用Goswin von Brederlow:

  

如果实现基于磁盘的文件系统,缓存只能正常工作,   一个只有熔丝过程可以改变元数据和所有访问的一个   只能通过保险丝。任何可以改变的覆盖文件系统   没有通过保险丝的底层文件系统可能会遇到   不一致。

所以,如果你是构建一个网络文件系统,允许多个主机更改数据,您可能会遇到非零超时问题。