[PATCH] direct-IO API change

From: Chuck Lever (cel@citi.umich.edu)
Date: Fri Oct 04 2002 - 17:10:26 EST


hi Linus-

this patch is a pre-requisite for NFS direct I/O support (which many would
like to see in 2.5/6), and is being awaited by the raw dev guys. please
apply this to 2.5.40.

this patch adds a "struct file *" argument to direct I/O. this is needed
by NFS direct I/O to make the file's credentials available to direct I/O
subroutines. we can't remove "struct inode *" yet because the raw driver
still needs it.

andrew, trond, and the raw dev team are OK with this patch.

diff -drN -U2 05-jiffies/drivers/char/raw.c 06-odirect1/drivers/char/raw.c
--- 05-jiffies/drivers/char/raw.c Tue Oct 1 03:07:07 2002
+++ 06-odirect1/drivers/char/raw.c Fri Oct 4 15:23:13 2002
@@ -223,5 +223,5 @@
                 nr_segs = iov_shorten((struct iovec *)iov, nr_segs, count);
         }
- ret = generic_file_direct_IO(rw, inode, iov, *offp, nr_segs);
+ ret = generic_file_direct_IO(rw, filp, inode, iov, *offp, nr_segs);
 
         if (ret > 0)
diff -drN -U2 05-jiffies/fs/block_dev.c 06-odirect1/fs/block_dev.c
--- 05-jiffies/fs/block_dev.c Tue Oct 1 03:07:55 2002
+++ 06-odirect1/fs/block_dev.c Fri Oct 4 15:23:13 2002
@@ -117,6 +117,7 @@
 
 static int
-blkdev_direct_IO(int rw, struct inode *inode, const struct iovec *iov,
- loff_t offset, unsigned long nr_segs)
+blkdev_direct_IO(int rw, struct file *file, struct inode *inode,
+ const struct iovec *iov, loff_t offset,
+ unsigned long nr_segs)
 {
         return generic_direct_IO(rw, inode, iov, offset,
diff -drN -U2 05-jiffies/fs/direct-io.c 06-odirect1/fs/direct-io.c
--- 05-jiffies/fs/direct-io.c Tue Oct 1 03:07:04 2002
+++ 06-odirect1/fs/direct-io.c Fri Oct 4 15:23:13 2002
@@ -647,11 +647,12 @@
 
 ssize_t
-generic_file_direct_IO(int rw, struct inode *inode, const struct iovec *iov,
- loff_t offset, unsigned long nr_segs)
+generic_file_direct_IO(int rw, struct file *file, struct inode *inode,
+ const struct iovec *iov, loff_t offset, unsigned long nr_segs)
 {
         struct address_space *mapping = inode->i_mapping;
         ssize_t retval;
 
- retval = mapping->a_ops->direct_IO(rw, inode, iov, offset, nr_segs);
+ retval = mapping->a_ops->direct_IO(rw, file, inode, iov, offset,
+ nr_segs);
         if (inode->i_mapping->nrpages)
                 invalidate_inode_pages2(inode->i_mapping);
diff -drN -U2 05-jiffies/fs/ext2/inode.c 06-odirect1/fs/ext2/inode.c
--- 05-jiffies/fs/ext2/inode.c Tue Oct 1 03:06:16 2002
+++ 06-odirect1/fs/ext2/inode.c Fri Oct 4 15:23:13 2002
@@ -620,6 +620,7 @@
 
 static int
-ext2_direct_IO(int rw, struct inode *inode, const struct iovec *iov,
- loff_t offset, unsigned long nr_segs)
+ext2_direct_IO(int rw, struct file *file, struct inode *inode,
+ const struct iovec *iov, loff_t offset,
+ unsigned long nr_segs)
 {
         return generic_direct_IO(rw, inode, iov,
diff -drN -U2 05-jiffies/fs/ext3/inode.c 06-odirect1/fs/ext3/inode.c
--- 05-jiffies/fs/ext3/inode.c Tue Oct 1 03:07:11 2002
+++ 06-odirect1/fs/ext3/inode.c Fri Oct 4 15:23:13 2002
@@ -1400,5 +1400,5 @@
  * crashes then stale disk data _may_ be exposed inside the file.
  */
-static int ext3_direct_IO(int rw, struct inode *inode,
+static int ext3_direct_IO(int rw, struct file *file, struct inode *inode,
                         const struct iovec *iov, loff_t offset,
                         unsigned long nr_segs)
diff -drN -U2 05-jiffies/fs/jfs/inode.c 06-odirect1/fs/jfs/inode.c
--- 05-jiffies/fs/jfs/inode.c Tue Oct 1 03:05:46 2002
+++ 06-odirect1/fs/jfs/inode.c Fri Oct 4 15:23:13 2002
@@ -311,6 +311,7 @@
 }
 
-static int jfs_direct_IO(int rw, struct inode *inode, const struct iovec *iov,
- loff_t offset, unsigned long nr_segs)
+static int jfs_direct_IO(int rw, struct file *file, struct inode *inode,
+ const struct iovec *iov, loff_t offset,
+ unsigned long nr_segs)
 {
         return generic_direct_IO(rw, inode, iov,
diff -drN -U2 05-jiffies/fs/xfs/linux/xfs_aops.c 06-odirect1/fs/xfs/linux/xfs_aops.c
--- 05-jiffies/fs/xfs/linux/xfs_aops.c Tue Oct 1 03:07:36 2002
+++ 06-odirect1/fs/xfs/linux/xfs_aops.c Fri Oct 4 15:23:13 2002
@@ -682,4 +682,5 @@
 linvfs_direct_IO(
         int rw,
+ struct file *file,
         struct inode *inode,
         const struct iovec *iov,
diff -drN -U2 05-jiffies/include/linux/fs.h 06-odirect1/include/linux/fs.h
--- 05-jiffies/include/linux/fs.h Tue Oct 1 03:06:25 2002
+++ 06-odirect1/include/linux/fs.h Fri Oct 4 15:23:13 2002
@@ -309,5 +309,7 @@
         int (*invalidatepage) (struct page *, unsigned long);
         int (*releasepage) (struct page *, int);
- int (*direct_IO)(int, struct inode *, const struct iovec *iov, loff_t offset, unsigned long nr_segs);
+ int (*direct_IO)(int, struct file *, struct inode *,
+ const struct iovec *iov, loff_t offset,
+ unsigned long nr_segs);
 };
 
@@ -1248,6 +1250,7 @@
 extern ssize_t generic_file_sendfile(struct file *, struct file *, loff_t *, size_t);
 extern void do_generic_file_read(struct file *, loff_t *, read_descriptor_t *, read_actor_t);
-extern ssize_t generic_file_direct_IO(int rw, struct inode *inode,
- const struct iovec *iov, loff_t offset, unsigned long nr_segs);
+extern ssize_t generic_file_direct_IO(int rw, struct file *file,
+ struct inode *inode, const struct iovec *iov, loff_t offset,
+ unsigned long nr_segs);
 extern int generic_direct_IO(int rw, struct inode *inode, const struct iovec
         *iov, loff_t offset, unsigned long nr_segs, get_blocks_t *get_blocks);
diff -drN -U2 05-jiffies/include/linux/nfs_fs.h 06-odirect1/include/linux/nfs_fs.h
--- 05-jiffies/include/linux/nfs_fs.h Tue Oct 1 03:06:30 2002
+++ 06-odirect1/include/linux/nfs_fs.h Fri Oct 4 15:23:13 2002
@@ -15,4 +15,5 @@
 #include <linux/pagemap.h>
 #include <linux/wait.h>
+#include <linux/uio.h>
 
 #include <linux/nfs_fs_sb.h>
@@ -285,4 +286,10 @@
 
 /*
+ * linux/fs/nfs/direct.c
+ */
+extern int nfs_direct_IO(int, struct file *, struct inode *,
+ const struct iovec *, loff_t, unsigned long);
+
+/*
  * linux/fs/nfs/dir.c
  */
diff -drN -U2 05-jiffies/kernel/ksyms.c 06-odirect1/kernel/ksyms.c
--- 05-jiffies/kernel/ksyms.c Tue Oct 1 03:05:49 2002
+++ 06-odirect1/kernel/ksyms.c Fri Oct 4 15:23:13 2002
@@ -193,4 +193,5 @@
 EXPORT_SYMBOL(invalidate_device);
 EXPORT_SYMBOL(invalidate_inode_pages);
+EXPORT_SYMBOL_GPL(invalidate_inode_pages2);
 EXPORT_SYMBOL(truncate_inode_pages);
 EXPORT_SYMBOL(fsync_bdev);
diff -drN -U2 05-jiffies/mm/filemap.c 06-odirect1/mm/filemap.c
--- 05-jiffies/mm/filemap.c Wed Oct 2 13:02:19 2002
+++ 06-odirect1/mm/filemap.c Fri Oct 4 15:23:13 2002
@@ -1159,5 +1159,5 @@
                                                         nr_segs, count);
                         }
- retval = generic_file_direct_IO(READ, inode,
+ retval = generic_file_direct_IO(READ, filp, inode,
                                         iov, pos, nr_segs);
                         if (retval > 0)
@@ -1841,5 +1841,5 @@
                         nr_segs = iov_shorten((struct iovec *)iov,
                                                 nr_segs, count);
- written = generic_file_direct_IO(WRITE, inode,
+ written = generic_file_direct_IO(WRITE, file, inode,
                                         iov, pos, nr_segs);
                 if (written > 0) {

-- 

corporate: <cel at netapp dot com> personal: <chucklever at bigfoot dot com>

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Mon Oct 07 2002 - 22:00:47 EST