[kernel] 内核缓冲的锁
对自己写的kernel module进行压力测试,连续跑了24小时,没啥问题,但是,继续跑到30几个小时的时候,内核panic了。
从panic的信息看,是在dcache_readdir的时候,就是从cache里读各inode的时候遇到麻烦了。
kernel本身是很坚固的,肯定是我的module某个地方把cache里的东西弄坏了,想想我确实有遍历目录的操作:
next = dentry->d_subdirs.next;
while (next != &dentry->d_subdirs)
......
再仔细看看内核里dcache_readdir的实现,喔,我少加了锁,应该是:
spin_lock(&dcache_lock);
遍历目录
spin_unlock(&dcache_lock);
之前的panic应该是我遍历目录的同时系统在调整dcache,结果竞争了。
相关文章
- ext2/ext3/ext4 文件系统初探 - 01 20, 2011
- linux在多核处理器上的负载均衡原理(幻灯片) - 10 22, 2010
- [kernel] 如果在linux内核模块里用错锁? - 08 04, 2010
留言: