NTFS 创建文件多次后文件会丢失的bug
来源:互联网 发布:360软件怎么固定 编辑:程序博客网 时间:2024/05/11 17:01
之前移植了NTFS-3G到ucos平台下, 用了2两年都没挺稳定的, 突然QA报了个bug.
"ntfs录制文件14次以后会发现有些文件会丢失掉, 而且有些文件没法操作, 没法读取和删除."
怎么办? 先对比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中
大致的算法是这样的, 当最后一个index allocation(默认是4k)中添加index entry的空间不够的时候, 会从中间处对index entry进行切割,
上半部分保留不变, 下半部分会放到新的index allocation里面, 选取的那个中间的index entry会放到index root(也可能是index block)中作为
上下部分的区分的标志, 这个排序是按照unicode码的大小来排序的.
realloc函数在将旧的mem free掉后, 申请出来的新的mem需要将原有的mem中的内容copy过去, 但是我们平台的realloc是自己实现的, 不是标准库函数.
负责这部分功能的同事没有将旧的memory中的数据copy到新的memory中去. 结果导致了这个问题.
修改realloc后, 反复测试了10多次都是好的.
- NTFS 创建文件多次后文件会丢失的bug
- VIM PIV插件的bug,编辑PHP大文件偶尔会丢失语法高亮
- NTFS转换到FAT32丢失文件问题的解决办法
- ios程序的 .pch 文件丢失后
- ls会丢失文件吗?
- 如何在NTFS文件系统中创建文件的Link
- 如何在NTFS文件系统中创建文件的Link
- 如何在NTFS文件系统中创建文件的Link
- 如何在NTFS文件系统中创建文件的Link
- 如何在NTFS文件系统中创建文件的Link
- 如何在NTFS文件系统中创建文件的Link
- 如何在NTFS文件系统中创建文件的Link
- 如何在NTFS文件系统中创建文件的Link
- 如何在NTFS文件系统中创建文件的Link
- 如何在NTFS文件系统中创建文件的Link
- 如何在NTFS文件系统中创建文件的Link
- 如何在NTFS文件系统中创建文件的Link
- 如何在NTFS文件系统中创建文件的Link
- oracle-隔离级别
- android流媒体
- python的functools.partial用法解释
- 利用反射机制访问类中的私有方法
- 余玄定理证明
- NTFS 创建文件多次后文件会丢失的bug
- 《编码:隐匿在计算机软硬件背后的语言》读书笔记 08
- oracle-类型存储空间大小
- java数据存储
- HTML中的几种定位方式
- 怎么去掉Xcode工程中的某种类型的警告 Implicit conversion loses integer precision: 'NSInteger' (aka 'long') to 'int32
- 创建ArrayList对象,添加5个元素,使用Iterator遍历输出
- 【LeetCode】Rotate List 解题报告
- oracle-索引原理