diff options
author | Fred Isaman <iisaman@netapp.com> | 2012-04-20 14:47:44 -0400 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2012-04-27 14:10:37 -0400 |
commit | cd841605f7a721878d8a2d1362484723d8abf569 (patch) | |
tree | b5c37db575cd545a183577249909e042fe38d646 /fs/nfs/internal.h | |
parent | b5542849764aa56fd3f05c0041195b637b9d2ac2 (diff) |
NFS: create common nfs_pgio_header for both read and write
In order to avoid duplicating all the data in nfs_read_data whenever we
split it up into multiple RPC calls (either due to a short read result
or due to rsize < PAGE_SIZE), we split out the bits that are the same
per RPC call into a separate "header" structure.
The goal this patch moves towards is to have a single header
refcounted by several rpc_data structures. Thus, want to always refer
from rpc_data to the header, and not the other way. This patch comes
close to that ideal, but the directio code currently needs some
special casing, isolated in the nfs_direct_[read_write]hdr_release()
functions. This will be dealt with in a future patch.
Signed-off-by: Fred Isaman <iisaman@netapp.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'fs/nfs/internal.h')
-rw-r--r-- | fs/nfs/internal.h | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/fs/nfs/internal.h b/fs/nfs/internal.h index 650127fd24bb..7dc9be1a6e1a 100644 --- a/fs/nfs/internal.h +++ b/fs/nfs/internal.h | |||
@@ -296,6 +296,8 @@ extern int nfs4_get_rootfh(struct nfs_server *server, struct nfs_fh *mntfh); | |||
296 | 296 | ||
297 | struct nfs_pageio_descriptor; | 297 | struct nfs_pageio_descriptor; |
298 | /* read.c */ | 298 | /* read.c */ |
299 | extern struct nfs_read_header *nfs_readhdr_alloc(unsigned int npages); | ||
300 | extern void nfs_readhdr_free(struct nfs_pgio_header *hdr); | ||
299 | extern int nfs_initiate_read(struct rpc_clnt *clnt, | 301 | extern int nfs_initiate_read(struct rpc_clnt *clnt, |
300 | struct nfs_read_data *data, | 302 | struct nfs_read_data *data, |
301 | const struct rpc_call_ops *call_ops); | 303 | const struct rpc_call_ops *call_ops); |
@@ -309,6 +311,8 @@ extern void nfs_pageio_reset_read_mds(struct nfs_pageio_descriptor *pgio); | |||
309 | extern void nfs_readdata_release(struct nfs_read_data *rdata); | 311 | extern void nfs_readdata_release(struct nfs_read_data *rdata); |
310 | 312 | ||
311 | /* write.c */ | 313 | /* write.c */ |
314 | extern struct nfs_write_header *nfs_writehdr_alloc(unsigned int npages); | ||
315 | extern void nfs_writehdr_free(struct nfs_pgio_header *hdr); | ||
312 | extern int nfs_generic_flush(struct nfs_pageio_descriptor *desc, | 316 | extern int nfs_generic_flush(struct nfs_pageio_descriptor *desc, |
313 | struct list_head *head); | 317 | struct list_head *head); |
314 | extern void nfs_pageio_init_write_mds(struct nfs_pageio_descriptor *pgio, | 318 | extern void nfs_pageio_init_write_mds(struct nfs_pageio_descriptor *pgio, |