hugoleong 发表于 2012-10-25 20:52

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]
查看完整版本: linux的块设备驱动的请求函数什么时候会被调用。