通用块层学习2 从页高速缓存到通用块层bio的代码流程
来源:互联网 发布:常用的mac论文软件 编辑:程序博客网 时间:2024/05/21 09:21
submit_bh(int rw, struct buffer_head * bh) =>bio = bio_alloc(GFP_NOIO, 1);//申请1个bio //初始化bio =>bio->bi_sector = bh->b_blocknr * (bh->b_size >> 9);//需要数据传输的起始逻辑扇区号(相对于分区) bio->bi_bdev = bh->b_bdev; bio->bi_io_vec[0].bv_page = bh->b_page; bio->bi_io_vec[0].bv_len = bh->b_size; bio->bi_io_vec[0].bv_offset = bh_offset(bh); bio->bi_vcnt = 1;//第一个bio只有一个vec,后续加入到集合里面 bio->bi_idx = 0; bio->bi_size = bh->b_size;//需要传输数据的大小 bio->bi_end_io = end_bio_bh_io_sync; bio->bi_private = bh; =>bio_get(bio); =>submit_bio(rw, bio);//下发块驱动 =>bio->bi_rw |= rw; =>generic_make_request(bio); =>do { ==>current->bio_list = bio->bi_next; ==>if (bio->bi_next == NULL) current->bio_tail = ¤t->bio_list; ==>else bio->bi_next = NULL; ==>__generic_make_request(bio); =>if (maxsector < nr_sectors || maxsector - nr_sectors < sector) handle_bad_sector(bio); =>do { ==>q = bdev_get_queue(bio->bi_bdev); ==>blk_partition_remap(bio);//bio的sector和b_size更新,相对于整个磁盘,因为卡驱动看不到分区 ==>ret = q->make_request_fn(q, bio); || \/ q->make_request_fn = mfn; //在函数void blk_queue_make_request(struct request_queue * q, make_request_fn * mfn) || \/ blk_queue_make_request(q, __make_request);//在函数blk_init_queue_node(request_fn_proc *rfn, spinlock_t *lock, int node_id) =>__make_request //switch各种调度算法 } while (ret); ==>bio = current->bio_list; } while (bio); =>current->bio_tail = NULL; =>bio_put(bio);
参考
向通用块层提交IO请求
http://blog.chinaunix.net/uid-28897358-id-3776947.html
阅读全文
0 0
- 通用块层学习2 从页高速缓存到通用块层bio的代码流程
- 通用块层与bio
- 通用块层
- 向通用块层提交一个bio请求
- 通用块层学习1 作用
- 通用块层学习3 一些基本概念
- 通用块层相关数据结构
- 通用块层相关数据结构
- linux内核之块设备一---通用块层bio处理
- 块设备的处理及通用块层
- 块设备的处理及通用块层
- 通用块层和SCSI层--块设备队列
- 通用块层和SCSI层--硬盘HBA抽象层
- 块设备驱动之通用层
- [IO系统]13 通用块层-向通用块层提交IO
- 通用块层和SCSI层--I/O处理过程
- 通用块层和SCSI层--I/O的顺序控制 及 调度算法
- Linux 通用块设备层基础之buffer_head
- 前端js和css的经典面试题
- mongo的安装
- Hbase知识梳理和整合
- 本地缓存实现之Guava Cache
- 教程篇(5.4) NSE4 20. 数据防泄露 ❀ 飞塔 (Fortinet) 网络安全专家
- 通用块层学习2 从页高速缓存到通用块层bio的代码流程
- hdoj-2087剪花布条(Kmp)
- “自顶向下,逐步求精”——面向过程程序设计方法
- STL之函数对象和谓词
- Jupyter Notebook 快捷键
- 基于Unity3D的相机功能的实现(二)——AR相机
- win10 Python3.6.0下安装pytorch
- OSI七层模型
- Hadoop平台搭建