struct backing_dev_info backing_dev_info;
void *queuedata; //指向块设备驱动程序的私有数据的指针
void *activity_data; //activity_fn方法使用的私有数据
unsigned long bounce_pfn; //在大于该页框号时必须使用缓冲区回弹
gfp_t bounce_gfp; //回弹缓冲区的内存分配标志
unsigned long queue_flags; //描述请求队列状态的标志
spinlock_t __queue_lock; //请求队列锁
spinlock_t *queue_lock; //指向请求队列锁的指针
struct kobject kobj; //请求队列的内嵌kobject结构
unsigned long nr_requests;
unsigned int nr_congestion_on; //如果待处理请求数超出了该闭值,
//则认为该队列是拥挤的
unsigned int nr_congestion_off;//如果待处理请求数在这个闭值的范围内,
//则认为该队列是不拥挤的
unsigned int nr_batching; //即使队列已满,
//仍可以由特殊进程“batcher”提交的待处理请求的最大值(通常为32)
unsigned int max_sectors; //单个请求所能处理的最大扇区数(可调的)
unsigned int max_hw_sectors; //单个请求所能处理的最大扇区数(硬约束)
unsigned short max_phys_segments; //单个请求所能处理的最大物理段数
unsigned short max_hw_segments;//单个请求所能处理的最大硬段数(分散-聚集DMA操作中的最大不同内存区数)
unsigned short hardsect_size; //扇区中以字节为单位的大小
unsigned int max_segment_size; //物理段的最大长度(以字节为单位)
unsigned long seg_boundary_mask; //段合并的内存边界屏蔽字
unsigned int dma_alignment; //DMA缓冲区的起始地址和长度的对齐位图(缺省值是511)
struct blk_queue_tag *queue_tags;//空闲/忙标记的位图(用于带标记的请求)blk_queue_tag *
unsigned int nr_sorted; //请求队列的引用计数器
unsigned int in_flight; //请求队列中待处理请求数
unsigned int sg_timeout; //用户定义的命令超时(仅由SCSI通用块设备使用)
unsigned int sg_reserved_size; //基本上没有使用
int node;
struct blk_trace *blk_trace;
unsigned int ordered, next_ordered, ordseq;
int orderr, ordcolor;
struct request pre_flush_rq, bar_rq, post_flush_rq;
struct request *orig_bar_rq;
unsigned int bi_size;
struct mutex sysfs_lock;
};
请求队列是一个双向链表,其元素就是请求描述符(也就是request数据结构,下面马上谈到)。请求队列描述符中的queue_head字段存放链表的头(第一个伪元素),而请求描述符中queuelist字段的指针把任一请求链接到链表的前一个和后一个元素之间。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-48358-3.html
是因为你真的真的值得爱
一楼
自己活着