/*
* 每个缓冲区都有一个对应的描述符,描述符用buffer_head结构体表示
* 被称为缓冲区头,在文件linux/buffer_head.h中定义
*/
struct buffer_head {
unsigned long b_state; /* 缓冲区状态标志 */
atomic_t b_count; /* 缓冲区使用记数 */
struct buffer_head *b_this_page; /* 页面中的缓冲区 */
struct page *b_page; /* 存储缓冲区的页面 */
sector_t b_blocknr; /* 逻辑块号 */
u32 b_size; /* 块大小 (以字节为单位) */
char *b_data; /* 页面中的缓冲区 */
struct block_device *b_bdev; /* 块设备 */
bh_end_io_t *b_end_io; /* I/O完成方法 */
void *b_private; /* 完成方法数据 */
struct list_head b_assoc_buffers; /* 相关的映射链表 */
};
/*
*目前内核中块I/O操作的基本容器由bio结构体表示,bio结构体定义于linux/bio.g中
*/
struct bio {
sector_t bi_sector; /* 磁盘上相关的扇区 */
struct bio *bi_next; /* 请求链表 */
struct block_device *bi_bdev; /* 相关的块设备 */
unsigned long bi_flags; /* 状态和命令标志 */
unsigned long bi_rw; /* 读还是写? */
unsigned short bi_vcnt; /* bio_vecs偏移个个数 */
unsigned short bi_idx; /* bi_io_vec的当前索引 */
unsigned short bi_phys_segments; /* 结合后的片断数目 */
unsigned short bi_hw_segments; /* 重映射后的片段数目 */
unsigned int bi_size; /* I/O 记数 */
unsigned int bi_hw_front_size; /* 第一个可合并的段大小 */
unsigned int bi_hw_back_size; /* 最后一个可合并的段大小 */
unsigned int bi_max_vecs; /* bio_vecs数目上限*/
struct bio_vec *bi_io_vec; /* bio_vec链表 */
bio_end_io_t *bi_end_io; /* I/O 完成方法 */
atomic_t bi_cnt; /* 使用记数 */
void *bi_private; /* 拥有者私有方法 */
bio_destructor_t *bi_destructor; /* 销毁方法 */
};
阅读(1530) | 评论(0) | 转发(0) |