[求助]一个关于spin_lock的问题
本帖最后由 cyliu 于 2010-12-24 16:21 编辑进行编写内核模块的时候,遇到奇怪问题。具体描述如下:
1 环境
虚拟机 内核2.6.27.5系统:fedora 10
2 过程
2个虚拟机各安装了fedora 10, 一个虚拟机作为开发机,另一个作测试机。
2.1 在开发机上
在自己编译内核的系统下,编写内核模块,并编译。该模块没有使用spin_lock,但是调用的内核导出函数里面有spin_lock
2.2 在测试机上
把编译好的模块拷贝到测试机,使用原始的fedora内核,加载模块。
2.3 结果
死在内核导出的spin_lock上,而这个spin_lock是在fedora编译的内核里面使用的。
为什么会发生此类事情?按照道理这个spin_lock是fedora编译并引出的,其他模块使用都没有问题,为什么我使用确发生了问题呢?
知道这里我虎藏龙。
是不是我没有描述清楚问题,还是高手们不屑一顾?
还是恳请高手出手相助,或者相互探讨问题的根源,谢谢! 写用户态程序时segment fault
调试发现死在系统函数里
您觉得是系统函数bug么
检查参数和前后逻辑阿 通常, spin_lock 不能睡眠。你看你有没有这个可能:em14: 本帖最后由 cyliu 于 2010-12-27 10:27 编辑
写用户态程序时segment fault
调试发现死在系统函数里
您觉得是系统函数bug么
检查参数和前后逻辑阿
hackage 发表于 2010-12-26 18:44 http://linux.chinaunix.net/bbs/images/common/back.gif
我写的就是内核模块,和应用程序有什么关系?只是应用态的程序会调用到我这个模块而已。
检查参数和前后逻辑阿 这种简单的检测我肯定会执行的,但是目前从调用堆栈来看明显和参数都无关,是锁出现了问题。
不知道为什么锁会死在那里? 本帖最后由 cyliu 于 2010-12-27 10:37 编辑
通常, spin_lock 不能睡眠。你看你有没有这个可能
id_for_fun 发表于 2010-12-26 21:38 http://linux.chinaunix.net/bbs/images/common/back.gif
可能我没有说清楚,在描述一下:
我写是一个过滤文件系统,可以安装到其他文件系统之上。如原来有一个/home/project目录,他是ext3格式的,现在通过加载我的过滤文件系统到/home/project上。那么在/home/project目录下作文件操作时,都首先经过我的过滤文件系统。这个过滤文件系统目前没有使用任何锁。
这里dcryptay_create就是我的过滤文件系统函数,可以看出,他直接调用了ext3文件系统的函数,而ext3文件系统是原始的操作系统的,没有做任何修改。
所以很奇怪为什么会出现spin_lock锁的问题?
编译过程这样的:
下载了内核代码,通过修改makefile中的版本信息,来和测试的fedora版本一致,编译内核以及自己的模块,最后在测试机上安装编译好的过滤驱动模块,测试出现如此情况。
google好久,还是没有发现这是什么问题,大家有什么意见? 可能我没有说清楚,在描述一下:
我写是一个过滤文件系统,可以安装到其他文件系统之上。如原来 ...
cyliu 发表于 2010-12-27 10:35 http://linux.chinaunix.net/bbs/images/common/back.gif
不做内核开发,细节都不了解。
不过你这个需求,看起来可以用fuse来实现,虽然效率会低很多。
fuse在现在的几乎所有发行版默认进了内核。很多文件系统都是基于fuse做的。
fuse的出现,给自己实现文件系统带来了极大方便,自己只需要专注于自己的需求,需要写的代码极少。你可以尝试一下。
希望这个建议没有歪楼。 不做内核开发,细节都不了解。
不过你这个需求,看起来可以用fuse来实现,虽然效率会低很多。
fuse ...
id_for_fun 发表于 2010-12-27 17:24 http://linux.chinaunix.net/bbs/images/common/back.gif
谢谢. 目前不想用fuse。 因为客户对效率要求高,太影响效率客户不接受
这个锁的问题,在我自己编译的内核上跑得时候,没有任何问题。很奇怪 解决,结贴
页:
[1]