diff options
author | David Howells <dhowells@redhat.com> | 2017-01-05 10:38:34 +0000 |
---|---|---|
committer | David Howells <dhowells@redhat.com> | 2017-01-06 16:54:41 +0000 |
commit | 196ee9cd2d04728d0ec0038a2856b86142615b11 (patch) | |
tree | 4fd4e796d4f658787ca7e8dc88f8973622fba028 /fs/afs/internal.h | |
parent | c1878f7a89efbbe1ac0082d09b2928782a6ceba1 (diff) | |
download | blackbird-op-linux-196ee9cd2d04728d0ec0038a2856b86142615b11.tar.gz blackbird-op-linux-196ee9cd2d04728d0ec0038a2856b86142615b11.zip |
afs: Make afs_fs_fetch_data() take a list of pages
Make afs_fs_fetch_data() take a list of pages for bulk data transfer. This
will allow afs_readpages() to be made more efficient.
Signed-off-by: David Howells <dhowells@redhat.com>
Diffstat (limited to 'fs/afs/internal.h')
-rw-r--r-- | fs/afs/internal.h | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/fs/afs/internal.h b/fs/afs/internal.h index 535a38d2c1d0..6f7a9638ba1a 100644 --- a/fs/afs/internal.h +++ b/fs/afs/internal.h @@ -134,6 +134,22 @@ struct afs_call_type { }; /* + * Record of an outstanding read operation on a vnode. + */ +struct afs_read { + loff_t pos; /* Where to start reading */ + loff_t len; /* How much to read */ + loff_t actual_len; /* How much we're actually getting */ + atomic_t usage; + unsigned int remain; /* Amount remaining */ + unsigned int index; /* Which page we're reading into */ + unsigned int pg_offset; /* Offset in page we're at */ + unsigned int nr_pages; + void (*page_done)(struct afs_call *, struct afs_read *); + struct page *pages[]; +}; + +/* * record of an outstanding writeback on a vnode */ struct afs_writeback { @@ -494,6 +510,7 @@ extern const struct file_operations afs_file_operations; extern int afs_open(struct inode *, struct file *); extern int afs_release(struct inode *, struct file *); extern int afs_page_filler(void *, struct page *); +extern void afs_put_read(struct afs_read *); /* * flock.c @@ -513,7 +530,7 @@ extern int afs_fs_fetch_file_status(struct afs_server *, struct key *, extern int afs_fs_give_up_callbacks(struct afs_server *, const struct afs_wait_mode *); extern int afs_fs_fetch_data(struct afs_server *, struct key *, - struct afs_vnode *, off_t, size_t, struct page *, + struct afs_vnode *, struct afs_read *, const struct afs_wait_mode *); extern int afs_fs_create(struct afs_server *, struct key *, struct afs_vnode *, const char *, umode_t, @@ -699,7 +716,7 @@ extern void afs_vnode_finalise_status_update(struct afs_vnode *, extern int afs_vnode_fetch_status(struct afs_vnode *, struct afs_vnode *, struct key *); extern int afs_vnode_fetch_data(struct afs_vnode *, struct key *, - off_t, size_t, struct page *); + struct afs_read *); extern int afs_vnode_create(struct afs_vnode *, struct key *, const char *, umode_t, struct afs_fid *, struct afs_file_status *, struct afs_callback *, struct afs_server **); |