cyliu 发表于 2010-12-24 16:13

[求助]一个关于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编译并引出的,其他模块使用都没有问题,为什么我使用确发生了问题呢?

cyliu 发表于 2010-12-25 19:16

知道这里我虎藏龙。

是不是我没有描述清楚问题,还是高手们不屑一顾?

还是恳请高手出手相助,或者相互探讨问题的根源,谢谢!

hackage 发表于 2010-12-26 18:44

写用户态程序时segment fault
调试发现死在系统函数里
您觉得是系统函数bug么
检查参数和前后逻辑阿

id_for_fun 发表于 2010-12-26 21:38

通常, spin_lock 不能睡眠。你看你有没有这个可能:em14:

cyliu 发表于 2010-12-27 10:26

本帖最后由 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:35

本帖最后由 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好久,还是没有发现这是什么问题,大家有什么意见?

id_for_fun 发表于 2010-12-27 17:24

可能我没有说清楚,在描述一下:

我写是一个过滤文件系统,可以安装到其他文件系统之上。如原来 ...
cyliu 发表于 2010-12-27 10:35 http://linux.chinaunix.net/bbs/images/common/back.gif

不做内核开发,细节都不了解。
不过你这个需求,看起来可以用fuse来实现,虽然效率会低很多。

fuse在现在的几乎所有发行版默认进了内核。很多文件系统都是基于fuse做的。
fuse的出现,给自己实现文件系统带来了极大方便,自己只需要专注于自己的需求,需要写的代码极少。你可以尝试一下。

希望这个建议没有歪楼。

cyliu 发表于 2010-12-27 18:22

不做内核开发,细节都不了解。
不过你这个需求,看起来可以用fuse来实现,虽然效率会低很多。

fuse ...
id_for_fun 发表于 2010-12-27 17:24 http://linux.chinaunix.net/bbs/images/common/back.gif


谢谢. 目前不想用fuse。 因为客户对效率要求高,太影响效率客户不接受


这个锁的问题,在我自己编译的内核上跑得时候,没有任何问题。很奇怪

cyliu 发表于 2010-12-30 14:47

解决,结贴
页: [1]
查看完整版本: [求助]一个关于spin_lock的问题