NTFS 创建文件多次后文件会丢失的bug

在移植NTFS-3G到ucos平台后出现文件丢失问题,通过逐步排查,最终定位到自定义realloc函数未正确复制内存的问题,并成功修复。

之前移植了NTFS-3G到ucos平台下, 用了2两年都没挺稳定的, 突然QA报了个bug.

"ntfs录制文件14次以后会发现有些文件会丢失掉, 而且有些文件没法操作, 没法读取和删除."


这个问题非常的奇怪, 直观的看, 相关的代码在porting完成后并没有去修改.
怎么办? 先对比linux PC上的情况, 在PC上没有问题. 那就说明肯定是代码真的哪边有问题了.


先从最直接相关的函数入手

__ntfs_create

    ntfs_index_add_filename

        ntfs_ie_add

            ntfs_ib_split

                ntfs_ie_get_median        // 找到index block里面的中间那个index entry

                ntfs_ib_copy_tail              // 从中间那个index entry开始, 后面的要copy到新的index block里面

                ntfs_ib_insert

                    ntfs_ih_insert

                        ntfs_ie_add_vcn      // 就是这边出问题了

                ntfs_ib_cut_tail

            ntfs_ie_insert                       // 选取的那个中间的index entry, 要弄到index root中


ntfs_ie_add这个函数会处理在目录下的index root/allocation中添加index entry 的具体工作.
大致的算法是这样的, 当最后一个index allocation(默认是4k)中添加index entry的空间不够的时候, 会从中间处对index entry进行切割,
上半部分保留不变, 下半部分会放到新的index allocation里面, 选取的那个中间的index entry会放到index root(也可能是index block)中作为

上下部分的区分的标志, 这个排序是按照unicode码的大小来排序的.


这部分的代码都没有去改动, 检查出来的最后的root cause是系统中的realloc的函数错了.

realloc函数在将旧的mem free掉后, 申请出来的新的mem需要将原有的mem中的内容copy过去, 但是我们平台的realloc是自己实现的, 不是标准库函数.

负责这部分功能的同事没有将旧的memory中的数据copy到新的memory中去. 结果导致了这个问题.



修改realloc后, 反复测试了10多次都是好的.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值