写文件系统时,内核在写操作的时候无法进行读操作

来源:互联网 发布:三坐标编程教材 编辑:程序博客网 时间:2024/04/30 01:24

在内核写代码毕竟和在用户层写代码不太一样,毕竟内核各种机制很复杂。


今天便遇到了一个问题,本来想在进行写操作的时候,先判断本地文件中的内容,然后根据内容判断本文件是否是远端文件,类似于软连接的形式,只是比那个更加复杂,应用于在内核中写的一个分布式文件系统。


我需要获取一个量:

isize = wjfs_i_size_read(tmp_dentry->d_inode);    //对应inode中的信息数量+1 

这样就可以判断这个inode中有没有信息了,但是问题就出在这儿了

在写操作中,wjfs_write() 函数下调用这个函数,得到的isize总是0,但是在通过我设计的,软连接触发函数进行读取的时候,简单就是不在写操作中,在读操作或者其他不是写的操作中进行这一步,得到的都是正常值,10, 23 。。。根据实际情况而定。


通过进一步的测试,发现在写操作中,连inode对应存放数据的page都得不到了


感觉具体原因应该是在写操作中,是不能读取关于inode的任何信息的。


又是一天中午,昨天晚上遇到这个问题之后总是想不明白,今天也没有心情继续做别的内容,总想着一定要搞明白,然后,我在两个地方分别加了很多输出,来看看里面到底发生了什么鬼


插入输出后就进行测试了,结果如下:


我的天,同样的inode,拿到的变量的值就是这么不一样,多次测试与顺序无关,我想,是不是本来inode->i_size的值就是不同的,然后我就到两个地方分别进行了直接的inode的isize值输出测试,代码如下:



输出的结果是:



一个是14,一个是 0,彻底无语了,等着天使降临来救我。

后续探索,搞明白了再加!


0 0