Chinaunix首页 | 论坛 | 博客
  • 博客访问: 733292
  • 博文数量: 79
  • 博客积分: 2671
  • 博客等级: 少校
  • 技术积分: 1247
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-02 15:26
个人简介

宅男

文章分类

全部博文(79)

文章存档

2017年(11)

2016年(12)

2015年(6)

2012年(10)

2011年(33)

2010年(7)

分类: Android平台

2015-11-18 16:32:38

这其实是差不多2年之前发现的一个bug,
但是看了一下最新的代码
这个bug任然没有被修复掉。

点击(此处)折叠或打开

  1. int fat_sync_bhs(struct buffer_head **bhs, int nr_bhs)
  2. {
  3. int i, err = 0;
  4. for (i = 0; i <</span> nr_bhs; i++)
  5. write_dirty_buffer(bhs[i], WRITE);

这算是一个比较明显的错误吧,因为从这个名字可以看出来这段代码是用来sync一些buffer head包含的数据的。
但是却错误的使用了WRITE flag,而不是WRITE_SYNC。
之所以发现这个错误,是因为之前在做camera暴力测试的时候,发现应用老是ANR。fat文件系统的挂载中包含了dirsync flag。
其结果就是上层应用在创建文件的时候,一直在等待函数返回,而文件相关的metadata由于dirsync的原因,
必须立即同步到SD卡中(注意这儿不是写缓冲了)。由于是做camera的暴力测试,会有大量的数据写入。
但是由于这边错误的WRITE flag导致,这些metadata的write请求混在data的写请求中。一直在block 调度层中等待调度。
阅读(1853) | 评论(0) | 转发(0) |
0

上一篇:ARM coresight(1)

下一篇:ARM CoreSight(2)---ETM

给主人留下些什么吧!~~