rendered paste bodystatic void my_request(struct request_queue *q)
{
struct request *rq;
int size, res = 0;
char *ptr;
unsigned nr_sectors, sector;
printk(KERN_INFO "entering request routine\n");
rq = blk_fetch_request(q);
while (rq) {
if (!blk_fs_request(rq)) {
printk(KERN_WARNING
"This was not a normal fs request, skipping\n");
goto done;
}
nr_sectors = blk_rq_cur_sectors(rq);
sector = blk_rq_pos(rq);
ptr = my_blockdevice + sector * sector_size;
size = nr_sectors * sector_size;
if ((ptr + size) > (my_blockdevice + disk_size)) {
printk(KERN_WARNING
" tried to go past end of device\n");
goto done;
}
if (rq_data_dir(rq)) {
printk(KERN_INFO "writing at sector %d, %u sectors \n",
sector, nr_sectors);
memcpy(ptr, rq->buffer, size);
} else {
printk(KERN_INFO "reading at sector %d, %u sectors \n",
sector, nr_sectors);
memcpy(rq->buffer, ptr, size);
}
done:
if (!__blk_end_request_cur(rq, res))
rq = blk_fetch_request(q);
}
printk(KERN_INFO "leaving request\n");
}