在submit_bio处使用stapn
想着在submit_bio的地方,发现在guru模式下,stap是经常性地把内核整挂呀,不得已,也没有发现stap什么比较好的调试方法,所以索性直接使用stap的语法了,但是发现有问题呢,有的时候bv->bv_page->mapping->host, 我发现有的时候,这个地方得到的inode,然后我去解引用一下,竟然会导致失败,是因为bv->bv_page->mapping->host这条路山更有哪里是不合法的吗?有哪里是不合法的吗?
0:cron inode_add(0xffff8800a65fcbb0) ino(0) sector(436275808 +4096)
0:sh inode_add(0xffff8800a65fcbb0) ino(0) sector(176232464 +4096)
抓到了这样两条log,这两条log是说我我这个inode的inode->i_ino竟然是0
只要page在inode就在,inode在dentry就在!有这个结论么?
fs/inode.c函数中:prune_icache_sb
invalidate_mapping_pages,当有lock的page,writeback的page在的时候,读的时候,在submit_bio的地方page是lock的,写的时候这里是writeback的这个inode是不会被清理的,所以在submit_bio处读到的page,可以放心大胆地使用page->mapping->inode,这里有个问题,mapping一定是存在的吗?
这个address_space也是存放在函数
address_space应该是直接嵌入到inode里的一个结构,甚至都不是一个指针,看一下page_cache_get_page函数就可以了,拿一个最简单的f2fs_grab_cache_page来说,当往address_space里加东西的时候,是如何mapping是怎么得到的?
struct address_space *mapping = inode->i_mapping;
这个mappinp就是我们就是inode中嵌入的那个mapping的结构体
在inode初始化的时候:inode->i_mapping = mapping;mapping是怎么赋值的?struct address_space *const mapping = &inode->i_data;
所以只要inode在,那么我们通过page->address_space->host就一定能得到这个文件的inode,但是这个inode对应的dentry是一定会在的吗?文件名从两个地方去读,一个是目录的数据块,一个是dentry。但是dentry一定会在吗?
fs/dcache.c: prune_dcache_sb
在这个函数中,当这个dentry仍然在使用的时候就不会被shrink掉!dentry->d_lockref.count,这个值是啥时候+1呢
看下page后面的文件系统是啥 page->inode->i_sb->s_type->name
怎么通过inode得到文件名咧?
hard_link是啥呀?hark_link是一个inode上面挂了4个dentry,所以从inode,
在submit_bio处使用stapn的更多相关文章
- CSS预处器的对比——Sass、Less和Stylus
预处器的对比--Sass.LESS和Stylus 转载: 英文原文:http://net.tutsplus.com/tutorials/html-css-techniques/sass-vs-less ...
- 数据库(SQL Server)管理数据库表~新奇之处
说到“数据库”,我总有一种莫名的感觉,在刚刚接触到的数据库中就让我似懂非懂渡过着,于是思考着.于是在冷静的时空中让我回想到了很多的知识,不知你们是怎样过来的,真心希望我的这篇数据库总结能够让我们都有一 ...
- Autocad 2012 win7(64位)启动时一直卡在acmgd.dll处的解决方案
安装Autocad 2012后,激活成功后,无法正常启动,一直卡在加载acmgd.dll 通过Procmon监控后发现加载C:\Windows\fonts\AdobeFnt11.lst处出错, 通过命 ...
- this的安身之处
在JavaScript的大千世界中,this对象就像一个行踪不定.居无定所的浪子一般,它的生活仿佛可以随处而安,而内心却又似有着笃定的坚守,它就是这么有趣! 初学JavaScript时的我们,多多少少 ...
- OO方式下,ALV TREE和ALV GRID的不同之处
作为大部分报表程序的基础,ALV GRID差不多是每个ABAP开发者必须了解和掌握的内容,因此网上也不乏相关资料,而ALV TREE的应用相对较少,中文资料也就比较少见了.实际上,ALV TREE和A ...
- Windows 64位下装Oracle 11g,PLSQL Developer的配置问题,数据库处显示为空白的解决方案
安装pl sql 后,若下图的数据库处为空.则需要安装32位的客户端,说明pl sql不支持64位客户端连接. 解决办法: 1.下载32位Oracle客户端,并安装 2.设置PLSQL Develo ...
- TCP 三次握手四次挥手, ack 报文的大小.tcp和udp的不同之处、tcp如何保证可靠的、tcp滑动窗口解释
一.TCP三次握手和四次挥手,ACK报文的大小 首先连接需要三次握手,释放连接需要四次挥手 然后看一下连接的具体请求: [注意]中断连接端可以是Client端,也可以是Server端. [注意] 在T ...
- kindeditor在光标处插入编辑器外的数据
页面 <div class="form-group clearfix"> <label class="control-label col-sm-3 co ...
- selenium定位元素(本内容从https://my.oschina.net/flashsword/blog/147334处转载)
注明:本内容从https://my.oschina.net/flashsword/blog/147334处转载. 在使用selenium webdriver进行元素定位时,通常使用findElemen ...
随机推荐
- 你知道JQuery中的事件冒泡吗,他是怎么执行的,如何来停止冒泡事件?
事件冒泡 首先需要知道什么是事件冒泡? 事件冒泡是从里面的往外面开始触发的,就是点击子节点,会向上触发父节点,祖先节点的点击事件 demo: <html xmlns="http://w ...
- PHP导出数据到表格的实例
我发现最近的项目需要导出Excel表的页面非常的多,想来这个也是我们常用的功能了,现在我可以很熟练的导出了,但是记得当时自己第一次导出时还是绕了一些弯路的,那么现在我就来记录下我这次用exshop框架 ...
- 搭建ssm框架经验
要想搭建好ssm框架的开发环境.首先我们需要知道ssm是什么?ssm就是spring,springmvc,mybatis. 然后我们要知道,他们分别都是怎样实现的和做什么用的,充当什么角色?这样我们就 ...
- php安装php-redis扩展
下载安装php-redis扩展: 地址:https://github.com/phpredis/phpredis/ $ wget http://pecl.php.net/get/redis-3.1.2 ...
- Python学习手册之Python介绍、基本语法(二)
在上一篇文章中,我们介绍了Python的一些基本语法,现在我们继续介绍剩下的Python基本语法.查看上一篇文章请点击:https://www.cnblogs.com/dustman/p/987193 ...
- python三大神器之迭代器
可迭代协议: 内部含有__iter__方法的值/变量都是可迭代的.可迭代类型和python语言之间的协议. 可迭代对象: iterable,内部包含__iter__()函数. 迭代器: iterato ...
- go学习笔记-Data类型(Arrays, Slices and Maps)
Data类型(Arrays, Slices and Maps) array array就是数组,定义方式如下: var arr [n]type 在[n]type中,n表示数组的长度,type表示存储元 ...
- AtCoder AGC028-F:Reachable Cells
越来越喜欢AtCoder了,遍地都是神仙题. 题意: 给定一个\(N\)行\(N\)列的迷宫,每一个格子要么是障碍,要么是空地.每一块空地写着一个数码.在迷宫中,每一步只允许向右.向下走,且只能经过空 ...
- Moodle 3.4中添加小组、大组、群
Moodle在高中应用时经常要用到年级.班级和小组,我们可以用群.大组.小组来代替. 小组设置:网站首页-->现有课程-->右上角的设置按钮-->更多-->用户-->小组 ...
- LINUX系统配置相关
修改系统引导文件 grub.cfg的文件位置 /boot/grub/grub.cfg set default="4" 默认windows是在第四个选项 set timeout ...