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

之前移植了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多次都是好的.
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值