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
};
next 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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).