From mboxrd@z Thu Jan 1 00:00:00 1970 From: Zach Brown Subject: [PATCH 4/4] add dio interface for page/offset/len tuples Date: Tue, 6 Nov 2007 17:43:31 -0800 Message-ID: <11943998111855-git-send-email-zach.brown@oracle.com> References: <11943998113245-git-send-email-zach.brown@oracle.com> <11943998112428-git-send-email-zach.brown@oracle.com> <1194399811507-git-send-email-zach.brown@oracle.com> <1194399811773-git-send-email-zach.brown@oracle.com> Cc: Christoph Hellwig , David Chinner To: linux-fsdevel@vger.kernel.org Return-path: Received: from tetsuo.zabbo.net ([207.173.201.20]:46068 "EHLO tetsuo.zabbo.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755353AbXKGBnc (ORCPT ); Tue, 6 Nov 2007 20:43:32 -0500 In-Reply-To: <1194399811773-git-send-email-zach.brown@oracle.com> Sender: linux-fsdevel-owner@vger.kernel.org List-Id: linux-fsdevel.vger.kernel.org This is what it might look like to feed pgol in to some part of the fs stack instead of iovecs. I imagine we'd want to do it at a much higher level, perhaps something like vfs_write_pages(). --- fs/direct-io.c | 21 +++++++++++++++++++++ 1 files changed, 21 insertions(+), 0 deletions(-) diff --git a/fs/direct-io.c b/fs/direct-io.c index 0d5ed41..e86bcbc 100644 --- a/fs/direct-io.c +++ b/fs/direct-io.c @@ -1213,3 +1213,24 @@ __blockdev_direct_IO(int rw, struct kiocb *iocb, struct inode *inode, } EXPORT_SYMBOL(__blockdev_direct_IO); + +ssize_t +__blockdev_direct_IO_pages(int rw, struct kiocb *iocb, struct inode *inode, + struct block_device *bdev, struct pgol *pgol, loff_t offset, + unsigned long nr_pages, get_block_t get_block, dio_iodone_t end_io, + int dio_lock_type) +{ + struct rwmem_pages rwp = { + .rwmem.ops = &rwmem_pages_ops, + .rwmem.nr_segs = nr_pages, + .pgol = pgol, + }; + struct rwmem *rwm = &rwp.rwmem; + + rwm->ops->init(rwm); + + return blockdev_direct_IO_rwmem(rw, iocb, inode, bdev, rwm, offset, + get_block, end_io, dio_lock_type); +} + +EXPORT_SYMBOL(__blockdev_direct_IO_pages); -- 1.5.2.2