Hi Prasad,

On Tue, Jul 21, 2009 at 12:14 PM, Prasad Joshi <prasadjoshi...@gmail.com>wrote:

> Hi All,
>
> I am working on a block device (something similar to the loop device). The
> block device is associated with a file. So every write or read on block
> device is intern scheduled to the backing file. Very much similar to the
> loop device.
>
> But, I also need to submit a page full of IOs from the kernel mode. For
> time being, to make sure it works correctly, I wrote an IOCTL which will
> create a page, attach buffer heads with it and then call submit_bh(write,
> bh); to schedule a request to the block device.
>
> This is a part of the code
>
> int iftl_ioctl (struct block_device *bdev, fmode_t mode, unsigned cmd,
>     unsigned long arg)
> {
>     struct iftl_device *dev = bdev->bd_disk->private_data;
>     struct buffer_head *bh = NULL, *head = NULL;
>     struct file *file = NULL;
>     int error = 0;
>
> ....
> ....
>
>     case IFTL_WRITEBLOCK:
>         if (!page) {
>             page = alloc_page(GFP_KERNEL);
>             if (!page) {
>                 page = ERR_PTR(-ENOMEM);
>             }
>             if (IS_ERR(page)) {
>                 goto ERROR;
>             }
>         }
>
>         if (!page_has_buffers(page)) {
>             create_empty_buffers(page, PAGE_SIZE, 0);
>         }
>
>         bh = head = page_buffers(page);
>         fill_data(page);
>
>         bh->b_blocknr = 0;
>         bh->b_bdev = dev->bdev;
>         bh->b_end_io = end_page_write;
>
>         set_buffer_locked(bh);
>         set_buffer_mapped(bh);
>
> //      mark_buffer_dirty(bh);
>
>         submit_bh(WRITE, bh);
>         break;
>     default:
>         error = -EINVAL;
>         goto ERROR;
>     }
> ERROR:
>     return error;
> }
>
> But the code fails in generic_make_request() that is called from the
> submit_bh(). Can someone help?
>

What exactly does fails or whats the error code that is being returned.
I suspect playing with some data members of bh. But if you provide the exact
error ( console logs + dmesg ), it will really be helpful.



>
> As the page that I have allocated is not attached with an address_space
> (mapping) could it be reason for the failure?
> Do every page used in disk IO needs an associated mapping?
>

IMO, No.


>
> Thanks and Regards,
> Prasad
>

Reply via email to