dmesg
我的输出中有一些 CIFS 消息
[15064.932559] CIFS VFS: Cancelling wait for mid 37736 cmd: 5
[15064.932592] CIFS VFS: Cancelling wait for mid 37737 cmd: 16
[15064.932610] CIFS VFS: Cancelling wait for mid 37738 cmd: 6
[15066.212283] CIFS VFS: Close unmatched open
然后开始挖掘它们的来源。最后我发现它与 Samba 共享上的机会锁定有关。我发现很多文章都认为这enable_oplocks
会提高性能。也有很多文章声称使用 oplocks 可能会导致数据丢失。我的问题是:为什么会发生数据丢失?
我发现oplocks 工作原理的解释(图 5.8)。还有一些解释称,如果 Linux 内核不支持 oplocks,事情可能会出错。但如果它支持 oplocks,会出问题吗?
另外:我如何测试我的内核是否支持 oplocks?
我正在寻找能够了解 oplocks 如何工作以及它们如何在 Linux 中实现/处理的答案,而不是针对我的特定 Linux 发行版的答案。
答案1
回答你的第一个问题:机会锁定是“危险的”,因为它会给在客户端上工作的用户反馈,说他的工作已被保存,而实际上,保存只是针对客户端内部的本地缓存进行的。即当客户端崩溃或与服务器的网络连接出现问题时后尽管用户收到了保存操作成功的反馈,但他仍然可能会丢失自己的工作/编辑,即使服务器完美地实现了机会锁。
关于 Linux 对机会锁的支持,您可能会发现这个会议报告很有趣: https://lwn.net/Articles/788335/