📄 blkdev.h.txt
字号:
any question,send email to netxiong@263.net
相关文件:
/linux/blk.h
*******************基本数据结构***********************
(1):struct request {
struct list_head queue;
int elevator_sequence;
struct list_head table;
volatile int rq_status;
kdev_t rq_dev;
int cmd; /* READ or WRITE */
int errors;
unsigned long start_time;
unsigned long sector; //开始读写的扇区
unsigned long nr_sectors; //读写的总的扇区数目
unsigned long hard_sector, hard_nr_sectors;//和前两个没有什么区别(默认的处理函数这样处理)
unsigned int nr_segments;
unsigned int nr_hw_segments;
unsigned long current_nr_sectors;//等同于hard_nr_sectors
void * special;
char * buffer;
struct semaphore * sem;
struct buffer_head * bh;
struct buffer_head * bhtail;
request_queue_t *q;
};
struct request_queue
{
//the queue request freelist, one for reads and one for writes
struct list_head request_freelist[2];
struct list_head pending_freelist[2];
int pending_free[2];
struct list_head queue_head;
elevator_t elevator;
request_fn_proc * request_fn;
merge_request_fn * back_merge_fn;
merge_request_fn * front_merge_fn;
merge_requests_fn * merge_requests_fn;
make_request_fn * make_request_fn;
plug_device_fn * plug_device_fn;
void * queuedata;
struct tq_struct plug_tq;
char plugged;
char head_active; //只是current请求是否active
char oneshot_error;
spinlock_t queue_lock;
wait_queue_head_t wait_for_request;
};
(3):struct blk_dev_struct {
request_queue_t request_queue; //设备上请求队列
queue_proc *queue;
void *data;
};
(4):typedef struct request_queue request_queue_t
******************************************************
结构示意图
blk_dev_struct
#request_queue---->struct request_queue
queue_head---------->struct request
queue------->struct request
************************宏********************
(1):#define blkdev_entry_to_request(entry) list_entry((entry), struct request,queue)
#这个宏被CURRENT来进行使用,在blk.h中定义。
(2):#define BLK_DEFAULT_QUEUE(_MAJOR) &blk_dev[_MAJOR].request_queue
#这个宏指向了每一个driver的默认queue。这样就可以是driver不必要知道 blk_dev这个结构了。
(3)#define blk_started_io(nsects) do { } while (0) //空函数
***********************************************
***********************常量**********************
#define QUEUE_NR_REQUESTS 8192 //一个队列上最多又这么多个请求
*************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -