主要观点:作者在 OpenZFS 中修复了一个严重的vdev_raidz_asize_to_psize
函数的 bug,该 bug 会导致在特定条件下写入超出分配空间的数据而损坏磁盘数据。作者通过测试新功能时发现此问题,花费两天才追踪到。在 C 语言中难以直接捕捉此类问题,而在 Rust 语言中可通过明确区分不同大小类型避免。同时思考了 C 程序员对工具或语言特性的态度,认为不能仅靠努力提升,应利用工具提升软件质量,且对 Rust 向 C 程序员推销时的“盲点”有所感悟,对这类可能导致数据丢失的 bug 仍感到担忧。
关键信息:
- 详细展示了
vdev_raidz_asize_to_psize
函数的代码及修复前后的差异。 - 提及 C 语言中静态分析工具不易发现该 bug,而 Rust 可通过明确类型避免。
- 阐述了作者对 C 程序员对待工具态度的看法及自身经历。
重要细节: - OpenZFS 中数据有“逻辑”“物理”“已分配”三种大小概念,各虚拟设备驱动有转换函数。
- 该 bug 在主开发分支存在数月但未在实际发布中出现。
- 作者对 Rust 语言有一定思考和感悟,虽喜欢但使用不多。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。