|
在<情景分析中>详细分析了对于IDE硬盘I/O的启动过程,即当接收到一个用户读/写请求时,系统怎样把它转化为IDE盘的请求,并映射为具体的扇区.我现在有一个问题就是:若我想直接读出某个扇区的数据如(0,0,1),可以通过把do_rw_disk()设为old_rw_disk(),然后在do_rw_disk()中直接调用old_rw_disk()即可.程序如下:
do_rw_disk(ide_drive_t *drive, struct request *rq, unsigned long block)
{
if(!ifmyread){
my_buffer=vmalloc(512);
rq->buffer=my_buffer;
rq->nr_sectors=1;
rq->current_nr_sectors=1;
ifmyread=1;
return old_rw_disk(drive,rq,1);
}
return old_rw_disk(drive,rq,block);
}
然后在read_intr()中取出(0,0,1)的数据.
不知如此想法是否正确,若可以的话,我不明白执行了
if(!ifmyread){
my_buffer=vmalloc(512);
rq->buffer=my_buffer;
rq->nr_sectors=1;
rq->current_nr_sectors=1;
ifmyread=1;
return old_rw_disk(drive,rq,1);
}
之后,什么时候执行原来的rq呢? |
|