ll_rw_block()是块设备驱动层,向上提供按block读写块设备到某个内存地址的(是以page为目标单位)方法.

bread()是块设备缓冲层,磁盘上的block用页缓存.先从这个缓存里找,找不到再调用ll_rw_block()读进来.

各个文件系统,要向vfs层提供read_inode()这样的接口,而read_inode()的内部,就会用到bread()这样的函数.

  1. void ll_rw_block(int rw, int nr, struct buffer_head *bhs[]);
  2. //rw:读写标志位, nr:bhs[]长度, bhs[]:要读写的数据数组
  3.  
  4. struct buffer_head {
  5. unsigned long b_state;          //缓冲区状态标志
  6. struct buffer_head *b_this_page;    //页面中的缓冲区
  7. struct page *b_page;           //存储缓冲区位于哪个页面
  8. sector_t b_blocknr;           //逻辑块号
  9. size_t b_size;              //块的大小
  10. char *b_data;               //页面中的缓冲区
  11.  
  12. struct block_device *b_bdev;     //块设备,来表示一个独立的磁盘设备
  13.  
  14. bh_end_io_t *b_end_io;         //I/O完成方法
  15.  
  16. void *b_private;             //完成方法数据
  17.  
  18. struct list_head b_assoc_buffers;   //相关映射链表
  19.  
  20. /* mapping this buffer is associated with */
  21. struct address_space *b_assoc_map;
  22. atomic_t b_count;             //缓冲区使用计数
  23. };

摘自(这篇写的特别好): 22.Linux-块设备驱动之框架详细分析(详解) 

22.Linux-块设备驱动之框架详细分析(详解)

linux的块设备层的更多相关文章

  1. 如何提高Linux下块设备IO的整体性能?

    编辑手记:本文主要讲解Linux IO调度层的三种模式:cfp.deadline和noop,并给出各自的优化和适用场景建议. 作者简介: 邹立巍 Linux系统技术专家.目前在腾讯SNG社交网络运营部 ...

  2. Linux平台块设备到字符设备(裸设备)的三种映射方式(转载)

    在Linux平台oracle rac的组建过程中,如果使用ASM+RAW的存储方式的话,由于asm不支持块设备,支持持字符访问设备,所以需要配置将Block Device Drive转变成Charac ...

  3. Linux中块设备驱动程序分析

    基于<Linux设备驱动程序>书中的sbull程序以对Linux块设备驱动总结分析. 開始之前先来了解这个块设备中的核心数据结构: struct sbull_dev {         i ...

  4. Linux两块4TB的数据磁盘创建8TB的Raid0

    分区表MBR与GPT的说明: MBR:主引导记录,是传统的分区机制,应用于绝大多数使用BIOS的PC设备,MBR+BIOS,MBR支持32位和64位系统,支持的分区数量有限,MBR只支持不超过2T的硬 ...

  5. LINUX中块设备文件和字符设备文件的本质区别

    在LINUX系统文件类型分类的文章中我们提到了 块设备 和 字符设备文件,那么什么是块设备 字符设备文件呢?他们之间有什么本质上的区别呢? 设备文件分为 Block(块) Device Driver ...

  6. linux超级块和inode 详解 和 df 、du 命令详解与环境变量

    一.inode块,Unix文件的核心. 首先需要明白的是,在Unix操作系统中的任何资源都被当作文件来管理.如目录.光驱.终端设备等等,都被当作是一种文件.从这方面来说,Unix操作系统中的所有的目录 ...

  7. linux vi 块操作、多窗口

    vim 块选择v:字符选择或者行选择[ctrl]+v: 块选择y:将反白的地方复制d:将反白的地方删除 多窗口:sp {filename} 打开一个新的窗口[ctrl]+w+j或者[ctrl]+w+向 ...

  8. Linux 内核块 urb

    块 urb 被初始化非常象中断 urb. 做这个的函数是 usb_fill_bulk_urb, 它看来如此: void usb_fill_bulk_urb(struct urb *urb, struc ...

  9. linux系统分析工具之Blktrace

    Blktrace简介: blktrace是一个针对Linux内核中块设备I/O层的跟踪工具,用来收集磁盘IO信息中当IO进行到块设备层(block层,所以叫blk trace)时的详细信息(如IO请求 ...

随机推荐

  1. centos7systemctl介绍

     Linux中如何启动.重启.停止.重载服务以及检查服务(如 httpd.service)状态  # systemctl start httpd.service # systemctl restart ...

  2. SpringMVC-设计模式

    MVC 设计不仅限于 Java Web 应用,还包括许多应用,比如前端.PHP..NET 等语言.之所以那么做的根本原因在于解耦各个模块. MVC 是 Model.View 和 Controller ...

  3. DOM疑惑点整理(三)

    innerHTML和outerHTML 先说一个几乎众所周知的,innerHTML和outerHTML中的内容都会被解析为DOM子树,其二就是, <div id="txt" ...

  4. 【运维】使用FileZilla搭建FTP服务器

    一.下载Filezilla  Server 官网网址:https://filezilla-project.org 二.安装Filezilla  Server   Filezilla  Server的安 ...

  5. 北风设计模式课程---备忘录(Memento)模式

    北风设计模式课程---备忘录(Memento)模式 一.总结 一句话总结: 备忘录模式也是一种比较常用的模式用来保存对象的部分用于恢复的信息,和原型模式有着本质的区别,广泛运用在快照功能之中.同样的使 ...

  6. php面试专题---Mysql索引原理及SQL优化

    php面试专题---Mysql索引原理及SQL优化 一.总结 一句话总结: 注意:只写精品 1.为表设置索引要付出代价 是什么? 存储空间:一是增加了数据库的存储空间 修改插入变动索引时间:二是在插入 ...

  7. nginx配置-Rewrite

    rewrite功能就是,使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标志位实现url重写以及重定向.rewrite只能放在server{},location{},if{}中,并且只能 ...

  8. python实现自动发送邮件

    Python发送邮件成功的前提,应是先开启授权码.目前使用广泛的邮箱有:163邮箱.qq邮箱等. 163邮箱开启授权码的方法如下图: qq邮箱开启授权码的方法如下图: 接下来代码的实现: import ...

  9. 边界安全 - CDN/DMZ/网络协议

    CDN   工具 - LuManager CDN DMZ 网络协议 - DNS Win7下搭建DNS服务器 - BIND 根域 顶级域(即相关国家域名管理机构的数据库,如中国的CNNIC) com n ...

  10. (转载)Manacher'sAlgorithm: O(n)时间求字符串的最长回文子串

    以下内容转载自:传送门 源于这两篇文章: http://blog.csdn.net/ggggiqnypgjg/article/details/6645824http://zhuhongcheng.wo ...