标签:
struct buffer_head {
unsigned long b_state; //缓冲区状态标志 struct buffer_head *b_this_page; //页面中的缓冲区 struct page *b_page; //存储缓冲区的页面 sector_t b_blocknr; //逻辑块号 size_t 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; //相关映射链表 /* mapping this buffer is associated with */ struct address_space *b_assoc_map;
atomic_t b_count; //缓冲区使用计数};
struct gendisk {int major; //主设备号int first_minor; //第一个从设备号int minors;/* 描述被磁盘使用的设备号的成员.一个驱动器必须使用最少一个次编号.如果你的驱动会是可分区的,但是(并且大部分应当是),你要分配一个次编号给每个可能 的分区.次编号的一个普通的值是 16, 它允许"全磁盘"设备盒 15 个分区. 一些磁盘驱动使用 64 个次编号给每个设备.*/char disk_name[32]; //应当被设置为磁盘驱动器名子的成员. 它出现在 /proc/partitions 和 sysfs.struct hd_struct **part; /* [indexed by minor] */struct block_device_operations *fops;// 设备操作集合.struct request_queue *queue;//被内核用来管理这个设备的 I/O 请求的结构;void *private_data;//块驱动可使用这个成员作为一个指向它们自己内部数据的指针.sector_t capacity;//这个驱动器的容量,以512-字节扇区来计.sector_t类型可以是64位宽.驱动不应当直接设置这个成员;相反,传递扇区数目给set_capacity.int flags;// 一套标志(很少使用),描述驱动器的状态.如果你的设备有可移出的介质,你应当设置GENHD_FL_REMOVABLE.CD-ROM驱动器可设置 GENHD_FL_CD. 如果, 由于某些原因, 你不需要分区信息出现在 /proc/partitions, 设置 GENHD_FL_SUPPRESS_PARTITIONS_INFO.struct device *driverfs_dev; // FIXME: removestruct device dev;struct kobject *holder_dir;struct kobject *slave_dir;struct timer_rand_state *random;int policy;atomic_t sync_io; /* RAID */unsigned long stamp;int in_flight;#ifdef CONFIG_SMPstruct disk_stats *dkstats;#elsestruct disk_stats dkstats;#endifstruct work_struct async_notify;};
struct bio {
//该bio结构所要传输的第一个(512字节)扇区:磁盘的位置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_vesc偏移的个数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; //销毁方法};
【转】 bio 与块设备驱动
原文地址:http://www.cnblogs.com/losing-1216/p/5404923.html