Fat32
内核需要支持fat32
文件系统,我们实现了自己的fat32
,但是并没有使用,而是改造了社区中已有的项目。并将其接入到我们实现的rvfs
框架中。
Bugs
无法直接删除文件,并回收空间
现象:在进行联合测试时,运行到unixbench
以及lmbench
时会触发写磁盘错误,通过单独测试,发现时此时已经没有磁盘空间。但是当单独测试其中的测例时又可以正常运行。
推测1:内核没有调用删除文件的函数?
结果:通过打印debug信息,发现fat32-vfs中有处理删除文件的操作
推测2:fat32-vfs是否实现正确?
结果:按照fat32-vfs的方式,我们在fat32原项目进行了删除文件测试,发现删除文件后磁盘空间没有减少,检查了github上是否有相关问题,没有查找到。
在阅读fat32的源代码时,发现有个umount
函数,可以将磁盘元数据写回,回收空间,于是进行了尝试,发现空间并没有收回。
继续尝试,通过看源代码,在删除文件时没有看到回收占用空间的代码,于是查看其他函数,看哪个可以回收空间,在看到truncate
时看到了相关的代码,于是我们在删除文件前将将文件的大小截断为0,并在删除后使用umount
函数刷新元数据,再一次测试,在原项目通过后,我们又在fat32-vfs中修改了unlink
的实现,按照这个步骤正确地删除文件,回收空间。