How to rewrite sbull_request in ldd3 for current kernel?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux