Alien

View on GitHub

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的实现,按照这个步骤正确地删除文件,回收空间。

链接

fat32-vfs