免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2133 | 回复: 0
打印 上一主题 下一主题

[内核入门] __block_commit_write 和bdflush 发生竞态怎么办? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2017-04-02 22:43 |只看该作者 |倒序浏览
最近读2.4.18内核的文件和缓冲区高速缓存部分时。有了一个疑问。比如其中的一段代码:
ssize_t
generic_file_write(struct file *file,const char *buf,size_t count, loff_t *ppos)
{
……
status = mapping->a_ops->prepare_write(file, page, offset, offset+bytes);
                if (status)
                        goto sync_failure;
                page_fault = __copy_from_user(kaddr+offset, buf, bytes);
                flush_dcache_page(page);
                status = mapping->a_ops->commit_write(file, page, offset, offset+bytes);
……
}
假设页的其中一个缓冲区正被bdflush提交给块设备写出的时候, 与此同时__copy_from_user(kaddr+offset, buf, bytes); 写缓冲区
发生竞态怎么办?这段代码没有检查buffer的LOCK情况。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP