Hi, I am reading the book, Linux Driver Development 3. In the chapter on block driver of this book, I need some help to rewriting the sbull_request since the kernel’s block API was changed. The sbull_request code: /* * The simple form of the request function. */ static void sbull_request(request_queue_t *q) { struct request *req; while ((req = elv_next_request(q)) != NULL) { struct sbull_dev *dev = req->rq_disk->private_data; if (! blk_fs_request(req)) { printk (KERN_NOTICE "Skip non-fs request\n"); end_request(req, 0); continue; } sbull_transfer(dev, req->sector, req->current_nr_sectors, req->buffer, rq_data_dir(req)); end_request(req, 1); } } I have rewritten the code above into: /* * The simple form of the request function. */ void blkplay_request(struct request_queue *q) { struct request *req; while (!blk_queue_stopped(q) && (req = blk_peek_request(q)) != NULL) { struct blkplay_dev *dev = req->rq_disk->private_data; blk_start_request(req); if (req->cmd_type != REQ_TYPE_FS) { printk (KERN_NOTICE "Skip non-fs request\n"); blk_end_request(req, -EIO, 0); continue; } /* I don’t know how to write the statement below */ blkplay_transfer(dev, req->sector, req->current_nr_sectors, req->buffer, rq_data_dir(req)); blk_end_request_cur(req, 0); } } Is the rewrite proper?
The compiler can’t compile it because the request struct no longer has the field of ‘sector’ and ‘current_nr_sectors’. I have read the kernel code about the request struct, the kernel code said the __data_len and __sector field of request struct is internal so that we shouldn’t access them directly. How could I rewrite it ? Thanks.
|
_______________________________________________ Kernelnewbies mailing list Kernelnewbies@xxxxxxxxxxxxxxxxx http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies