All of lore.kernel.org
 help / color / mirror / Atom feed
From: Christoph Hellwig <hch@lst.de>
To: akpm@osdl.org
Cc: linux-fsdevel@vger.kernel.org
Subject: [PATCH] add support for vectored and async I/O to all simple filesystems
Date: Tue, 1 Nov 2005 03:36:56 +0100	[thread overview]
Message-ID: <20051101023656.GA23724@lst.de> (raw)

Every filesystem using generic_file_read/generic_file_write directly
can easily support vectored and async (well at least the API, it's not
async quite yet in mainline) I/O.  This patch adds the proper vectors
to all filesystems and switches them to do_sync_read/do_sync_write.
This we we can get rid of plain generic_file_read/generic_file_write
soon and remove one of the many variants of those functions.  Long
term I plan to unify aio and vectored support into a single operation
so we can cut down filemap.c to a sane set of these routines.


Signed-off-by: Christoph Hellwig <hch@lst.de>

Index: linux-2.6/drivers/char/raw.c
===================================================================
--- linux-2.6.orig/drivers/char/raw.c	2005-10-31 15:44:42.000000000 +0100
+++ linux-2.6/drivers/char/raw.c	2005-10-31 15:46:29.000000000 +0100
@@ -262,7 +262,7 @@
 
 
 static struct file_operations raw_fops = {
-	.read	=	generic_file_read,
+	.read	=	do_sync_read,
 	.aio_read = 	generic_file_aio_read,
 	.write	=	raw_file_write,
 	.aio_write = 	raw_file_aio_write,
Index: linux-2.6/fs/adfs/file.c
===================================================================
--- linux-2.6.orig/fs/adfs/file.c	2005-10-31 15:44:42.000000000 +0100
+++ linux-2.6/fs/adfs/file.c	2005-10-31 15:46:29.000000000 +0100
@@ -31,11 +31,16 @@
 
 struct file_operations adfs_file_operations = {
 	.llseek		= generic_file_llseek,
-	.read		= generic_file_read,
+	.read		= do_sync_read,
+	.write		= do_sync_write,
+	.readv		= generic_file_readv,
+	.writev		= generic_file_writev,
+	.aio_read	= generic_file_aio_read,
+	.aio_write	= generic_file_aio_write,
 	.mmap		= generic_file_mmap,
 	.fsync		= file_fsync,
-	.write		= generic_file_write,
 	.sendfile	= generic_file_sendfile,
+
 };
 
 struct inode_operations adfs_file_inode_operations = {
Index: linux-2.6/fs/bfs/file.c
===================================================================
--- linux-2.6.orig/fs/bfs/file.c	2005-10-31 15:44:42.000000000 +0100
+++ linux-2.6/fs/bfs/file.c	2005-10-31 15:46:29.000000000 +0100
@@ -19,8 +19,12 @@
 
 struct file_operations bfs_file_operations = {
 	.llseek 	= generic_file_llseek,
-	.read		= generic_file_read,
-	.write		= generic_file_write,
+	.read		= do_sync_read,
+	.write		= do_sync_write,
+	.readv		= generic_file_readv,
+	.writev		= generic_file_writev,
+	.aio_read	= generic_file_aio_read,
+	.aio_write	= generic_file_aio_write,
 	.mmap		= generic_file_mmap,
 	.sendfile	= generic_file_sendfile,
 };
Index: linux-2.6/fs/ext2/file.c
===================================================================
--- linux-2.6.orig/fs/ext2/file.c	2005-10-31 15:44:42.000000000 +0100
+++ linux-2.6/fs/ext2/file.c	2005-10-31 15:46:29.000000000 +0100
@@ -41,8 +41,8 @@
  */
 struct file_operations ext2_file_operations = {
 	.llseek		= generic_file_llseek,
-	.read		= generic_file_read,
-	.write		= generic_file_write,
+	.read		= do_sync_read,
+	.write		= do_sync_write,
 	.aio_read	= generic_file_aio_read,
 	.aio_write	= generic_file_aio_write,
 	.ioctl		= ext2_ioctl,
Index: linux-2.6/fs/fuse/file.c
===================================================================
--- linux-2.6.orig/fs/fuse/file.c	2005-10-31 15:44:43.000000000 +0100
+++ linux-2.6/fs/fuse/file.c	2005-10-31 15:46:29.000000000 +0100
@@ -523,8 +523,12 @@
 
 static struct file_operations fuse_file_operations = {
 	.llseek		= generic_file_llseek,
-	.read		= generic_file_read,
-	.write		= generic_file_write,
+	.read		= do_sync_read,
+	.write		= do_sync_write,
+	.readv		= generic_file_readv,
+	.writev		= generic_file_writev,
+	.aio_read	= generic_file_aio_read,
+	.aio_write	= generic_file_aio_write,
 	.mmap		= fuse_file_mmap,
 	.open		= fuse_open,
 	.flush		= fuse_flush,
Index: linux-2.6/fs/hfs/inode.c
===================================================================
--- linux-2.6.orig/fs/hfs/inode.c	2005-10-31 15:44:43.000000000 +0100
+++ linux-2.6/fs/hfs/inode.c	2005-10-31 15:46:29.000000000 +0100
@@ -616,8 +616,12 @@
 
 static struct file_operations hfs_file_operations = {
 	.llseek		= generic_file_llseek,
-	.read		= generic_file_read,
-	.write		= generic_file_write,
+	.read		= do_sync_read,
+	.write		= do_sync_write,
+	.readv		= generic_file_readv,
+	.writev		= generic_file_writev,
+	.aio_read	= generic_file_aio_read,
+	.aio_write	= generic_file_aio_write,
 	.mmap		= generic_file_mmap,
 	.sendfile	= generic_file_sendfile,
 	.fsync		= file_fsync,
Index: linux-2.6/fs/hfsplus/inode.c
===================================================================
--- linux-2.6.orig/fs/hfsplus/inode.c	2005-10-31 15:44:43.000000000 +0100
+++ linux-2.6/fs/hfsplus/inode.c	2005-10-31 15:46:29.000000000 +0100
@@ -302,8 +302,12 @@
 
 static struct file_operations hfsplus_file_operations = {
 	.llseek 	= generic_file_llseek,
-	.read		= generic_file_read,
-	.write		= generic_file_write,
+	.read		= do_sync_read,
+	.write		= do_sync_write,
+	.readv		= generic_file_readv,
+	.writev		= generic_file_writev,
+	.aio_read	= generic_file_aio_read,
+	.aio_write	= generic_file_aio_write,
 	.mmap		= generic_file_mmap,
 	.sendfile	= generic_file_sendfile,
 	.fsync		= file_fsync,
Index: linux-2.6/fs/hostfs/hostfs_kern.c
===================================================================
--- linux-2.6.orig/fs/hostfs/hostfs_kern.c	2005-10-31 15:44:43.000000000 +0100
+++ linux-2.6/fs/hostfs/hostfs_kern.c	2005-10-31 15:46:29.000000000 +0100
@@ -388,13 +388,13 @@
 
 static struct file_operations hostfs_file_fops = {
 	.llseek		= generic_file_llseek,
-	.read		= generic_file_read,
+	.read		= do_sync_read,
 	.sendfile	= generic_file_sendfile,
 	.aio_read	= generic_file_aio_read,
 	.aio_write	= generic_file_aio_write,
 	.readv		= generic_file_readv,
 	.writev		= generic_file_writev,
-	.write		= generic_file_write,
+	.write		= do_sync_write,
 	.mmap		= generic_file_mmap,
 	.open		= hostfs_file_open,
 	.release	= NULL,
Index: linux-2.6/fs/jffs/inode-v23.c
===================================================================
--- linux-2.6.orig/fs/jffs/inode-v23.c	2005-10-31 15:44:43.000000000 +0100
+++ linux-2.6/fs/jffs/inode-v23.c	2005-10-31 15:46:29.000000000 +0100
@@ -1633,8 +1633,12 @@
 {
 	.open		= generic_file_open,
 	.llseek		= generic_file_llseek,
-	.read		= generic_file_read,
-	.write		= generic_file_write,
+	.read		= do_sync_read,
+	.write		= do_sync_write,
+	.readv		= generic_file_readv,
+	.writev		= generic_file_writev,
+	.aio_read	= generic_file_aio_read,
+	.aio_write	= generic_file_aio_write,
 	.ioctl		= jffs_ioctl,
 	.mmap		= generic_file_readonly_mmap,
 	.fsync		= jffs_fsync,
Index: linux-2.6/fs/jffs2/file.c
===================================================================
--- linux-2.6.orig/fs/jffs2/file.c	2005-10-31 15:44:43.000000000 +0100
+++ linux-2.6/fs/jffs2/file.c	2005-10-31 15:46:29.000000000 +0100
@@ -42,8 +42,12 @@
 {
 	.llseek =	generic_file_llseek,
 	.open =		generic_file_open,
-	.read =		generic_file_read,
-	.write =	generic_file_write,
+	.read =		do_sync_read,
+	.write =	do_sync_write,
+	.readv =	generic_file_readv,
+	.writev =	generic_file_writev,
+	.aio_read =	generic_file_aio_read,
+	.aio_write =	generic_file_aio_write,
 	.ioctl =	jffs2_ioctl,
 	.mmap =		generic_file_readonly_mmap,
 	.fsync =	jffs2_fsync,
Index: linux-2.6/fs/jfs/file.c
===================================================================
--- linux-2.6.orig/fs/jfs/file.c	2005-10-31 15:44:43.000000000 +0100
+++ linux-2.6/fs/jfs/file.c	2005-10-31 15:46:29.000000000 +0100
@@ -103,8 +103,8 @@
 struct file_operations jfs_file_operations = {
 	.open		= jfs_open,
 	.llseek		= generic_file_llseek,
-	.write		= generic_file_write,
-	.read		= generic_file_read,
+	.write		= do_sync_write,
+	.read		= do_sync_read,
 	.aio_read	= generic_file_aio_read,
 	.aio_write	= generic_file_aio_write,
 	.mmap		= generic_file_mmap,
Index: linux-2.6/fs/minix/file.c
===================================================================
--- linux-2.6.orig/fs/minix/file.c	2005-10-31 15:44:43.000000000 +0100
+++ linux-2.6/fs/minix/file.c	2005-10-31 15:46:29.000000000 +0100
@@ -17,8 +17,12 @@
 
 struct file_operations minix_file_operations = {
 	.llseek		= generic_file_llseek,
-	.read		= generic_file_read,
-	.write		= generic_file_write,
+	.read		= do_sync_read,
+	.write		= do_sync_write,
+	.readv		= generic_file_readv,
+	.writev		= generic_file_writev,
+	.aio_read	= generic_file_aio_read,
+	.aio_write	= generic_file_aio_write,
 	.mmap		= generic_file_mmap,
 	.fsync		= minix_sync_file,
 	.sendfile	= generic_file_sendfile,
Index: linux-2.6/fs/ramfs/inode.c
===================================================================
--- linux-2.6.orig/fs/ramfs/inode.c	2005-10-31 15:44:43.000000000 +0100
+++ linux-2.6/fs/ramfs/inode.c	2005-10-31 15:46:29.000000000 +0100
@@ -149,8 +149,12 @@
 };
 
 struct file_operations ramfs_file_operations = {
-	.read		= generic_file_read,
-	.write		= generic_file_write,
+	.read		= do_sync_read,
+	.write		= do_sync_write,
+	.readv		= generic_file_readv,
+	.writev		= generic_file_writev,
+	.aio_read	= generic_file_aio_read,
+	.aio_write	= generic_file_aio_write,
 	.mmap		= generic_file_mmap,
 	.fsync		= simple_sync_file,
 	.sendfile	= generic_file_sendfile,
Index: linux-2.6/fs/read_write.c
===================================================================
--- linux-2.6.orig/fs/read_write.c	2005-10-31 15:44:43.000000000 +0100
+++ linux-2.6/fs/read_write.c	2005-10-31 15:46:29.000000000 +0100
@@ -20,7 +20,9 @@
 
 struct file_operations generic_ro_fops = {
 	.llseek		= generic_file_llseek,
-	.read		= generic_file_read,
+	.read		= do_sync_read,
+	.readv		= generic_file_readv,
+	.aio_read	= generic_file_aio_read,
 	.mmap		= generic_file_readonly_mmap,
 	.sendfile	= generic_file_sendfile,
 };
Index: linux-2.6/fs/sysv/file.c
===================================================================
--- linux-2.6.orig/fs/sysv/file.c	2005-10-31 15:44:43.000000000 +0100
+++ linux-2.6/fs/sysv/file.c	2005-10-31 15:46:29.000000000 +0100
@@ -21,8 +21,12 @@
  */
 struct file_operations sysv_file_operations = {
 	.llseek		= generic_file_llseek,
-	.read		= generic_file_read,
-	.write		= generic_file_write,
+	.read		= do_sync_read,
+	.write		= do_sync_write,
+	.readv		= generic_file_readv,
+	.writev		= generic_file_writev,
+	.aio_read	= generic_file_aio_read,
+	.aio_write	= generic_file_aio_write,
 	.mmap		= generic_file_mmap,
 	.fsync		= sysv_sync_file,
 	.sendfile	= generic_file_sendfile,
Index: linux-2.6/fs/ufs/file.c
===================================================================
--- linux-2.6.orig/fs/ufs/file.c	2005-10-31 15:44:43.000000000 +0100
+++ linux-2.6/fs/ufs/file.c	2005-10-31 15:46:29.000000000 +0100
@@ -43,8 +43,12 @@
  
 struct file_operations ufs_file_operations = {
 	.llseek		= generic_file_llseek,
-	.read		= generic_file_read,
-	.write		= generic_file_write,
+	.read		= do_sync_read,
+	.write		= do_sync_write,
+	.readv		= generic_file_readv,
+	.writev		= generic_file_writev,
+	.aio_read	= generic_file_aio_read,
+	.aio_write	= generic_file_aio_write,
 	.mmap		= generic_file_mmap,
 	.open           = generic_file_open,
 	.sendfile	= generic_file_sendfile,
Index: linux-2.6/fs/reiserfs/file.c
===================================================================
--- linux-2.6.orig/fs/reiserfs/file.c	2005-10-31 15:44:43.000000000 +0100
+++ linux-2.6/fs/reiserfs/file.c	2005-10-31 15:46:46.000000000 +0100
@@ -1541,22 +1541,18 @@
 	return res;
 }
 
-static ssize_t reiserfs_aio_write(struct kiocb *iocb, const char __user * buf,
-				  size_t count, loff_t pos)
-{
-	return generic_file_aio_write(iocb, buf, count, pos);
-}
-
 struct file_operations reiserfs_file_operations = {
-	.read = generic_file_read,
+	.read = do_sync_read,
 	.write = reiserfs_file_write,
+	.readv = generic_file_readv,
+	.writev = generic_file_writev,
 	.ioctl = reiserfs_ioctl,
 	.mmap = generic_file_mmap,
 	.release = reiserfs_file_release,
 	.fsync = reiserfs_sync_file,
 	.sendfile = generic_file_sendfile,
 	.aio_read = generic_file_aio_read,
-	.aio_write = reiserfs_aio_write,
+	.aio_write = generic_file_aio_write,
 };
 
 struct inode_operations reiserfs_file_inode_operations = {
Index: linux-2.6/fs/block_dev.c
===================================================================
--- linux-2.6.orig/fs/block_dev.c	2005-10-31 15:44:42.000000000 +0100
+++ linux-2.6/fs/block_dev.c	2005-10-31 15:47:23.000000000 +0100
@@ -796,7 +796,7 @@
 	.open		= blkdev_open,
 	.release	= blkdev_close,
 	.llseek		= block_llseek,
-	.read		= generic_file_read,
+	.read		= do_sync_read,
 	.write		= blkdev_file_write,
   	.aio_read	= generic_file_aio_read,
   	.aio_write	= blkdev_file_aio_write, 
Index: linux-2.6/fs/ntfs/file.c
===================================================================
--- linux-2.6.orig/fs/ntfs/file.c	2005-10-31 15:44:43.000000000 +0100
+++ linux-2.6/fs/ntfs/file.c	2005-10-31 15:47:52.000000000 +0100
@@ -2305,7 +2305,7 @@
 
 struct file_operations ntfs_file_ops = {
 	.llseek		= generic_file_llseek,	 /* Seek inside file. */
-	.read		= generic_file_read,	 /* Read from file. */
+	.read		= do_sync_read,		 /* Read from file. */
 	.aio_read	= generic_file_aio_read, /* Async read from file. */
 	.readv		= generic_file_readv,	 /* Read from file. */
 #ifdef NTFS_RW
Index: linux-2.6/fs/qnx4/file.c
===================================================================
--- linux-2.6.orig/fs/qnx4/file.c	2005-10-31 15:44:43.000000000 +0100
+++ linux-2.6/fs/qnx4/file.c	2005-10-31 15:48:59.000000000 +0100
@@ -25,11 +25,15 @@
 struct file_operations qnx4_file_operations =
 {
 	.llseek		= generic_file_llseek,
-	.read		= generic_file_read,
+	.read		= do_sync_read,
+	.readv		= generic_file_readv,
+	.aio_read	= generic_file_aio_read,
 	.mmap		= generic_file_mmap,
 	.sendfile	= generic_file_sendfile,
 #ifdef CONFIG_QNX4FS_RW
-	.write		= generic_file_write,
+	.write		= do_sync_write,
+	.writev		= generic_file_writev,
+	.aio_write	= generic_file_aio_write,
 	.fsync		= qnx4_sync_file,
 #endif
 };

             reply	other threads:[~2005-11-01  2:37 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-11-01  2:36 Christoph Hellwig [this message]
2005-11-01 10:28 ` [PATCH] add support for vectored and async I/O to all simple filesystems Miklos Szeredi
2005-11-01 15:27   ` Christoph Hellwig
2005-11-01 17:19     ` Miklos Szeredi
2005-11-07  5:00       ` Christoph Hellwig
2005-11-01 19:20 ` Jamie Lokier
2005-11-01 20:57   ` Benjamin LaHaise
2005-11-02 11:06     ` Jamie Lokier
2005-11-02 16:21       ` Benjamin LaHaise
2005-11-02 16:29         ` Matthew Wilcox
2005-11-02 16:45           ` Benjamin LaHaise
2005-11-02 20:31           ` Jamie Lokier
2005-11-02 21:04             ` Anton Altaparmakov
2005-11-02 23:36               ` Jamie Lokier
2005-11-05  0:18   ` Christoph Hellwig

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20051101023656.GA23724@lst.de \
    --to=hch@lst.de \
    --cc=akpm@osdl.org \
    --cc=linux-fsdevel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.