[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,结果竞争了。


相关文章

分类

留言:

关于文章

This page contains a single entry by DongHao published on 08 11, 2010 3:22 PM.

和我当年一样艰难的实习生们 was the previous entry in this blog.

客服琐记 is the next entry in this blog.

Find recent content on the main index or look in the 存档 to find all content.