diff options
author | Badari Pulavarty <pbadari@us.ibm.com> | 2006-10-01 02:28:49 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-10-01 03:39:29 -0400 |
commit | eed4e51fb60c3863c134a5e9f6006b29805ead97 (patch) | |
tree | edb0a80d75c454ad77001f3bd1a87933cbcff53f /include/linux | |
parent | 543ade1fc901db4c3dbe9fb27241fb977f1f3eea (diff) |
[PATCH] Add vector AIO support
This work is initially done by Zach Brown to add support for vectored aio.
These are the core changes for AIO to support
IOCB_CMD_PREADV/IOCB_CMD_PWRITEV.
[akpm@osdl.org: huge build fix]
Signed-off-by: Zach Brown <zach.brown@oracle.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Badari Pulavarty <pbadari@us.ibm.com>
Acked-by: Benjamin LaHaise <bcrl@kvack.org>
Acked-by: James Morris <jmorris@namei.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'include/linux')
-rw-r--r-- | include/linux/aio.h | 4 | ||||
-rw-r--r-- | include/linux/aio_abi.h | 2 | ||||
-rw-r--r-- | include/linux/fs.h | 5 |
3 files changed, 11 insertions, 0 deletions
diff --git a/include/linux/aio.h b/include/linux/aio.h index 58349e58b749..5722568fc71e 100644 --- a/include/linux/aio.h +++ b/include/linux/aio.h | |||
@@ -7,6 +7,7 @@ | |||
7 | #include <linux/uio.h> | 7 | #include <linux/uio.h> |
8 | 8 | ||
9 | #include <asm/atomic.h> | 9 | #include <asm/atomic.h> |
10 | #include <linux/uio.h> | ||
10 | 11 | ||
11 | #define AIO_MAXSEGS 4 | 12 | #define AIO_MAXSEGS 4 |
12 | #define AIO_KIOGRP_NR_ATOMIC 8 | 13 | #define AIO_KIOGRP_NR_ATOMIC 8 |
@@ -114,6 +115,9 @@ struct kiocb { | |||
114 | long ki_kicked; /* just for testing */ | 115 | long ki_kicked; /* just for testing */ |
115 | long ki_queued; /* just for testing */ | 116 | long ki_queued; /* just for testing */ |
116 | struct iovec ki_inline_vec; /* inline vector */ | 117 | struct iovec ki_inline_vec; /* inline vector */ |
118 | struct iovec *ki_iovec; | ||
119 | unsigned long ki_nr_segs; | ||
120 | unsigned long ki_cur_seg; | ||
117 | 121 | ||
118 | struct list_head ki_list; /* the aio core uses this | 122 | struct list_head ki_list; /* the aio core uses this |
119 | * for cancellation */ | 123 | * for cancellation */ |
diff --git a/include/linux/aio_abi.h b/include/linux/aio_abi.h index 30fdcc89d142..3466b1d0ffd2 100644 --- a/include/linux/aio_abi.h +++ b/include/linux/aio_abi.h | |||
@@ -41,6 +41,8 @@ enum { | |||
41 | * IOCB_CMD_POLL = 5, | 41 | * IOCB_CMD_POLL = 5, |
42 | */ | 42 | */ |
43 | IOCB_CMD_NOOP = 6, | 43 | IOCB_CMD_NOOP = 6, |
44 | IOCB_CMD_PREADV = 7, | ||
45 | IOCB_CMD_PWRITEV = 8, | ||
44 | }; | 46 | }; |
45 | 47 | ||
46 | /* read() from /dev/aio returns these structures. */ | 48 | /* read() from /dev/aio returns these structures. */ |
diff --git a/include/linux/fs.h b/include/linux/fs.h index 011129f8803e..4bb70871873f 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
@@ -1150,6 +1150,11 @@ struct inode_operations { | |||
1150 | 1150 | ||
1151 | struct seq_file; | 1151 | struct seq_file; |
1152 | 1152 | ||
1153 | ssize_t rw_copy_check_uvector(int type, const struct iovec __user * uvector, | ||
1154 | unsigned long nr_segs, unsigned long fast_segs, | ||
1155 | struct iovec *fast_pointer, | ||
1156 | struct iovec **ret_pointer); | ||
1157 | |||
1153 | extern ssize_t vfs_read(struct file *, char __user *, size_t, loff_t *); | 1158 | extern ssize_t vfs_read(struct file *, char __user *, size_t, loff_t *); |
1154 | extern ssize_t vfs_write(struct file *, const char __user *, size_t, loff_t *); | 1159 | extern ssize_t vfs_write(struct file *, const char __user *, size_t, loff_t *); |
1155 | extern ssize_t vfs_readv(struct file *, const struct iovec __user *, | 1160 | extern ssize_t vfs_readv(struct file *, const struct iovec __user *, |