⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 blkdev.h.txt

📁 linux内核学习笔记 希望想看的人可以很快下载到
💻 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 + -