I noticed that much of the read and write code was almost identical, with only minor differences in argument types and names. These patches seek to unify these two codepaths wherever possible in order to make future changes easier. Table of contents: Patches 01 - 05: Set up common data structures. Patches 06 - 10: Set up a shared rpc_call_ops struct. Patches 11 - 15: Set up a shared nfs_pageio_ops struct. Some of the commit setup was moved into common code, but I'm willing to move this back into write.c if this looks to be a problem. Future work: I have rough pNFS patches to combine the read and write paths in pnfs.c. They apply on top of Dros' multiple requests work and should get more testing before I submit. Testing: I tested every version of NFS using the cthon and xfs tests without hitting anything new. Any extra testing would be great seeing how the read and write paths are vitally important. Changes in v2: Reorder data fields in the earlier patches to keep read-only and write-only variables together. Questions? Comments? Thoughts? Anna Anna Schumaker (17): NFS: Create a common argument structure for reads and writes NFS: Create a common results structure for reads and writes NFS: Create a common read and write data struct NFS: Create a common read and write header struct NFS: Move the write verifier into the nfs_pgio_header NFS: Create a common pgio_alloc and pgio_release function NFS: Create a common rw_header_alloc and rw_header_free function NFS: Create a common pgio_rpc_prepare function NFS: Create a common nfs_pgio_result_common function NFS: Create a common rpc_call_ops struct NFS: Create a common rpcsetup function for reads and writes NFS: Create a common pgio_error function NFS: Create a generic_pgio function NFS: Create a common initiate_pgio() function NFS: Create a common multiple_pgios() function NFS: Create a common generic_pg_pgios() NFS: Create a common nfs_pageio_ops struct fs/nfs/Makefile | 2 +- fs/nfs/blocklayout/blocklayout.c | 22 +- fs/nfs/direct.c | 4 +- fs/nfs/internal.h | 31 ++- fs/nfs/nfs2xdr.c | 14 +- fs/nfs/nfs3proc.c | 19 +- fs/nfs/nfs3xdr.c | 16 +- fs/nfs/nfs4_fs.h | 4 +- fs/nfs/nfs4filelayout.c | 40 ++-- fs/nfs/nfs4proc.c | 52 ++--- fs/nfs/nfs4trace.h | 8 +- fs/nfs/nfs4xdr.c | 19 +- fs/nfs/objlayout/objio_osd.c | 6 +- fs/nfs/objlayout/objlayout.c | 16 +- fs/nfs/objlayout/objlayout.h | 8 +- fs/nfs/pageio.c | 386 +++++++++++++++++++++++++++++++++++ fs/nfs/pagelist.c | 2 + fs/nfs/pnfs.c | 46 ++--- fs/nfs/pnfs.h | 10 +- fs/nfs/proc.c | 19 +- fs/nfs/read.c | 348 +++----------------------------- fs/nfs/write.c | 425 +++++---------------------------------- include/linux/nfs_fs.h | 3 +- include/linux/nfs_page.h | 13 ++ include/linux/nfs_xdr.h | 95 +++------ 25 files changed, 662 insertions(+), 946 deletions(-) create mode 100644 fs/nfs/pageio.c -- 1.9.2 -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html