非読み取り専用ファイルシステムでゼロ以外のタイムアウトを安全に使用する方法はありますか? 私はそれを見つけることができないようです。いくつかの反例:
例 1 (ゼロ以外の負のエントリ タイムアウト):
- アプリケーションは stat() を呼び出し、ENOENT を取得します。
- create(); を呼び出します。
- 成功を期待して stat() を呼び出しますが、負のエントリ タイムアウトのために代わりに ENOENT を取得するため、FS が壊れている/一貫性がないなどと結論付けます。
例 2 (非ゼロ属性タイムアウト):
- アプリケーションが utimes() を呼び出します。
- stat() を呼び出しますが、古い値を取得し、FS が壊れている/一貫性がないなどと結論付けます。
正のエントリ タイムアウトの反例を思いつくことはできません。lookup() が古い inode を返したとしても、ファイル システムは後の getattr() 呼び出しに対して ENOENT を返すことができるようです。
しかし、上記の 2 つの例はどうでしょうか。