nfs: get rid of nfs_pgio_data, related cleanup
Subsystems (2)
cover nfs: get rid of nfs_pgio_data, related cleanup
I'd like to know what people think of this proposed cleanup - it is to be applied on top of the "pgio" branch at:
git://git.linux-nfs.org/projects/dros/linux-nfs.git
The basic idea is that we no longer need a separate nfs_pgio_data structure, because the nfs_pgio_header structure always has one - and only one.
I know this changes a lot of files, but I think now is the time to do this, as we have to test everything anyways due to my subpage work and Anna's pgio cleanup.
I should note that there is little chance we'll ever go back to having more than one nfs_pgio_data per nfs_pgio_header - since the nfs_page subpage splitting work allows us to describe arbitrary ranges at that level.
I think I can go a bit further by getting rid of the pgio_header refcnt. I'll look closer at this soon...
-dros
Weston Andros Adamson (3):
nfs: move nfs_pgio_data and remove nfs_rw_header
nfs: rename members of nfs_pgio_data
nfs: merge nfs_pgio_data into _header
fs/nfs/blocklayout/blocklayout.c | 99 +++++++++++---------- fs/nfs/direct.c | 8 +- fs/nfs/internal.h | 10 +-- fs/nfs/nfs3proc.c | 21 +++-- fs/nfs/nfs4_fs.h | 6 +- fs/nfs/nfs4filelayout.c | 169 +++++++++++++++++------------------ fs/nfs/nfs4proc.c | 105 +++++++++++----------- fs/nfs/nfs4trace.h | 28 +++--- fs/nfs/objlayout/objio_osd.c | 24 +++-- fs/nfs/objlayout/objlayout.c | 81 ++++++++--------- fs/nfs/objlayout/objlayout.h | 8 +- fs/nfs/pageio.c | 186 ++++++++++++++++----------------------- fs/nfs/pnfs.c | 96 ++++++++------------ fs/nfs/pnfs.h | 10 +-- fs/nfs/proc.c | 27 +++--- fs/nfs/read.c | 48 +++++----- fs/nfs/write.c | 65 +++++++------- include/linux/nfs_fs.h | 2 +- include/linux/nfs_page.h | 13 +-- include/linux/nfs_xdr.h | 31 +++---- 20 files changed, 489 insertions(+), 548 deletions(-)
Signature · 1 line
1.8.5.2 (Apple Git-48)
PATCH 1/3 nfs: move nfs_pgio_data and remove nfs_rw_header
nfs_rw_header was used to allocate an nfs_pgio_header along with an nfs_pgio_data, because a _header would need at least one _data.
Now there is only ever one nfs_pgio_data for each nfs_pgio_header -- move it to nfs_pgio_header and get rid of nfs_rw_header.
--- fs/nfs/direct.c | 8 ++--- fs/nfs/internal.h | 6 ++-- fs/nfs/pageio.c | 85 +++++++++++++++--------------------------------- fs/nfs/pnfs.c | 24 ++++++-------- fs/nfs/read.c | 6 ++-- fs/nfs/write.c | 10 +++--- include/linux/nfs_page.h | 4 +-- include/linux/nfs_xdr.h | 38 +++++++++------------- 8 files changed, 69 insertions(+), 112 deletions(-)
fs/nfs/direct.c +4 -4
@@ -148,8 +148,8 @@ static void nfs_direct_set_hdr_verf(struct nfs_direct_req *dreq, {struct nfs_writeverf *verfp; - verfp =nfs_direct_select_verf (dreq, hdr->data->ds_clp, - hdr->data->ds_idx); + verfp =nfs_direct_select_verf (dreq, hdr->data.ds_clp, + hdr->data.ds_idx);WARN_ON_ONCE (verfp->committed >=0 );memcpy (verfp, &hdr->verf,sizeof (struct nfs_writeverf ));WARN_ON_ONCE (verfp->committed <0 );
@@ -169,8 +169,8 @@ static int nfs_direct_set_or_cmp_hdr_verf(struct nfs_direct_req *dreq, {struct nfs_writeverf *verfp; - verfp =nfs_direct_select_verf (dreq, hdr->data->ds_clp, - hdr->data->ds_idx); + verfp =nfs_direct_select_verf (dreq, hdr->data.ds_clp, + hdr->data.ds_idx);if (verfp->committed <0 ) {nfs_direct_set_hdr_verf (dreq, hdr);return 0 ;
fs/nfs/internal.h +3 -3
@@ -397,9 +397,9 @@ struct nfs_pgio_completion_ops;/* pageio.c */ extern const struct nfs_pageio_ops nfs_pgio_rw_ops; -extern struct nfs_rw_header *nfs_rw_header_alloc (const struct nfs_rw_ops *); -extern void nfs_rw_header_free (struct nfs_pgio_header *); -extern void nfs_pgio_data_release (struct nfs_pgio_data *); +extern struct nfs_pgio_header *nfs_pgio_header_alloc (const struct nfs_rw_ops *); +extern void nfs_pgio_header_free (struct nfs_pgio_header *); +extern void nfs_pgio_data_destroy (struct nfs_pgio_data *);extern int nfs_generic_pgio (struct nfs_pageio_descriptor *,struct nfs_pgio_header *);extern int nfs_initiate_pgio (struct rpc_clnt *,struct nfs_pgio_data *,const struct rpc_call_ops *,int ,int );
fs/nfs/pageio.c +26 -59
158 lines not on this page · raw message
fs/nfs/pnfs.c +10 -14
@@ -1542,7 +1542,7 @@ pnfs_write_through_mds(struct nfs_pageio_descriptor *desc,nfs_pageio_reset_write_mds (desc); desc->pg_recoalesce =1 ; } -nfs_pgio_data_release (data); +nfs_pgio_data_destroy (data); } static enum pnfs_try_status
@@ -1571,7 +1571,7 @@ static void pnfs_do_write(struct nfs_pageio_descriptor *desc, struct nfs_pgio_header *hdr, int how) { - struct nfs_pgio_data *data = hdr->data; + struct nfs_pgio_data *data = &hdr->data;const struct rpc_call_ops *call_ops = desc->pg_rpc_callops;struct pnfs_layout_segment *lseg = desc->pg_lseg;enum pnfs_try_status trypnfs;
@@ -1586,25 +1586,23 @@ pnfs_do_write(struct nfs_pageio_descriptor *desc,static void pnfs_writehdr_free (struct nfs_pgio_header *hdr) {pnfs_put_lseg (hdr->lseg); -nfs_rw_header_free (hdr); +nfs_pgio_header_free (hdr); }EXPORT_SYMBOL_GPL (pnfs_writehdr_free);int pnfs_generic_pg_writepages (struct nfs_pageio_descriptor *desc) { -struct nfs_rw_header *whdr;struct nfs_pgio_header *hdr;int ret; - whdr =nfs_rw_header_alloc (desc->pg_rw_ops); -if (!whdr) { + hdr =nfs_pgio_header_alloc (desc->pg_rw_ops); +if (!hdr) { desc->pg_completion_ops->error_cleanup (&desc->pg_list);pnfs_put_lseg (desc->pg_lseg); desc->pg_lseg =NULL ;return -ENOMEM ; } - hdr = &whdr->header;nfs_pgheader_init (desc, hdr, pnfs_writehdr_free); hdr->lseg =pnfs_get_lseg (desc->pg_lseg);atomic_inc (&hdr->refcnt);
@@ -1692,7 +1690,7 @@ pnfs_read_through_mds(struct nfs_pageio_descriptor *desc,nfs_pageio_reset_read_mds (desc); desc->pg_recoalesce =1 ; } -nfs_pgio_data_release (data); +nfs_pgio_data_destroy (data); }/*
@@ -1723,7 +1721,7 @@ pnfs_try_to_read_data(struct nfs_pgio_data *rdata,static void pnfs_do_read (struct nfs_pageio_descriptor *desc,struct nfs_pgio_header *hdr) { -struct nfs_pgio_data *data = hdr->data; +struct nfs_pgio_data *data = &hdr->data;const struct rpc_call_ops *call_ops = desc->pg_rpc_callops;struct pnfs_layout_segment *lseg = desc->pg_lseg;enum pnfs_try_status trypnfs;
@@ -1738,26 +1736,24 @@ pnfs_do_read(struct nfs_pageio_descriptor *desc, struct nfs_pgio_header *hdr)static void pnfs_readhdr_free (struct nfs_pgio_header *hdr) {pnfs_put_lseg (hdr->lseg); -nfs_rw_header_free (hdr); +nfs_pgio_header_free (hdr); }EXPORT_SYMBOL_GPL (pnfs_readhdr_free);int pnfs_generic_pg_readpages (struct nfs_pageio_descriptor *desc) { -struct nfs_rw_header *rhdr;struct nfs_pgio_header *hdr;int ret; - rhdr =nfs_rw_header_alloc (desc->pg_rw_ops); -if (!rhdr) { + hdr =nfs_pgio_header_alloc (desc->pg_rw_ops); +if (!hdr) { desc->pg_completion_ops->error_cleanup (&desc->pg_list); ret = -ENOMEM ;pnfs_put_lseg (desc->pg_lseg); desc->pg_lseg =NULL ;return ret; } - hdr = &rhdr->header;nfs_pgheader_init (desc, hdr, pnfs_readhdr_free); hdr->lseg =pnfs_get_lseg (desc->pg_lseg);atomic_inc (&hdr->refcnt);
fs/nfs/read.c +3 -3
@@ -33,12 +33,12 @@ static const struct nfs_rw_ops nfs_rw_read_ops;static struct kmem_cache *nfs_rdata_cachep; -static struct nfs_rw_header *nfs_readhdr_alloc (void ) +static struct nfs_pgio_header *nfs_readhdr_alloc (void ) {return kmem_cache_zalloc (nfs_rdata_cachep,GFP_KERNEL ); } -static void nfs_readhdr_free (struct nfs_rw_header *rhdr) +static void nfs_readhdr_free (struct nfs_pgio_header *rhdr) {kmem_cache_free (nfs_rdata_cachep, rhdr); }
@@ -404,7 +404,7 @@ out:int __init nfs_init_readpagecache (void ) { nfs_rdata_cachep =kmem_cache_create ("nfs_read_data" , -sizeof (struct nfs_rw_header ), +sizeof (struct nfs_pgio_header ),0 ,SLAB_HWCACHE_ALIGN ,NULL );if (nfs_rdata_cachep ==NULL )
fs/nfs/write.c +5 -5
@@ -70,18 +70,18 @@ void nfs_commit_free(struct nfs_commit_data *p) }EXPORT_SYMBOL_GPL (nfs_commit_free); -static struct nfs_rw_header *nfs_writehdr_alloc (void ) +static struct nfs_pgio_header *nfs_writehdr_alloc (void ) { -struct nfs_rw_header *p =mempool_alloc (nfs_wdata_mempool,GFP_NOIO ); +struct nfs_pgio_header *p =mempool_alloc (nfs_wdata_mempool,GFP_NOIO );if (p)memset (p,0 ,sizeof (*p));return p; } -static void nfs_writehdr_free (struct nfs_rw_header *whdr) +static void nfs_writehdr_free (struct nfs_pgio_header *hdr) { -mempool_free (whdr, nfs_wdata_mempool); +mempool_free (hdr, nfs_wdata_mempool); }static void nfs_context_set_write_error (struct nfs_open_context *ctx,int error)
@@ -1653,7 +1653,7 @@ int nfs_migrate_page(struct address_space *mapping, struct page *newpage,int __init nfs_init_writepagecache (void ) { nfs_wdata_cachep =kmem_cache_create ("nfs_write_data" , -sizeof (struct nfs_rw_header ), +sizeof (struct nfs_pgio_header ),0 ,SLAB_HWCACHE_ALIGN ,NULL );if (nfs_wdata_cachep ==NULL )
include/linux/nfs_page.h +2 -2
@@ -62,8 +62,8 @@ struct nfs_pageio_ops {struct nfs_rw_ops {const fmode_t rw_mode; -struct nfs_rw_header *(*rw_alloc_header)(void ); -void (*rw_free_header)(struct nfs_rw_header *); +struct nfs_pgio_header *(*rw_alloc_header)(void ); +void (*rw_free_header)(struct nfs_pgio_header *);void (*rw_release)(struct nfs_pgio_data *);int (*rw_result)(struct rpc_task *,struct nfs_pgio_data *,struct inode *);void (*rw_result_common)(struct rpc_task *,struct nfs_pgio_data *);
include/linux/nfs_xdr.h +16 -22
@@ -1256,13 +1256,27 @@ enum { NFS_IOHDR_NEED_RESCHED, }; -struct nfs_pgio_data ; +struct nfs_pgio_data { +struct nfs_pgio_header *header; +struct list_head list; +struct rpc_task task; +struct nfs_fattr fattr; +struct nfs_writeverf verf;/* Used for writes */ +struct nfs_pgio_args args;/* argument struct */ +struct nfs_pgio_res res;/* result struct */ +unsigned long timestamp;/* For lease renewal */ +int (*pgio_done_cb)(struct rpc_task *task,struct nfs_pgio_data *data); +__u64 mds_offset;/* Filelayout dense stripe */ +struct nfs_page_array pages; +struct nfs_client *ds_clp;/* pNFS data server */ +int ds_idx;/* ds index if ds_clp is set */ +};struct nfs_pgio_header {struct inode *inode;struct rpc_cred *cred;struct list_head pages; -struct nfs_pgio_data *data; +struct nfs_pgio_data data;atomic_t refcnt;struct nfs_page *req;struct nfs_writeverf verf;/* Used for writes */
@@ -1282,26 +1296,6 @@ struct nfs_pgio_header {unsigned long flags; }; -struct nfs_pgio_data { -struct nfs_pgio_header *header; -struct rpc_task task; -struct nfs_fattr fattr; -struct nfs_writeverf verf;/* Used for writes */ -struct nfs_pgio_args args;/* argument struct */ -struct nfs_pgio_res res;/* result struct */ -unsigned long timestamp;/* For lease renewal */ -int (*pgio_done_cb) (struct rpc_task *task,struct nfs_pgio_data *data); -__u64 mds_offset;/* Filelayout dense stripe */ -struct nfs_page_array pages; -struct nfs_client *ds_clp;/* pNFS data server */ -int ds_idx;/* ds index if ds_clp is set */ -}; - -struct nfs_rw_header { -struct nfs_pgio_header header; -struct nfs_pgio_data rpc_data; -}; -struct nfs_mds_commit_info {atomic_t rpcs_out;unsigned long ncommit;
Signature · 1 line
1.8.5.2 (Apple Git-48)
PATCH 2/3 nfs: rename members of nfs_pgio_data
In reply to Weston Andros AdamsonRename "verf" to "rpc_verf" and "pages" to "page_array" to prepare for merge of nfs_pgio_data and nfs_pgio_header.
--- fs/nfs/blocklayout/blocklayout.c | 15 +++++++++------ fs/nfs/objlayout/objlayout.c | 4 ++-- fs/nfs/pageio.c | 10 +++++----- fs/nfs/write.c | 4 ++-- include/linux/nfs_xdr.h | 4 ++-- 5 files changed, 20 insertions(+), 17 deletions(-)
fs/nfs/blocklayout/blocklayout.c +9 -6
@@ -258,7 +258,8 @@ bl_read_pagelist(struct nfs_pgio_data *rdata)const bool is_dio = (header->dreq !=NULL );dprintk ("%s enter nr_pages %u offset %lld count %u\n" , __func__, - rdata->pages.npages, f_offset, (unsigned int )rdata->args.count); + rdata->page_array.npages, f_offset, + (unsigned int )rdata->args.count); par =alloc_parallel (rdata);if (!par)
@@ -268,7 +269,7 @@ bl_read_pagelist(struct nfs_pgio_data *rdata) isect = (sector_t) (f_offset >>SECTOR_SHIFT );/* Code assumes extents are page-aligned */ -for (i = pg_index; i < rdata->pages.npages; i++) { +for (i = pg_index; i < rdata->page_array.npages; i++) {if (!extent_length) {/* We've used up the previous extent */ bl_put_extent (be);
@@ -317,7 +318,8 @@ bl_read_pagelist(struct nfs_pgio_data *rdata)struct pnfs_block_extent *be_read; be_read = (hole && cow_read) ? cow_read : be; - bio = do_add_page_to_bio(bio, rdata->pages.npages - i, + bio = do_add_page_to_bio(bio, + rdata->page_array.npages - i, READ, isect, pages[i], be_read, bl_end_io_read, par,
@@ -699,7 +701,7 @@ bl_write_pagelist(struct nfs_pgio_data *wdata, int sync)dprintk ("pnfsblock nonblock aligned DIO writes. Resend MDS\n" ); goto out_mds; } -/* At this point, wdata->pages is a (sequential) list of nfs_pages. +/* At this point, wdata->page_aray is a (sequential) list of nfs_pages. * We want to write each, and if there is an error set pnfs_error * to have it redone using nfs. */
@@ -791,7 +793,7 @@ next_page:/* Middle pages */ pg_index = wdata->args.pgbase >>PAGE_CACHE_SHIFT ; -for (i = pg_index; i < wdata->pages.npages; i++) { +for (i = pg_index; i < wdata->page_array.npages; i++) {if (!extent_length) {/* We've used up the previous extent */ bl_put_extent (be);
@@ -862,7 +864,8 @@ next_page: } - bio =do_add_page_to_bio (bio, wdata->pages.npages - i,WRITE , + bio =do_add_page_to_bio (bio, wdata->page_array.npages - i, +WRITE , isect, pages[i], be, bl_end_io_write, par, pg_offset, pg_len);
fs/nfs/objlayout/objlayout.c +2 -2
@@ -329,7 +329,7 @@ objlayout_write_done(struct objlayout_io_res *oir, ssize_t status, bool sync) oir->status = wdata->task.tk_status = status;if (status >=0 ) { wdata->res.count = status; - wdata->verf.committed = oir->committed; + wdata->rpc_verf.committed = oir->committed; }else { wdata->header->pnfs_error = status; }
@@ -337,7 +337,7 @@ objlayout_write_done(struct objlayout_io_res *oir, ssize_t status, bool sync)/* must not use oir after this point */ dprintk ("%s: Return status %zd committed %d sync=%d\n" , __func__, - status, wdata->verf.committed, sync); + status, wdata->rpc_verf.committed, sync);if (sync)pnfs_ld_write_done (wdata);
fs/nfs/pageio.c +5 -5
@@ -53,8 +53,8 @@ void nfs_pgio_data_destroy(struct nfs_pgio_data *data)struct nfs_pgio_header *hdr = data->header;put_nfs_open_context (data->args.context); -if (data->pages.pagevec != data->pages.page_array) -kfree (data->pages.pagevec); +if (data->page_array.pagevec != data->page_array.page_array) +kfree (data->page_array.pagevec);if (atomic_dec_and_test (&hdr->refcnt)) hdr->completion_ops->completion (hdr); }
@@ -74,7 +74,7 @@ static void nfs_pgio_rpcsetup(struct nfs_pgio_data *data,/* pnfs_set_layoutcommit needs this */ data->mds_offset = data->args.offset; data->args.pgbase = req->wb_pgbase + offset; - data->args.pages = data->pages.pagevec; + data->args.pages = data->page_array.pagevec; data->args.count = count; data->args.context =get_nfs_open_context (req->wb_context); data->args.lock_context = req->wb_lock_context;
@@ -92,7 +92,7 @@ static void nfs_pgio_rpcsetup(struct nfs_pgio_data *data, data->res.fattr = &data->fattr; data->res.count = count; data->res.eof =0 ; - data->res.verf = &data->verf; + data->res.verf = &data->rpc_verf;nfs_fattr_init (&data->fattr); }
@@ -184,7 +184,7 @@ int nfs_generic_pgio(struct nfs_pageio_descriptor *desc, data = &hdr->data;nfs_init_cinfo (&cinfo, desc->pg_inode, desc->pg_dreq); - pages = data->pages.pagevec; + pages = data->page_array.pagevec;while (!list_empty (head)) { req =nfs_list_entry (head->next);nfs_list_remove_request (req);
fs/nfs/write.c +2 -2
@@ -1093,8 +1093,8 @@ static void nfs_writeback_release_common(struct nfs_pgio_data *data)if (test_bit (NFS_IOHDR_NEED_RESCHED , &hdr->flags)) ;/* Do nothing */ else if (!test_and_set_bit (NFS_IOHDR_NEED_COMMIT , &hdr->flags)) -memcpy (&hdr->verf, &data->verf,sizeof (hdr->verf)); -else if (memcmp (&hdr->verf, &data->verf,sizeof (hdr->verf))) +memcpy (&hdr->verf, &data->rpc_verf,sizeof (hdr->verf)); +else if (memcmp (&hdr->verf, &data->rpc_verf,sizeof (hdr->verf)))set_bit (NFS_IOHDR_NEED_RESCHED , &hdr->flags);spin_unlock (&hdr->lock); }
include/linux/nfs_xdr.h +2 -2
@@ -1261,13 +1261,13 @@ struct nfs_pgio_data {struct list_head list;struct rpc_task task;struct nfs_fattr fattr; -struct nfs_writeverf verf;/* Used for writes */ +struct nfs_writeverf rpc_verf;/* Used for writes */ struct nfs_pgio_args args;/* argument struct */ struct nfs_pgio_res res;/* result struct */ unsigned long timestamp;/* For lease renewal */ int (*pgio_done_cb)(struct rpc_task *task,struct nfs_pgio_data *data);__u64 mds_offset;/* Filelayout dense stripe */ -struct nfs_page_array pages; +struct nfs_page_array page_array;struct nfs_client *ds_clp;/* pNFS data server */ int ds_idx;/* ds index if ds_clp is set */ };
Signature · 1 line
1.8.5.2 (Apple Git-48)
Re: [PATCH 2/3] nfs: rename members of nfs_pgio_data
include/linux/nfs_xdr.h struct nfs_pgio_data { · line 1264
Quoted 10 lines · Weston Andros Adamson
include/linux/nfs_xdr.h +1
-1@@ -1261,13 +1261,13 @@ struct nfs_pgio_data {struct list_head list;struct rpc_task task;struct nfs_fattr fattr; -struct nfs_writeverf verf;/* Used for writes */ +struct nfs_writeverf rpc_verf;/* Used for writes */
Can we just make this “writeverf"? It isn’t really an rpc object, so the ‘rpc_’ prefix seems a little misleading.
Quoted 13 lines
include/linux/nfs_xdr.h +1
-1struct nfs_pgio_args args;/* argument struct */ struct nfs_pgio_res res;/* result struct */ unsigned long timestamp;/* For lease renewal */ int (*pgio_done_cb)(struct rpc_task *task,struct nfs_pgio_data *data);__u64 mds_offset;/* Filelayout dense stripe */ -struct nfs_page_array pages; +struct nfs_page_array page_array;struct nfs_client *ds_clp;/* pNFS data server */ int ds_idx;/* ds index if ds_clp is set */ };Signature · 1 line
1.8.5.2 (Apple Git-48)
_________________________________
Trond Myklebust
Linux NFS client maintainer, PrimaryData
[email protected]
Re: [PATCH 2/3] nfs: rename members of nfs_pgio_data
Quoted 15 lines · Trond Myklebust
include/linux/nfs_xdr.h struct nfs_pgio_data { · line 1264
Quoted 10 lines · Weston Andros Adamson
include/linux/nfs_xdr.h +1
-1@@ -1261,13 +1261,13 @@ struct nfs_pgio_data {struct list_head list;struct rpc_task task;struct nfs_fattr fattr; -struct nfs_writeverf verf;/* Used for writes */ +struct nfs_writeverf rpc_verf;/* Used for writes */ Can we just make this “writeverf"? It isn’t really an rpc object, so the ‘rpc_’ prefix seems a little misleading.
yes, good point.
-dros
Quoted 20 lines
Quoted 14 lines
include/linux/nfs_xdr.h +1
-1struct nfs_pgio_args args;/* argument struct */ struct nfs_pgio_res res;/* result struct */ unsigned long timestamp;/* For lease renewal */ int (*pgio_done_cb)(struct rpc_task *task,struct nfs_pgio_data *data);__u64 mds_offset;/* Filelayout dense stripe */ -struct nfs_page_array pages; +struct nfs_page_array page_array;struct nfs_client *ds_clp;/* pNFS data server */ int ds_idx;/* ds index if ds_clp is set */ };Signature · 1 line
1.8.5.2 (Apple Git-48)_________________________________
Trond Myklebust
Linux NFS client maintainer, PrimaryData
[email protected]
Re: [PATCH 2/3] nfs: rename members of nfs_pgio_data
Quoted 20 lines · Weston Andros Adamson
Quoted 15 lines · Trond Myklebust
include/linux/nfs_xdr.h struct nfs_pgio_data { · line 1264
Quoted 10 lines · Weston Andros Adamson
include/linux/nfs_xdr.h +1
-1@@ -1261,13 +1261,13 @@ struct nfs_pgio_data {struct list_head list;struct rpc_task task;struct nfs_fattr fattr; -struct nfs_writeverf verf;/* Used for writes */ +struct nfs_writeverf rpc_verf;/* Used for writes */ Can we just make this “writeverf"? It isn’t really an rpc object, so the ‘rpc_’ prefix seems a little misleading.
Quoted 4 lines
yes, good point.
-dros
Actually, having a verf in the header and in pgio_data is redundant now that there is only one pgio_data (the header verf was used to make sure that all pgio_data verfs matched).
I’ll remove rpc_verf.
-dros
Quoted 21 lines
Quoted 20 lines
Quoted 14 lines
include/linux/nfs_xdr.h +1
-1struct nfs_pgio_args args;/* argument struct */ struct nfs_pgio_res res;/* result struct */ unsigned long timestamp;/* For lease renewal */ int (*pgio_done_cb)(struct rpc_task *task,struct nfs_pgio_data *data);__u64 mds_offset;/* Filelayout dense stripe */ -struct nfs_page_array pages; +struct nfs_page_array page_array;struct nfs_client *ds_clp;/* pNFS data server */ int ds_idx;/* ds index if ds_clp is set */ };Signature · 1 line
1.8.5.2 (Apple Git-48)_________________________________
Trond Myklebust
Linux NFS client maintainer, PrimaryData
[email protected]
Re: [PATCH 2/3] nfs: rename members of nfs_pgio_data
Quoted 24 lines · Weston Andros Adamson
Quoted 22 lines · Weston Andros Adamson
Quoted 15 lines · Trond Myklebust
include/linux/nfs_xdr.h struct nfs_pgio_data { · line 1264
Quoted 10 lines · Weston Andros Adamson
include/linux/nfs_xdr.h +1
-1@@ -1261,13 +1261,13 @@ struct nfs_pgio_data {struct list_head list;struct rpc_task task;struct nfs_fattr fattr; -struct nfs_writeverf verf;/* Used for writes */ +struct nfs_writeverf rpc_verf;/* Used for writes */ Can we just make this “writeverf"? It isn’t really an rpc object, so the ‘rpc_’ prefix seems a little misleading.
yes, good point.
Quoted 7 lines
Quoted 2 lines
-dros
Actually, having a verf in the header and in
pgio_datais redundant now that there is only onepgio_data(the header verf was used to make sure that allpgio_dataverfs matched).I’ll remove
rpc_verf.
I should point out that the header verf is also used to compare the WRITE verf(s) with the COMMIT verf (from nfs_commit_data), but this will stay the same.
-dros
Quoted 26 lines
Quoted 12 lines
Quoted 12 lines
Quoted 12 lines
include/linux/nfs_xdr.h +1
-1struct nfs_pgio_args args;/* argument struct */ struct nfs_pgio_res res;/* result struct */ unsigned long timestamp;/* For lease renewal */ int (*pgio_done_cb)(struct rpc_task *task,struct nfs_pgio_data *data);__u64 mds_offset;/* Filelayout dense stripe */ -struct nfs_page_array pages; +struct nfs_page_array page_array;struct nfs_client *ds_clp;/* pNFS data server */ int ds_idx;/* ds index if ds_clp is set */ };Quoted 9 lines
Quoted 8 lines
Quoted 2 lines
1.8.5.2 (Apple Git-48)
_________________________________
Trond Myklebust
Linux NFS client maintainer, PrimaryData
[email protected]--
To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
PATCH 3/3 nfs: merge nfs_pgio_data into _header
In reply to Weston Andros Adamsonstruct nfs_pgio_data only exists as a member of nfs_pgio_header, but is passed around everywhere, because there used to be multiple _data structs per _header. Many of these functions then use the _data to find a pointer to the _header. This patch cleans this up by merging the nfs_pgio_data structure into nfs_pgio_header and passing nfs_pgio_header around instead.
--- fs/nfs/blocklayout/blocklayout.c | 98 +++++++++++------------ fs/nfs/direct.c | 8 +- fs/nfs/internal.h | 6 +- fs/nfs/nfs3proc.c | 21 ++--- fs/nfs/nfs4_fs.h | 6 +- fs/nfs/nfs4filelayout.c | 169 +++++++++++++++++++-------------------- fs/nfs/nfs4proc.c | 105 ++++++++++++------------ fs/nfs/nfs4trace.h | 28 +++---- fs/nfs/objlayout/objio_osd.c | 24 +++--- fs/nfs/objlayout/objlayout.c | 81 +++++++++---------- fs/nfs/objlayout/objlayout.h | 8 +- fs/nfs/pageio.c | 115 +++++++++++++------------- fs/nfs/pnfs.c | 80 ++++++++---------- fs/nfs/pnfs.h | 10 +-- fs/nfs/proc.c | 27 ++++--- fs/nfs/read.c | 42 +++++----- fs/nfs/write.c | 55 +++++++------ include/linux/nfs_fs.h | 2 +- include/linux/nfs_page.h | 9 ++- include/linux/nfs_xdr.h | 43 +++++----- 20 files changed, 459 insertions(+), 478 deletions(-)
fs/nfs/blocklayout/blocklayout.c +47 -51
@@ -210,8 +210,7 @@ static void bl_end_io_read(struct bio *bio, int err)SetPageUptodate (bvec->bv_page);if (err) { -struct nfs_pgio_data *rdata = par->data; -struct nfs_pgio_header *header = rdata->header; +struct nfs_pgio_header *header = par->data;if (!header->pnfs_error) header->pnfs_error = -EIO ;
@@ -224,44 +223,44 @@ static void bl_end_io_read(struct bio *bio, int err)static void bl_read_cleanup (struct work_struct *work) {struct rpc_task *task; -struct nfs_pgio_data *rdata; +struct nfs_pgio_header *hdr;dprintk ("%s enter\n" , __func__); task = container_of(work, struct rpc_task, u.tk_work); - rdata = container_of(task, struct nfs_pgio_data, task); -pnfs_ld_read_done (rdata); + hdr = container_of(task, struct nfs_pgio_header, task); +pnfs_ld_read_done (hdr); }static void bl_end_par_io_read (void *data,int unused) { -struct nfs_pgio_data *rdata = data; +struct nfs_pgio_header *hdr = data; - rdata->task.tk_status = rdata->header->pnfs_error; -INIT_WORK (&rdata->task.u.tk_work, bl_read_cleanup); -schedule_work (&rdata->task.u.tk_work); + hdr->task.tk_status = hdr->pnfs_error; +INIT_WORK (&hdr->task.u.tk_work, bl_read_cleanup); +schedule_work (&hdr->task.u.tk_work); }static enum pnfs_try_status -bl_read_pagelist (struct nfs_pgio_data *rdata) +bl_read_pagelist (struct nfs_pgio_header *hdr) { -struct nfs_pgio_header *header = rdata->header; +struct nfs_pgio_header *header = hdr;int i, hole;struct bio *bio =NULL ;struct pnfs_block_extent *be =NULL , *cow_read =NULL ;sector_t isect, extent_length =0 ;struct parallel_io *par; -loff_t f_offset = rdata->args.offset; -size_t bytes_left = rdata->args.count; +loff_t f_offset = hdr->args.offset; +size_t bytes_left = hdr->args.count;unsigned int pg_offset, pg_len; -struct page **pages = rdata->args.pages; -int pg_index = rdata->args.pgbase >>PAGE_CACHE_SHIFT ; +struct page **pages = hdr->args.pages; +int pg_index = hdr->args.pgbase >>PAGE_CACHE_SHIFT ;const bool is_dio = (header->dreq !=NULL );dprintk ("%s enter nr_pages %u offset %lld count %u\n" , __func__, - rdata->page_array.npages, f_offset, - (unsigned int )rdata->args.count); + hdr->page_array.npages, f_offset, + (unsigned int )hdr->args.count); - par =alloc_parallel (rdata); + par =alloc_parallel (hdr);if (!par) goto use_mds; par->pnfs_callback = bl_end_par_io_read;
@@ -269,7 +268,7 @@ bl_read_pagelist(struct nfs_pgio_data *rdata) isect = (sector_t) (f_offset >>SECTOR_SHIFT );/* Code assumes extents are page-aligned */ -for (i = pg_index; i < rdata->page_array.npages; i++) { +for (i = pg_index; i < hdr->page_array.npages; i++) {if (!extent_length) {/* We've used up the previous extent */ bl_put_extent (be);
@@ -319,7 +318,7 @@ bl_read_pagelist(struct nfs_pgio_data *rdata) be_read = (hole && cow_read) ? cow_read : be; bio = do_add_page_to_bio(bio, - rdata->page_array.npages - i, + hdr->page_array.npages - i, READ, isect, pages[i], be_read, bl_end_io_read, par,
@@ -334,10 +333,10 @@ bl_read_pagelist(struct nfs_pgio_data *rdata) extent_length -=PAGE_CACHE_SECTORS ; }if ((isect <<SECTOR_SHIFT ) >= header->inode->i_size) { - rdata->res.eof =1 ; - rdata->res.count = header->inode->i_size - rdata->args.offset; + hdr->res.eof =1 ; + hdr->res.count = header->inode->i_size - hdr->args.offset; }else { - rdata->res.count = (isect <<SECTOR_SHIFT ) - rdata->args.offset; + hdr->res.count = (isect <<SECTOR_SHIFT ) - hdr->args.offset; } out:bl_put_extent (be);
@@ -392,8 +391,7 @@ static void bl_end_io_write_zero(struct bio *bio, int err) }if (unlikely (err)) { -struct nfs_pgio_data *data = par->data; -struct nfs_pgio_header *header = data->header; +struct nfs_pgio_header *header = par->data;if (!header->pnfs_error) header->pnfs_error = -EIO ;
@@ -407,8 +405,7 @@ static void bl_end_io_write(struct bio *bio, int err) {struct parallel_io *par = bio->bi_private;const int uptodate =test_bit (BIO_UPTODATE , &bio->bi_flags); -struct nfs_pgio_data *data = par->data; -struct nfs_pgio_header *header = data->header; +struct nfs_pgio_header *header = par->data;if (!uptodate) {if (!header->pnfs_error)
@@ -425,32 +422,32 @@ static void bl_end_io_write(struct bio *bio, int err)static void bl_write_cleanup (struct work_struct *work) {struct rpc_task *task; -struct nfs_pgio_data *wdata; +struct nfs_pgio_header *hdr;dprintk ("%s enter\n" , __func__); task = container_of(work, struct rpc_task, u.tk_work); - wdata = container_of(task, struct nfs_pgio_data, task); -if (likely (!wdata->header->pnfs_error)) { + hdr = container_of(task, struct nfs_pgio_header, task); +if (likely (!hdr->pnfs_error)) {/* Marks for LAYOUTCOMMIT */ -mark_extents_written (BLK_LSEG2EXT (wdata->header->lseg), - wdata->args.offset, wdata->args.count); +mark_extents_written (BLK_LSEG2EXT (hdr->lseg), + hdr->args.offset, hdr->args.count); } -pnfs_ld_write_done (wdata); +pnfs_ld_write_done (hdr); }/* Called when last of bios associated with a bl_write_pagelist call finishes */ static void bl_end_par_io_write (void *data,int num_se) { -struct nfs_pgio_data *wdata = data; +struct nfs_pgio_header *hdr = data; -if (unlikely (wdata->header->pnfs_error)) { -bl_free_short_extents (&BLK_LSEG2EXT (wdata->header->lseg)->bl_inval, +if (unlikely (hdr->pnfs_error)) { +bl_free_short_extents (&BLK_LSEG2EXT (hdr->lseg)->bl_inval, num_se); } - wdata->task.tk_status = wdata->header->pnfs_error; - wdata->verf.committed =NFS_FILE_SYNC ; -INIT_WORK (&wdata->task.u.tk_work, bl_write_cleanup); -schedule_work (&wdata->task.u.tk_work); + hdr->task.tk_status = hdr->pnfs_error; + hdr->rpc_verf.committed =NFS_FILE_SYNC ; +INIT_WORK (&hdr->task.u.tk_work, bl_write_cleanup); +schedule_work (&hdr->task.u.tk_work); }/* FIXME STUB - mark intersection of layout and page as bad, so is not
@@ -675,18 +672,17 @@ check_page: }static enum pnfs_try_status -bl_write_pagelist (struct nfs_pgio_data *wdata,int sync) +bl_write_pagelist (struct nfs_pgio_header *header,int sync) { -struct nfs_pgio_header *header = wdata->header;int i, ret, npg_zero, pg_index, last =0 ;struct bio *bio =NULL ;struct pnfs_block_extent *be =NULL , *cow_read =NULL ;sector_t isect, last_isect =0 , extent_length =0 ;struct parallel_io *par =NULL ; -loff_t offset = wdata->args.offset; -size_t count = wdata->args.count; +loff_t offset = header->args.offset; +size_t count = header->args.count;unsigned int pg_offset, pg_len, saved_len; -struct page **pages = wdata->args.pages; +struct page **pages = header->args.pages;struct page *page;pgoff_t index;u64 temp;
@@ -701,11 +697,11 @@ bl_write_pagelist(struct nfs_pgio_data *wdata, int sync)dprintk ("pnfsblock nonblock aligned DIO writes. Resend MDS\n" ); goto out_mds; } -/* At this point, wdata->page_aray is a (sequential) list of nfs_pages. +/* At this point, header->page_aray is a (sequential) list of nfs_pages. * We want to write each, and if there is an error set pnfs_error * to have it redone using nfs. */ - par =alloc_parallel (wdata); + par =alloc_parallel (header);if (!par) goto out_mds; par->pnfs_callback = bl_end_par_io_write;
@@ -792,8 +788,8 @@ next_page: bio =bl_submit_bio (WRITE , bio);/* Middle pages */ - pg_index = wdata->args.pgbase >>PAGE_CACHE_SHIFT ; -for (i = pg_index; i < wdata->page_array.npages; i++) { + pg_index = header->args.pgbase >>PAGE_CACHE_SHIFT ; +for (i = pg_index; i < header->page_array.npages; i++) {if (!extent_length) {/* We've used up the previous extent */ bl_put_extent (be);
@@ -864,7 +860,7 @@ next_page: } - bio = do_add_page_to_bio(bio, wdata->page_array.npages - i, + bio = do_add_page_to_bio(bio, header->page_array.npages - i, WRITE, isect, pages[i], be, bl_end_io_write, par,
@@ -893,7 +889,7 @@ next_page: } write_done: - wdata->res.count = wdata->args.count; + header->res.count = header->args.count; out:bl_put_extent (be);bl_put_extent (cow_read);
fs/nfs/direct.c +4 -4
@@ -148,8 +148,8 @@ static void nfs_direct_set_hdr_verf(struct nfs_direct_req *dreq, {struct nfs_writeverf *verfp; - verfp =nfs_direct_select_verf (dreq, hdr->data.ds_clp, - hdr->data.ds_idx); + verfp =nfs_direct_select_verf (dreq, hdr->ds_clp, + hdr->ds_idx);WARN_ON_ONCE (verfp->committed >=0 );memcpy (verfp, &hdr->verf,sizeof (struct nfs_writeverf ));WARN_ON_ONCE (verfp->committed <0 );
@@ -169,8 +169,8 @@ static int nfs_direct_set_or_cmp_hdr_verf(struct nfs_direct_req *dreq, {struct nfs_writeverf *verfp; - verfp =nfs_direct_select_verf (dreq, hdr->data.ds_clp, - hdr->data.ds_idx); + verfp =nfs_direct_select_verf (dreq, hdr->ds_clp, + hdr->ds_idx);if (verfp->committed <0 ) {nfs_direct_set_hdr_verf (dreq, hdr);return 0 ;
fs/nfs/internal.h +3 -3
@@ -399,9 +399,9 @@ struct nfs_pgio_completion_ops;extern const struct nfs_pageio_ops nfs_pgio_rw_ops;extern struct nfs_pgio_header *nfs_pgio_header_alloc (const struct nfs_rw_ops *);extern void nfs_pgio_header_free (struct nfs_pgio_header *); -extern void nfs_pgio_data_destroy (struct nfs_pgio_data *); +extern void nfs_pgio_data_destroy (struct nfs_pgio_header *);extern int nfs_generic_pgio (struct nfs_pageio_descriptor *,struct nfs_pgio_header *); -extern int nfs_initiate_pgio (struct rpc_clnt *,struct nfs_pgio_data *, +extern int nfs_initiate_pgio (struct rpc_clnt *,struct nfs_pgio_header *,const struct rpc_call_ops *,int ,int );extern int nfs_do_multiple_pgios (struct list_head *,const struct rpc_call_ops *,int );
@@ -487,7 +487,7 @@ static inline void nfs_inode_dio_wait(struct inode *inode)extern ssize_t nfs_dreq_bytes_left (struct nfs_direct_req *dreq);/* nfs4proc.c */ -extern void __nfs4_read_done_cb (struct nfs_pgio_data *); +extern void __nfs4_read_done_cb (struct nfs_pgio_header *);extern struct nfs_client *nfs4_init_client (struct nfs_client *clp,const struct rpc_timeout *timeparms,const char *ip_addr);
fs/nfs/nfs3proc.c +12 -9
@@ -795,41 +795,44 @@ nfs3_proc_pathconf(struct nfs_server *server, struct nfs_fh *fhandle,return status; } -static int nfs3_read_done (struct rpc_task *task,struct nfs_pgio_data *data) +static int nfs3_read_done (struct rpc_task *task,struct nfs_pgio_header *hdr) { -struct inode *inode = data->header->inode; +struct inode *inode = hdr->inode;if (nfs3_async_handle_jukebox (task, inode))return -EAGAIN ;nfs_invalidate_atime (inode); -nfs_refresh_inode (inode, &data->fattr); +nfs_refresh_inode (inode, &hdr->fattr);return 0 ; } -static void nfs3_proc_read_setup (struct nfs_pgio_data *data,struct rpc_message *msg) +static void nfs3_proc_read_setup (struct nfs_pgio_header *hdr, +struct rpc_message *msg) { msg->rpc_proc = &nfs3_procedures[NFS3PROC_READ ]; } -static int nfs3_proc_pgio_rpc_prepare (struct rpc_task *task,struct nfs_pgio_data *data) +static int nfs3_proc_pgio_rpc_prepare (struct rpc_task *task, +struct nfs_pgio_header *hdr) {rpc_call_start (task);return 0 ; } -static int nfs3_write_done (struct rpc_task *task,struct nfs_pgio_data *data) +static int nfs3_write_done (struct rpc_task *task,struct nfs_pgio_header *hdr) { -struct inode *inode = data->header->inode; +struct inode *inode = hdr->inode;if (nfs3_async_handle_jukebox (task, inode))return -EAGAIN ;if (task->tk_status >=0 ) -nfs_post_op_update_inode_force_wcc (inode, data->res.fattr); +nfs_post_op_update_inode_force_wcc (inode, hdr->res.fattr);return 0 ; } -static void nfs3_proc_write_setup (struct nfs_pgio_data *data,struct rpc_message *msg) +static void nfs3_proc_write_setup (struct nfs_pgio_header *hdr, +struct rpc_message *msg) { msg->rpc_proc = &nfs3_procedures[NFS3PROC_WRITE ]; }
fs/nfs/nfs4_fs.h +3 -3
@@ -337,11 +337,11 @@ nfs4_state_protect(struct nfs_client *clp, unsigned long sp4_mode,*/ static inline void nfs4_state_protect_write (struct nfs_client *clp,struct rpc_clnt **clntp, -struct rpc_message *msg,struct nfs_pgio_data *wdata) +struct rpc_message *msg,struct nfs_pgio_header *hdr) {if (_nfs4_state_protect (clp,NFS_SP4_MACH_CRED_WRITE , clntp, msg) && !test_bit (NFS_SP4_MACH_CRED_COMMIT , &clp->cl_sp4_flags)) - wdata->args.stable =NFS_FILE_SYNC ; + hdr->args.stable =NFS_FILE_SYNC ; }#else /* CONFIG_NFS_v4_1 */ static inline struct nfs4_session *nfs4_get_session (const struct nfs_server *server)
@@ -369,7 +369,7 @@ nfs4_state_protect(struct nfs_client *clp, unsigned long sp4_flags,static inline void nfs4_state_protect_write (struct nfs_client *clp,struct rpc_clnt **clntp, -struct rpc_message *msg,struct nfs_pgio_data *wdata) +struct rpc_message *msg,struct nfs_pgio_header *hdr) { }#endif /* CONFIG_NFS_V4_1 */
fs/nfs/nfs4filelayout.c +81 -88
365 lines not on this page · raw message
fs/nfs/nfs4proc.c +55 -50
179 lines not on this page · raw message
fs/nfs/nfs4trace.h +14 -14
@@ -932,11 +932,11 @@ DEFINE_NFS4_IDMAP_EVENT(nfs4_map_gid_to_group); DECLARE_EVENT_CLASS(nfs4_read_event, TP_PROTO( - const struct nfs_pgio_data *data, + const struct nfs_pgio_header *hdr, int error ), - TP_ARGS(data, error), + TP_ARGS(hdr, error), TP_STRUCT__entry( __field(dev_t, dev)
@@ -948,12 +948,12 @@ DECLARE_EVENT_CLASS(nfs4_read_event, ),TP_fast_assign ( - const struct inode *inode = data->header->inode; + const struct inode *inode = hdr->inode; __entry->dev = inode->i_sb->s_dev; __entry->fileid =NFS_FILEID (inode); __entry->fhandle =nfs_fhandle_hash (NFS_FH (inode)); - __entry->offset = data->args.offset; - __entry->count = data->args.count; + __entry->offset = hdr->args.offset; + __entry->count = hdr->args.count; __entry->error = error; ),
@@ -972,10 +972,10 @@ DECLARE_EVENT_CLASS(nfs4_read_event,#define DEFINE_NFS4_READ_EVENT (name) \ DEFINE_EVENT(nfs4_read_event, name, \ TP_PROTO( \ - const struct nfs_pgio_data *data, \ + const struct nfs_pgio_header *hdr, \ int error \ ), \ - TP_ARGS(data, error)) + TP_ARGS(hdr, error))DEFINE_NFS4_READ_EVENT (nfs4_read);#ifdef CONFIG_NFS_V4_1 DEFINE_NFS4_READ_EVENT (nfs4_pnfs_read);
@@ -983,11 +983,11 @@ DEFINE_NFS4_READ_EVENT(nfs4_pnfs_read); DECLARE_EVENT_CLASS(nfs4_write_event, TP_PROTO( - const struct nfs_pgio_data *data, + const struct nfs_pgio_header *hdr, int error ), - TP_ARGS(data, error), + TP_ARGS(hdr, error), TP_STRUCT__entry( __field(dev_t, dev)
@@ -999,12 +999,12 @@ DECLARE_EVENT_CLASS(nfs4_write_event, ),TP_fast_assign ( - const struct inode *inode = data->header->inode; + const struct inode *inode = hdr->inode; __entry->dev = inode->i_sb->s_dev; __entry->fileid =NFS_FILEID (inode); __entry->fhandle =nfs_fhandle_hash (NFS_FH (inode)); - __entry->offset = data->args.offset; - __entry->count = data->args.count; + __entry->offset = hdr->args.offset; + __entry->count = hdr->args.count; __entry->error = error; ),
@@ -1024,10 +1024,10 @@ DECLARE_EVENT_CLASS(nfs4_write_event,#define DEFINE_NFS4_WRITE_EVENT (name) \ DEFINE_EVENT(nfs4_write_event, name, \ TP_PROTO( \ - const struct nfs_pgio_data *data, \ + const struct nfs_pgio_header *hdr, \ int error \ ), \ - TP_ARGS(data, error)) + TP_ARGS(hdr, error))DEFINE_NFS4_WRITE_EVENT (nfs4_write);#ifdef CONFIG_NFS_V4_1 DEFINE_NFS4_WRITE_EVENT (nfs4_pnfs_write);
fs/nfs/objlayout/objio_osd.c +11 -13
@@ -439,22 +439,21 @@ static void _read_done(struct ore_io_state *ios, void *private)objlayout_read_done (&objios->oir, status, objios->sync); } -int objio_read_pagelist (struct nfs_pgio_data *rdata) +int objio_read_pagelist (struct nfs_pgio_header *hdr) { -struct nfs_pgio_header *hdr = rdata->header;struct objio_state *objios;int ret; ret =objio_alloc_io_state (NFS_I (hdr->inode)->layout, true, - hdr->lseg, rdata->args.pages, rdata->args.pgbase, - rdata->args.offset, rdata->args.count, rdata, + hdr->lseg, hdr->args.pages, hdr->args.pgbase, + hdr->args.offset, hdr->args.count, hdr,GFP_KERNEL , &objios);if (unlikely (ret))return ret; objios->ios->done = _read_done;dprintk ("%s: offset=0x%llx length=0x%x\n" , __func__, - rdata->args.offset, rdata->args.count); + hdr->args.offset, hdr->args.count); ret =ore_read (objios->ios);if (unlikely (ret))objio_free_result (&objios->oir);
@@ -487,11 +486,11 @@ static void _write_done(struct ore_io_state *ios, void *private)static struct page *__r4w_get_page (void *priv,u64 offset,bool *uptodate) {struct objio_state *objios = priv; -struct nfs_pgio_data *wdata = objios->oir.rpcdata; -struct address_space *mapping = wdata->header->inode->i_mapping; +struct nfs_pgio_header *hdr = objios->oir.rpcdata; +struct address_space *mapping = hdr->inode->i_mapping;pgoff_t index = offset /PAGE_SIZE ;struct page *page; -loff_t i_size =i_size_read (wdata->header->inode); +loff_t i_size =i_size_read (hdr->inode);if (offset >= i_size) { *uptodate = true;
@@ -531,15 +530,14 @@ static const struct _ore_r4w_op _r4w_op = { .put_page = &__r4w_put_page, }; -int objio_write_pagelist (struct nfs_pgio_data *wdata,int how) +int objio_write_pagelist (struct nfs_pgio_header *hdr,int how) { -struct nfs_pgio_header *hdr = wdata->header;struct objio_state *objios;int ret; ret =objio_alloc_io_state (NFS_I (hdr->inode)->layout, false, - hdr->lseg, wdata->args.pages, wdata->args.pgbase, - wdata->args.offset, wdata->args.count, wdata,GFP_NOFS , + hdr->lseg, hdr->args.pages, hdr->args.pgbase, + hdr->args.offset, hdr->args.count, hdr,GFP_NOFS , &objios);if (unlikely (ret))return ret;
@@ -551,7 +549,7 @@ int objio_write_pagelist(struct nfs_pgio_data *wdata, int how) objios->ios->done = _write_done;dprintk ("%s: offset=0x%llx length=0x%x\n" , __func__, - wdata->args.offset, wdata->args.count); + hdr->args.offset, hdr->args.count); ret =ore_write (objios->ios);if (unlikely (ret)) {objio_free_result (&objios->oir);
fs/nfs/objlayout/objlayout.c +39 -42
165 lines not on this page · raw message
fs/nfs/objlayout/objlayout.h +4 -4
@@ -119,8 +119,8 @@ extern void objio_free_lseg(struct pnfs_layout_segment *lseg);*/ extern void objio_free_result (struct objlayout_io_res *oir); -extern int objio_read_pagelist (struct nfs_pgio_data *rdata); -extern int objio_write_pagelist (struct nfs_pgio_data *wdata,int how); +extern int objio_read_pagelist (struct nfs_pgio_header *rdata); +extern int objio_write_pagelist (struct nfs_pgio_header *wdata,int how);/* * callback API
@@ -168,10 +168,10 @@ extern struct pnfs_layout_segment *objlayout_alloc_lseg(extern void objlayout_free_lseg (struct pnfs_layout_segment *);extern enum pnfs_try_status objlayout_read_pagelist ( -struct nfs_pgio_data *); +struct nfs_pgio_header *);extern enum pnfs_try_status objlayout_write_pagelist ( -struct nfs_pgio_data *, +struct nfs_pgio_header *,int how); extern void objlayout_encode_layoutcommit(
fs/nfs/pageio.c +56 -59
238 lines not on this page · raw message
fs/nfs/pnfs.c +32 -48
208 lines not on this page · raw message
fs/nfs/pnfs.h +5 -5
@@ -113,8 +113,8 @@ struct pnfs_layoutdriver_type {* Return PNFS_ATTEMPTED to indicate the layout code has attempted * I/O, else return PNFS_NOT_ATTEMPTED to fall back to normal NFS */ -enum pnfs_try_status (*read_pagelist) (struct nfs_pgio_data *nfs_data); -enum pnfs_try_status (*write_pagelist) (struct nfs_pgio_data *nfs_data,int how); +enum pnfs_try_status (*read_pagelist)(struct nfs_pgio_header *); +enum pnfs_try_status (*write_pagelist)(struct nfs_pgio_header *,int );void (*free_deviceid_node) (struct nfs4_deviceid_node *);
@@ -213,13 +213,13 @@ bool pnfs_roc(struct inode *ino);void pnfs_roc_release (struct inode *ino);void pnfs_roc_set_barrier (struct inode *ino,u32 barrier);bool pnfs_roc_drain (struct inode *ino,u32 *barrier,struct rpc_task *task); -void pnfs_set_layoutcommit (struct nfs_pgio_data *wdata); +void pnfs_set_layoutcommit (struct nfs_pgio_header *);void pnfs_cleanup_layoutcommit (struct nfs4_layoutcommit_data *data);int pnfs_layoutcommit_inode (struct inode *inode,bool sync);int _pnfs_return_layout (struct inode *);int pnfs_commit_and_return_layout (struct inode *); -void pnfs_ld_write_done (struct nfs_pgio_data *); -void pnfs_ld_read_done (struct nfs_pgio_data *); +void pnfs_ld_write_done (struct nfs_pgio_header *); +void pnfs_ld_read_done (struct nfs_pgio_header *); struct pnfs_layout_segment *pnfs_update_layout(struct inode *ino, struct nfs_open_context *ctx, loff_t pos,
fs/nfs/proc.c +15 -12
@@ -578,46 +578,49 @@ nfs_proc_pathconf(struct nfs_server *server, struct nfs_fh *fhandle,return 0 ; } -static int nfs_read_done (struct rpc_task *task,struct nfs_pgio_data *data) +static int nfs_read_done (struct rpc_task *task,struct nfs_pgio_header *hdr) { -struct inode *inode = data->header->inode; +struct inode *inode = hdr->inode;nfs_invalidate_atime (inode);if (task->tk_status >=0 ) { -nfs_refresh_inode (inode, data->res.fattr); +nfs_refresh_inode (inode, hdr->res.fattr);/* Emulate the eof flag, which isn't normally needed in NFSv2 * as it is guaranteed to always return the file attributes */ -if (data->args.offset + data->res.count >= data->res.fattr->size) - data->res.eof =1 ; +if (hdr->args.offset + hdr->res.count >= hdr->res.fattr->size) + hdr->res.eof =1 ; }return 0 ; } -static void nfs_proc_read_setup (struct nfs_pgio_data *data,struct rpc_message *msg) +static void nfs_proc_read_setup (struct nfs_pgio_header *hdr, +struct rpc_message *msg) { msg->rpc_proc = &nfs_procedures[NFSPROC_READ ]; } -static int nfs_proc_pgio_rpc_prepare (struct rpc_task *task,struct nfs_pgio_data *data) +static int nfs_proc_pgio_rpc_prepare (struct rpc_task *task, +struct nfs_pgio_header *hdr) {rpc_call_start (task);return 0 ; } -static int nfs_write_done (struct rpc_task *task,struct nfs_pgio_data *data) +static int nfs_write_done (struct rpc_task *task,struct nfs_pgio_header *hdr) { -struct inode *inode = data->header->inode; +struct inode *inode = hdr->inode;if (task->tk_status >=0 ) -nfs_post_op_update_inode_force_wcc (inode, data->res.fattr); +nfs_post_op_update_inode_force_wcc (inode, hdr->res.fattr);return 0 ; } -static void nfs_proc_write_setup (struct nfs_pgio_data *data,struct rpc_message *msg) +static void nfs_proc_write_setup (struct nfs_pgio_header *hdr, +struct rpc_message *msg) {/* Note: NFSv2 ignores @stable and always uses NFS_FILE_SYNC */ - data->args.stable =NFS_FILE_SYNC ; + hdr->args.stable =NFS_FILE_SYNC ; msg->rpc_proc = &nfs_procedures[NFSPROC_WRITE ]; }
fs/nfs/read.c +22 -20
92 lines not on this page · raw message
fs/nfs/write.c +29 -26
139 lines not on this page · raw message
include/linux/nfs_fs.h +1 -1
@@ -520,7 +520,7 @@ extern int nfs_writepage(struct page *page, struct writeback_control *wbc);extern int nfs_writepages (struct address_space *,struct writeback_control *);extern int nfs_flush_incompatible (struct file *file,struct page *page);extern int nfs_updatepage (struct file *,struct page *,unsigned int ,unsigned int ); -extern void nfs_writeback_done (struct rpc_task *,struct nfs_pgio_data *); +extern void nfs_writeback_done (struct rpc_task *,struct nfs_pgio_header *);/* * Try to write back everything synchronously (but check the
include/linux/nfs_page.h +5 -4
@@ -64,10 +64,11 @@ struct nfs_rw_ops {const fmode_t rw_mode;struct nfs_pgio_header *(*rw_alloc_header)(void );void (*rw_free_header)(struct nfs_pgio_header *); -void (*rw_release)(struct nfs_pgio_data *); -int (*rw_result)(struct rpc_task *,struct nfs_pgio_data *,struct inode *); -void (*rw_result_common)(struct rpc_task *,struct nfs_pgio_data *); -void (*rw_initiate)(struct nfs_pgio_data *,struct rpc_message *, +void (*rw_release)(struct nfs_pgio_header *); +int (*rw_result)(struct rpc_task *,struct nfs_pgio_header *, +struct inode *); +void (*rw_result_common)(struct rpc_task *,struct nfs_pgio_header *); +void (*rw_initiate)(struct nfs_pgio_header *,struct rpc_message *,struct rpc_task_setup *,int ); };
include/linux/nfs_xdr.h +21 -22
65 lines not on this page · raw message
Signature · 1 line
1.8.5.2 (Apple Git-48)
I like the idea, and I don't have a problem with these at a glance. I'll let you know if I hit anything whenever I get something set up for testing.
Quoted 48 lines · Weston Andros Adamson
I'd like to know what people think of this proposed cleanup - it is to be applied on top of the "pgio" branch at:
git://git.linux-nfs.org/projects/dros/linux-nfs.gitThe basic idea is that we no longer need a separate
nfs_pgio_datastructure, because thenfs_pgio_headerstructure always has one - and only one.I know this changes a lot of files, but I think now is the time to do this, as we have to test everything anyways due to my subpage work and Anna's pgio cleanup.
I should note that there is little chance we'll ever go back to having more than one
nfs_pgio_datapernfs_pgio_header- since thenfs_pagesubpage splitting work allows us to describe arbitrary ranges at that level.I think I can go a bit further by getting rid of the
pgio_headerrefcnt. I'll look closer at this soon...-dros
Weston Andros Adamson (3):
nfs: movenfs_pgio_dataand removenfs_rw_header
nfs: rename members ofnfs_pgio_data
nfs: mergenfs_pgio_datainto_headerfs/nfs/blocklayout/blocklayout.c | 99 +++++++++++---------- fs/nfs/direct.c | 8 +- fs/nfs/internal.h | 10 +-- fs/nfs/nfs3proc.c | 21 +++-- fs/nfs/nfs4_fs.h | 6 +- fs/nfs/nfs4filelayout.c | 169 +++++++++++++++++------------------ fs/nfs/nfs4proc.c | 105 +++++++++++----------- fs/nfs/nfs4trace.h | 28 +++--- fs/nfs/objlayout/objio_osd.c | 24 +++-- fs/nfs/objlayout/objlayout.c | 81 ++++++++--------- fs/nfs/objlayout/objlayout.h | 8 +- fs/nfs/pageio.c | 186 ++++++++++++++++----------------------- fs/nfs/pnfs.c | 96 ++++++++------------ fs/nfs/pnfs.h | 10 +-- fs/nfs/proc.c | 27 +++--- fs/nfs/read.c | 48 +++++----- fs/nfs/write.c | 65 +++++++------- include/linux/nfs_fs.h | 2 +- include/linux/nfs_page.h | 13 +-- include/linux/nfs_xdr.h | 31 +++---- 20 files changed, 489 insertions(+), 548 deletions(-)