i_bdev只有块设备文件系统的inode会设置该属性,对应的是块设备的数据结构

i_rdev 通过mknod创建的inode都会指定设备号

一个块设备可以通过mknod创建多个具有相同i_rdev的inode,那么在访问这些inode的时候,具体对应的块设备是i_bdev指定的,这和普通的文件系统是不一样的,普通文件系统只使用sb中记录的s_bdev。所有使用相同设备号创建的inode的i_mapping属性都是相同的,他们等于inode->i_mapping = bdev->bd_inode->i_mapping。inode的i_bdev开始可能是空的,在blkdev_open函数中会调用bd_acquire函数,这里面会根据i_rdev值调用bdget函数,该函数会调用iget5_locked在块文件系统的超级块blockdev_superblock中查找对应的inode,获取bdev_inode的bdev属性,并设置inode的bdev

blkdev_get_block 和普通文件系统,例如ext2_get_block

blkdev_get_block 把bh->b_bdev 设置为inode对应的i_bdev, 而其他文件系统则使用map_bh, 把bh的b_bdev设置为sb的s_bdev,在最后调用submit_bid的时候会根据b_bdev获取设备的request_queue

在执行echo u > /proc/sysrq-trigger时执行remount_ro将系统中已经挂载的文件系统设置为只读,但在选取要设置的文件系统时有一个判断条件s_bdev是否为空,如果为空那么不设置该文件系统为只读,而网路文件系统nfs的s_bdev是为NULL的,所以这个操作对它们是无效的。

super_block的s_bdev是在mount时指定的,mount会分为两个分支mount_noblk和mount_blk,mount_noblk每次都指定的dev指针为空,所以每次都是创建新的super_block对象,而mount_blk会根据指定的dev,这个dev也是根据path查找的,查找的过程中会根据holder属性判断,是否有其他文件系统类型已经占用该dev了,这个是在全局链表上进行的,先进行查找看是否已经创建了和该dev关联的super_block对象,如果还没有则创建super_block对象,并把它加入到file_system_type对象的成员链表中,如果查找和该dev关联的super_block对象,则引用加一,并使用该super_block对象,因此同一个设备多次mount使用的是同一个super_block

如何分配唯一的ID,并且可以服用,可以参看idr和ida模块

fuse有两种类型的文件系统fuseblk和fuse,fuseblk文件系统需要指定device,而fuse类型不需要,但是使用fuse类型时bmap接口应该是不能使用的。

块文件系统和普通文件系统共用块缓存,buffer_head, buffer_head都有指针只想pagecache中的page

声明:转载本博文章须在文章明显处注明作者及附上原文链接,便于读者找到原文的更新版。
--------------------- 
作者:oscube 
来源:CSDN 
原文:https://blog.csdn.net/oscube/article/details/80567096 
版权声明:本文为博主原创文章,转载请附上博文链接!

i_rdev i_bdev i_mapping 关系相关推荐

  1. Linux 虚拟文件系统四大对象:超级块、inode、dentry、file之间关系

    一:文件系统 1. 什么是文件系统? 操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统. 通常文件系统是用于存储和组织文件的一种机制,便于对文件进行方便的查找与访问. 文件系统 ...

  2. 和linux关系_Linux内核Page Cache和Buffer Cache关系及演化历史

    在我们进行数据持久化,对文件内容进行落盘处理时,我们时常会使用fsync操作,该操作会将文件关联的脏页(dirty page)数据(实际文件内容及元数据信息)一同写回磁盘.这里提到的脏页(dirty ...

  3. linux刷新磁盘_Linux内核Page Cache和Buffer Cache关系及演化历史

    在我们进行数据持久化,对文件内容进行落盘处理时,我们时常会使用fsync操作,该操作会将文件关联的脏页(dirty page)数据(实际文件内容及元数据信息)一同写回磁盘.这里提到的脏页(dirty ...

  4. [IO系统]06 因OPEN建立的结构体关系

    前述章节已经说明了open是如何打开文件的,本章节将说明open打开文件的过程中初始化了哪些结构体及这些结构体之间建立的联系 1.1   各结构体之间的关系图 如下图: 接下来一步一步来说明. 1.2 ...

  5. Linux shell 学习笔记(3)— shell 父子关系及内建命令

    1. shell 类型 只要用户登录到某个虚拟控制台终端或是在 GUI 中启动终端仿真器,默认的 shell 程序就会开始运行. 默认的交互 shell 会在用户登录某个虚拟控制台终端或在 GUI 中 ...

  6. 知识图谱中传统关系抽取方法

    目前主要采用统计机器学习的方法,将关系实例转换成高 维空间中的特征向量或直接用离散结构来表示,在标注语 料库上训练生成分类模型,然后再识别实体间关系  基于特征向量方法 最大熵模型(Kambhatl ...

  7. 用男女朋友关系解释计算机常用概念

    运维方面 很多同学对热备,冷备,云备了解不深,我科普一下 IT 行业各种备份术语.以后别闹笑话了. 假设你是一位女性,你有一位男朋友,于此同时你和另外一位男生暧昧不清,比朋友好,又不是恋人.你随时可以 ...

  8. 与人相处时不越界,能让关系更和谐

    在这世上,我们每天都要与人相处:与人相处是一门学问,需要把握一个界限,当你过度的想要保持距离时,会让对方感觉你不近人情:而当你过度的亲密不拿自己当外人时,又可能是越界了. 每个人都有自己的朋友圈子和生 ...

  9. 想让关系更好就不要怕麻烦

    在生活或工作想让关系更好就不要怕麻烦他人,也不要怕他人麻烦自己.如果总是怕麻烦,你不联系我,我也不联系你,感情也就真的淡了还可能也疏远了. 人与人之间浓厚的感情,就是在这一求一应,互相帮助中,慢慢得到 ...

最新文章

  1. Grape Api 笔记
  2. 聊一聊Java 泛型通配符 T,E,K,V,?
  3. The Road to learn React书籍学习笔记(第三章)
  4. 解决报错:java.lang.NoSuchMethodException: com.tangyuan.entity.RicherProduct.<init>()
  5. nlp论文-《Neural Machine Translation by Jointly Learning to Align and Translate》-基于联合学习对齐和翻译的神经机器翻译(一)
  6. Integer的自动拆装箱的陷阱(整型数-128到127的值比较问题)
  7. 7000 亿!华为正式宣布,全世界为之颤抖!
  8. access统计行数 vb_VB代码行数统计工具
  9. 圆通JAVA职级_圆通小编升职啦,快看看你的职级有没有变化
  10. 51单片机外部中断实例
  11. 【算法】麦克风阵列的自适应降噪算法
  12. 用Python做一个人脸识别系统,简单操作又实用~
  13. 微信小程序canvas 证件照制作
  14. python读取千万级数据库数据类型_Python 基于Python从mysql表读取千万数据实践
  15. 才刚满30岁,就中年危机了...
  16. 用SSD也是一种性能提升手段
  17. SDK和API的区别
  18. nist是什么软件_NIST推荐什么
  19. WordPress数据库连接错误解决方案!
  20. go 文件读Read and ReadString

热门文章

  1. 中美程序员的不完全对比,看看跟你了解的一样吗?
  2. 为什么不建议在代码中使用 User 这个单词?
  3. 全球第二大浏览器升级!内存/CPU占用暴降
  4. 每日一皮:我们最要避开的山寨产品...
  5. 推荐11个构建和测试API的顶级工具
  6. linux按进程分配物理内存,linux下内存管理学习心得(一)
  7. mysql oracle查询速度慢_oracle查看执行最慢与查询次数最多的sql语句
  8. Mish激活函数,ReLU的继任者
  9. CheXNet 肺炎
  10. python 数组队列