linux的块设备驱动的请求函数什么时候会被调用。
请问块设备驱动的请求函数在什么情况下会被调用,我写了一个块设备驱动模块,奇怪的是我在insmod这个模块的时候,发现它被调用了两次,而且每次请求队列了有两个I\O请求,即两个bio需要被处理,请问是为什么。??我是用 gd->queue = blk_init_queue(blk_request_func,&lock); 来初始化我的请求队列的
图片是我在insmod后 出现的个结果,请指教这是为什么。
下面是我的请求函数。。
static void blk_request_func(struct request_queue *q)
{
struct request *req;
printk("blk_requeset_func\n");
while((req = elv_next_request(q)) != NULL)
{
if(!blk_fs_request(req))
{
end_request(req,0);
continue;
}
blk_transfer(req->sector, req->current_nr_sectors, req->buffer, rq_data_dir(req));
end_request(req, 1);
}
}
这是我的处理函数。。
static void blk_transfer(unsigned long sector, unsigned long nsect, char *buffer, int write)
{
int read = !write;
printk("blk_transfer\n");
if(read)
{
printk("the request is read\n");
memcpy(buffer, flash+sector*512, nsect*512);
}
else
{
printk("the request is write\n");
memcpy(flash+sector*512, buffer, nsect*512);
}
}
页:
[1]