aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nfs
diff options
context:
space:
mode:
authorWeston Andros Adamson <dros@primarydata.com>2014-06-09 11:48:33 -0400
committerTrond Myklebust <trond.myklebust@primarydata.com>2014-06-24 18:46:59 -0400
commit1e7f3a485922211b6e4a082ebc6bf05810b0b6ea (patch)
tree409983ab4e7f9e880f31afd0648eb3ca039e1b5a /fs/nfs
parent66b068604903849c5dee3842eb72564064c64c72 (diff)
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. Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Weston Andros Adamson <dros@primarydata.com> Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
Diffstat (limited to 'fs/nfs')
-rw-r--r--fs/nfs/direct.c8
-rw-r--r--fs/nfs/internal.h6
-rw-r--r--fs/nfs/pagelist.c94
-rw-r--r--fs/nfs/pnfs.c24
-rw-r--r--fs/nfs/read.c6
-rw-r--r--fs/nfs/write.c10
6 files changed, 53 insertions, 95 deletions
diff --git a/fs/nfs/direct.c b/fs/nfs/direct.c
index 8f98138cbc43..179de67ca907 100644
--- a/fs/nfs/direct.c
+++ b/fs/nfs/direct.c
@@ -148,8 +148,8 @@ static void nfs_direct_set_hdr_verf(struct nfs_direct_req *dreq,
148{ 148{
149 struct nfs_writeverf *verfp; 149 struct nfs_writeverf *verfp;
150 150
151 verfp = nfs_direct_select_verf(dreq, hdr->data->ds_clp, 151 verfp = nfs_direct_select_verf(dreq, hdr->data.ds_clp,
152 hdr->data->ds_idx); 152 hdr->data.ds_idx);
153 WARN_ON_ONCE(verfp->committed >= 0); 153 WARN_ON_ONCE(verfp->committed >= 0);
154 memcpy(verfp, &hdr->verf, sizeof(struct nfs_writeverf)); 154 memcpy(verfp, &hdr->verf, sizeof(struct nfs_writeverf));
155 WARN_ON_ONCE(verfp->committed < 0); 155 WARN_ON_ONCE(verfp->committed < 0);
@@ -169,8 +169,8 @@ static int nfs_direct_set_or_cmp_hdr_verf(struct nfs_direct_req *dreq,
169{ 169{
170 struct nfs_writeverf *verfp; 170 struct nfs_writeverf *verfp;
171 171
172 verfp = nfs_direct_select_verf(dreq, hdr->data->ds_clp, 172 verfp = nfs_direct_select_verf(dreq, hdr->data.ds_clp,
173 hdr->data->ds_idx); 173 hdr->data.ds_idx);
174 if (verfp->committed < 0) { 174 if (verfp->committed < 0) {
175 nfs_direct_set_hdr_verf(dreq, hdr); 175 nfs_direct_set_hdr_verf(dreq, hdr);
176 return 0; 176 return 0;
diff --git a/fs/nfs/internal.h b/fs/nfs/internal.h
index 82ddbf46660e..5cda049c8f9b 100644
--- a/fs/nfs/internal.h
+++ b/fs/nfs/internal.h
@@ -238,9 +238,9 @@ void nfs_set_pgio_error(struct nfs_pgio_header *hdr, int error, loff_t pos);
238int nfs_iocounter_wait(struct nfs_io_counter *c); 238int nfs_iocounter_wait(struct nfs_io_counter *c);
239 239
240extern const struct nfs_pageio_ops nfs_pgio_rw_ops; 240extern const struct nfs_pageio_ops nfs_pgio_rw_ops;
241struct nfs_rw_header *nfs_rw_header_alloc(const struct nfs_rw_ops *); 241struct nfs_pgio_header *nfs_pgio_header_alloc(const struct nfs_rw_ops *);
242void nfs_rw_header_free(struct nfs_pgio_header *); 242void nfs_pgio_header_free(struct nfs_pgio_header *);
243void nfs_pgio_data_release(struct nfs_pgio_data *); 243void nfs_pgio_data_destroy(struct nfs_pgio_data *);
244int nfs_generic_pgio(struct nfs_pageio_descriptor *, struct nfs_pgio_header *); 244int nfs_generic_pgio(struct nfs_pageio_descriptor *, struct nfs_pgio_header *);
245int nfs_initiate_pgio(struct rpc_clnt *, struct nfs_pgio_data *, 245int nfs_initiate_pgio(struct rpc_clnt *, struct nfs_pgio_data *,
246 const struct rpc_call_ops *, int, int); 246 const struct rpc_call_ops *, int, int);
diff --git a/fs/nfs/pagelist.c b/fs/nfs/pagelist.c
index b6ee3a6ee96d..e4cde476562f 100644
--- a/fs/nfs/pagelist.c
+++ b/fs/nfs/pagelist.c
@@ -452,95 +452,61 @@ size_t nfs_generic_pg_test(struct nfs_pageio_descriptor *desc,
452} 452}
453EXPORT_SYMBOL_GPL(nfs_generic_pg_test); 453EXPORT_SYMBOL_GPL(nfs_generic_pg_test);
454 454
455static inline struct nfs_rw_header *NFS_RW_HEADER(struct nfs_pgio_header *hdr) 455struct nfs_pgio_header *nfs_pgio_header_alloc(const struct nfs_rw_ops *ops)
456{ 456{
457 return container_of(hdr, struct nfs_rw_header, header); 457 struct nfs_pgio_header *hdr = ops->rw_alloc_header();
458}
459
460/**
461 * nfs_rw_header_alloc - Allocate a header for a read or write
462 * @ops: Read or write function vector
463 */
464struct nfs_rw_header *nfs_rw_header_alloc(const struct nfs_rw_ops *ops)
465{
466 struct nfs_rw_header *header = ops->rw_alloc_header();
467
468 if (header) {
469 struct nfs_pgio_header *hdr = &header->header;
470 458
459 if (hdr) {
471 INIT_LIST_HEAD(&hdr->pages); 460 INIT_LIST_HEAD(&hdr->pages);
472 spin_lock_init(&hdr->lock); 461 spin_lock_init(&hdr->lock);
473 atomic_set(&hdr->refcnt, 0); 462 atomic_set(&hdr->refcnt, 0);
474 hdr->rw_ops = ops; 463 hdr->rw_ops = ops;
475 } 464 }
476 return header; 465 return hdr;
477} 466}
478EXPORT_SYMBOL_GPL(nfs_rw_header_alloc); 467EXPORT_SYMBOL_GPL(nfs_pgio_header_alloc);
479 468
480/* 469/*
481 * nfs_rw_header_free - Free a read or write header 470 * nfs_pgio_header_free - Free a read or write header
482 * @hdr: The header to free 471 * @hdr: The header to free
483 */ 472 */
484void nfs_rw_header_free(struct nfs_pgio_header *hdr) 473void nfs_pgio_header_free(struct nfs_pgio_header *hdr)
485{ 474{
486 hdr->rw_ops->rw_free_header(NFS_RW_HEADER(hdr)); 475 hdr->rw_ops->rw_free_header(hdr);
487} 476}
488EXPORT_SYMBOL_GPL(nfs_rw_header_free); 477EXPORT_SYMBOL_GPL(nfs_pgio_header_free);
489 478
490/** 479/**
491 * nfs_pgio_data_alloc - Allocate pageio data 480 * nfs_pgio_data_alloc - Allocate pageio data
492 * @hdr: The header making a request 481 * @hdr: The header making a request
493 * @pagecount: Number of pages to create 482 * @pagecount: Number of pages to create
494 */ 483 */
495static struct nfs_pgio_data *nfs_pgio_data_alloc(struct nfs_pgio_header *hdr, 484static bool nfs_pgio_data_init(struct nfs_pgio_header *hdr,
496 unsigned int pagecount) 485 unsigned int pagecount)
497{ 486{
498 struct nfs_pgio_data *data, *prealloc; 487 if (nfs_pgarray_set(&hdr->data.pages, pagecount)) {
499 488 hdr->data.header = hdr;
500 prealloc = &NFS_RW_HEADER(hdr)->rpc_data;
501 if (prealloc->header == NULL)
502 data = prealloc;
503 else
504 data = kzalloc(sizeof(*data), GFP_KERNEL);
505 if (!data)
506 goto out;
507
508 if (nfs_pgarray_set(&data->pages, pagecount)) {
509 data->header = hdr;
510 atomic_inc(&hdr->refcnt); 489 atomic_inc(&hdr->refcnt);
511 } else { 490 return true;
512 if (data != prealloc)
513 kfree(data);
514 data = NULL;
515 } 491 }
516out: 492 return false;
517 return data;
518} 493}
519 494
520/** 495/**
521 * nfs_pgio_data_release - Properly free pageio data 496 * nfs_pgio_data_destroy - Properly free pageio data
522 * @data: The data to release 497 * @data: The data to destroy
523 */ 498 */
524void nfs_pgio_data_release(struct nfs_pgio_data *data) 499void nfs_pgio_data_destroy(struct nfs_pgio_data *data)
525{ 500{
526 struct nfs_pgio_header *hdr = data->header; 501 struct nfs_pgio_header *hdr = data->header;
527 struct nfs_rw_header *pageio_header = NFS_RW_HEADER(hdr);
528 502
529 put_nfs_open_context(data->args.context); 503 put_nfs_open_context(data->args.context);
530 if (data->pages.pagevec != data->pages.page_array) 504 if (data->pages.pagevec != data->pages.page_array)
531 kfree(data->pages.pagevec); 505 kfree(data->pages.pagevec);
532 if (data == &pageio_header->rpc_data) {
533 data->header = NULL;
534 data = NULL;
535 }
536 if (atomic_dec_and_test(&hdr->refcnt)) 506 if (atomic_dec_and_test(&hdr->refcnt))
537 hdr->completion_ops->completion(hdr); 507 hdr->completion_ops->completion(hdr);
538 /* Note: we only free the rpc_task after callbacks are done.
539 * See the comment in rpc_free_task() for why
540 */
541 kfree(data);
542} 508}
543EXPORT_SYMBOL_GPL(nfs_pgio_data_release); 509EXPORT_SYMBOL_GPL(nfs_pgio_data_destroy);
544 510
545/** 511/**
546 * nfs_pgio_rpcsetup - Set up arguments for a pageio call 512 * nfs_pgio_rpcsetup - Set up arguments for a pageio call
@@ -655,8 +621,7 @@ static int nfs_pgio_error(struct nfs_pageio_descriptor *desc,
655 struct nfs_pgio_header *hdr) 621 struct nfs_pgio_header *hdr)
656{ 622{
657 set_bit(NFS_IOHDR_REDO, &hdr->flags); 623 set_bit(NFS_IOHDR_REDO, &hdr->flags);
658 nfs_pgio_data_release(hdr->data); 624 nfs_pgio_data_destroy(&hdr->data);
659 hdr->data = NULL;
660 desc->pg_completion_ops->error_cleanup(&desc->pg_list); 625 desc->pg_completion_ops->error_cleanup(&desc->pg_list);
661 return -ENOMEM; 626 return -ENOMEM;
662} 627}
@@ -670,7 +635,7 @@ static void nfs_pgio_release(void *calldata)
670 struct nfs_pgio_data *data = calldata; 635 struct nfs_pgio_data *data = calldata;
671 if (data->header->rw_ops->rw_release) 636 if (data->header->rw_ops->rw_release)
672 data->header->rw_ops->rw_release(data); 637 data->header->rw_ops->rw_release(data);
673 nfs_pgio_data_release(data); 638 nfs_pgio_data_destroy(data);
674} 639}
675 640
676/** 641/**
@@ -746,11 +711,11 @@ int nfs_generic_pgio(struct nfs_pageio_descriptor *desc,
746 struct list_head *head = &desc->pg_list; 711 struct list_head *head = &desc->pg_list;
747 struct nfs_commit_info cinfo; 712 struct nfs_commit_info cinfo;
748 713
749 data = nfs_pgio_data_alloc(hdr, nfs_page_array_len(desc->pg_base, 714 if (!nfs_pgio_data_init(hdr, nfs_page_array_len(desc->pg_base,
750 desc->pg_count)); 715 desc->pg_count)))
751 if (!data)
752 return nfs_pgio_error(desc, hdr); 716 return nfs_pgio_error(desc, hdr);
753 717
718 data = &hdr->data;
754 nfs_init_cinfo(&cinfo, desc->pg_inode, desc->pg_dreq); 719 nfs_init_cinfo(&cinfo, desc->pg_inode, desc->pg_dreq);
755 pages = data->pages.pagevec; 720 pages = data->pages.pagevec;
756 while (!list_empty(head)) { 721 while (!list_empty(head)) {
@@ -766,7 +731,6 @@ int nfs_generic_pgio(struct nfs_pageio_descriptor *desc,
766 731
767 /* Set up the argument struct */ 732 /* Set up the argument struct */
768 nfs_pgio_rpcsetup(data, desc->pg_count, 0, desc->pg_ioflags, &cinfo); 733 nfs_pgio_rpcsetup(data, desc->pg_count, 0, desc->pg_ioflags, &cinfo);
769 hdr->data = data;
770 desc->pg_rpc_callops = &nfs_pgio_common_ops; 734 desc->pg_rpc_callops = &nfs_pgio_common_ops;
771 return 0; 735 return 0;
772} 736}
@@ -774,22 +738,20 @@ EXPORT_SYMBOL_GPL(nfs_generic_pgio);
774 738
775static int nfs_generic_pg_pgios(struct nfs_pageio_descriptor *desc) 739static int nfs_generic_pg_pgios(struct nfs_pageio_descriptor *desc)
776{ 740{
777 struct nfs_rw_header *rw_hdr;
778 struct nfs_pgio_header *hdr; 741 struct nfs_pgio_header *hdr;
779 int ret; 742 int ret;
780 743
781 rw_hdr = nfs_rw_header_alloc(desc->pg_rw_ops); 744 hdr = nfs_pgio_header_alloc(desc->pg_rw_ops);
782 if (!rw_hdr) { 745 if (!hdr) {
783 desc->pg_completion_ops->error_cleanup(&desc->pg_list); 746 desc->pg_completion_ops->error_cleanup(&desc->pg_list);
784 return -ENOMEM; 747 return -ENOMEM;
785 } 748 }
786 hdr = &rw_hdr->header; 749 nfs_pgheader_init(desc, hdr, nfs_pgio_header_free);
787 nfs_pgheader_init(desc, hdr, nfs_rw_header_free);
788 atomic_inc(&hdr->refcnt); 750 atomic_inc(&hdr->refcnt);
789 ret = nfs_generic_pgio(desc, hdr); 751 ret = nfs_generic_pgio(desc, hdr);
790 if (ret == 0) 752 if (ret == 0)
791 ret = nfs_initiate_pgio(NFS_CLIENT(hdr->inode), 753 ret = nfs_initiate_pgio(NFS_CLIENT(hdr->inode),
792 hdr->data, desc->pg_rpc_callops, 754 &hdr->data, desc->pg_rpc_callops,
793 desc->pg_ioflags, 0); 755 desc->pg_ioflags, 0);
794 if (atomic_dec_and_test(&hdr->refcnt)) 756 if (atomic_dec_and_test(&hdr->refcnt))
795 hdr->completion_ops->completion(hdr); 757 hdr->completion_ops->completion(hdr);
diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c
index 6fdcd233d6f7..067104cce181 100644
--- a/fs/nfs/pnfs.c
+++ b/fs/nfs/pnfs.c
@@ -1546,7 +1546,7 @@ pnfs_write_through_mds(struct nfs_pageio_descriptor *desc,
1546 nfs_pageio_reset_write_mds(desc); 1546 nfs_pageio_reset_write_mds(desc);
1547 desc->pg_recoalesce = 1; 1547 desc->pg_recoalesce = 1;
1548 } 1548 }
1549 nfs_pgio_data_release(data); 1549 nfs_pgio_data_destroy(data);
1550} 1550}
1551 1551
1552static enum pnfs_try_status 1552static enum pnfs_try_status
@@ -1575,7 +1575,7 @@ static void
1575pnfs_do_write(struct nfs_pageio_descriptor *desc, 1575pnfs_do_write(struct nfs_pageio_descriptor *desc,
1576 struct nfs_pgio_header *hdr, int how) 1576 struct nfs_pgio_header *hdr, int how)
1577{ 1577{
1578 struct nfs_pgio_data *data = hdr->data; 1578 struct nfs_pgio_data *data = &hdr->data;
1579 const struct rpc_call_ops *call_ops = desc->pg_rpc_callops; 1579 const struct rpc_call_ops *call_ops = desc->pg_rpc_callops;
1580 struct pnfs_layout_segment *lseg = desc->pg_lseg; 1580 struct pnfs_layout_segment *lseg = desc->pg_lseg;
1581 enum pnfs_try_status trypnfs; 1581 enum pnfs_try_status trypnfs;
@@ -1590,25 +1590,23 @@ pnfs_do_write(struct nfs_pageio_descriptor *desc,
1590static void pnfs_writehdr_free(struct nfs_pgio_header *hdr) 1590static void pnfs_writehdr_free(struct nfs_pgio_header *hdr)
1591{ 1591{
1592 pnfs_put_lseg(hdr->lseg); 1592 pnfs_put_lseg(hdr->lseg);
1593 nfs_rw_header_free(hdr); 1593 nfs_pgio_header_free(hdr);
1594} 1594}
1595EXPORT_SYMBOL_GPL(pnfs_writehdr_free); 1595EXPORT_SYMBOL_GPL(pnfs_writehdr_free);
1596 1596
1597int 1597int
1598pnfs_generic_pg_writepages(struct nfs_pageio_descriptor *desc) 1598pnfs_generic_pg_writepages(struct nfs_pageio_descriptor *desc)
1599{ 1599{
1600 struct nfs_rw_header *whdr;
1601 struct nfs_pgio_header *hdr; 1600 struct nfs_pgio_header *hdr;
1602 int ret; 1601 int ret;
1603 1602
1604 whdr = nfs_rw_header_alloc(desc->pg_rw_ops); 1603 hdr = nfs_pgio_header_alloc(desc->pg_rw_ops);
1605 if (!whdr) { 1604 if (!hdr) {
1606 desc->pg_completion_ops->error_cleanup(&desc->pg_list); 1605 desc->pg_completion_ops->error_cleanup(&desc->pg_list);
1607 pnfs_put_lseg(desc->pg_lseg); 1606 pnfs_put_lseg(desc->pg_lseg);
1608 desc->pg_lseg = NULL; 1607 desc->pg_lseg = NULL;
1609 return -ENOMEM; 1608 return -ENOMEM;
1610 } 1609 }
1611 hdr = &whdr->header;
1612 nfs_pgheader_init(desc, hdr, pnfs_writehdr_free); 1610 nfs_pgheader_init(desc, hdr, pnfs_writehdr_free);
1613 hdr->lseg = pnfs_get_lseg(desc->pg_lseg); 1611 hdr->lseg = pnfs_get_lseg(desc->pg_lseg);
1614 atomic_inc(&hdr->refcnt); 1612 atomic_inc(&hdr->refcnt);
@@ -1696,7 +1694,7 @@ pnfs_read_through_mds(struct nfs_pageio_descriptor *desc,
1696 nfs_pageio_reset_read_mds(desc); 1694 nfs_pageio_reset_read_mds(desc);
1697 desc->pg_recoalesce = 1; 1695 desc->pg_recoalesce = 1;
1698 } 1696 }
1699 nfs_pgio_data_release(data); 1697 nfs_pgio_data_destroy(data);
1700} 1698}
1701 1699
1702/* 1700/*
@@ -1727,7 +1725,7 @@ pnfs_try_to_read_data(struct nfs_pgio_data *rdata,
1727static void 1725static void
1728pnfs_do_read(struct nfs_pageio_descriptor *desc, struct nfs_pgio_header *hdr) 1726pnfs_do_read(struct nfs_pageio_descriptor *desc, struct nfs_pgio_header *hdr)
1729{ 1727{
1730 struct nfs_pgio_data *data = hdr->data; 1728 struct nfs_pgio_data *data = &hdr->data;
1731 const struct rpc_call_ops *call_ops = desc->pg_rpc_callops; 1729 const struct rpc_call_ops *call_ops = desc->pg_rpc_callops;
1732 struct pnfs_layout_segment *lseg = desc->pg_lseg; 1730 struct pnfs_layout_segment *lseg = desc->pg_lseg;
1733 enum pnfs_try_status trypnfs; 1731 enum pnfs_try_status trypnfs;
@@ -1742,26 +1740,24 @@ pnfs_do_read(struct nfs_pageio_descriptor *desc, struct nfs_pgio_header *hdr)
1742static void pnfs_readhdr_free(struct nfs_pgio_header *hdr) 1740static void pnfs_readhdr_free(struct nfs_pgio_header *hdr)
1743{ 1741{
1744 pnfs_put_lseg(hdr->lseg); 1742 pnfs_put_lseg(hdr->lseg);
1745 nfs_rw_header_free(hdr); 1743 nfs_pgio_header_free(hdr);
1746} 1744}
1747EXPORT_SYMBOL_GPL(pnfs_readhdr_free); 1745EXPORT_SYMBOL_GPL(pnfs_readhdr_free);
1748 1746
1749int 1747int
1750pnfs_generic_pg_readpages(struct nfs_pageio_descriptor *desc) 1748pnfs_generic_pg_readpages(struct nfs_pageio_descriptor *desc)
1751{ 1749{
1752 struct nfs_rw_header *rhdr;
1753 struct nfs_pgio_header *hdr; 1750 struct nfs_pgio_header *hdr;
1754 int ret; 1751 int ret;
1755 1752
1756 rhdr = nfs_rw_header_alloc(desc->pg_rw_ops); 1753 hdr = nfs_pgio_header_alloc(desc->pg_rw_ops);
1757 if (!rhdr) { 1754 if (!hdr) {
1758 desc->pg_completion_ops->error_cleanup(&desc->pg_list); 1755 desc->pg_completion_ops->error_cleanup(&desc->pg_list);
1759 ret = -ENOMEM; 1756 ret = -ENOMEM;
1760 pnfs_put_lseg(desc->pg_lseg); 1757 pnfs_put_lseg(desc->pg_lseg);
1761 desc->pg_lseg = NULL; 1758 desc->pg_lseg = NULL;
1762 return ret; 1759 return ret;
1763 } 1760 }
1764 hdr = &rhdr->header;
1765 nfs_pgheader_init(desc, hdr, pnfs_readhdr_free); 1761 nfs_pgheader_init(desc, hdr, pnfs_readhdr_free);
1766 hdr->lseg = pnfs_get_lseg(desc->pg_lseg); 1762 hdr->lseg = pnfs_get_lseg(desc->pg_lseg);
1767 atomic_inc(&hdr->refcnt); 1763 atomic_inc(&hdr->refcnt);
diff --git a/fs/nfs/read.c b/fs/nfs/read.c
index e818a475ca64..d9df4ab3737b 100644
--- a/fs/nfs/read.c
+++ b/fs/nfs/read.c
@@ -33,12 +33,12 @@ static const struct nfs_rw_ops nfs_rw_read_ops;
33 33
34static struct kmem_cache *nfs_rdata_cachep; 34static struct kmem_cache *nfs_rdata_cachep;
35 35
36static struct nfs_rw_header *nfs_readhdr_alloc(void) 36static struct nfs_pgio_header *nfs_readhdr_alloc(void)
37{ 37{
38 return kmem_cache_zalloc(nfs_rdata_cachep, GFP_KERNEL); 38 return kmem_cache_zalloc(nfs_rdata_cachep, GFP_KERNEL);
39} 39}
40 40
41static void nfs_readhdr_free(struct nfs_rw_header *rhdr) 41static void nfs_readhdr_free(struct nfs_pgio_header *rhdr)
42{ 42{
43 kmem_cache_free(nfs_rdata_cachep, rhdr); 43 kmem_cache_free(nfs_rdata_cachep, rhdr);
44} 44}
@@ -404,7 +404,7 @@ out:
404int __init nfs_init_readpagecache(void) 404int __init nfs_init_readpagecache(void)
405{ 405{
406 nfs_rdata_cachep = kmem_cache_create("nfs_read_data", 406 nfs_rdata_cachep = kmem_cache_create("nfs_read_data",
407 sizeof(struct nfs_rw_header), 407 sizeof(struct nfs_pgio_header),
408 0, SLAB_HWCACHE_ALIGN, 408 0, SLAB_HWCACHE_ALIGN,
409 NULL); 409 NULL);
410 if (nfs_rdata_cachep == NULL) 410 if (nfs_rdata_cachep == NULL)
diff --git a/fs/nfs/write.c b/fs/nfs/write.c
index 98ff061ccaf3..d694952f0071 100644
--- a/fs/nfs/write.c
+++ b/fs/nfs/write.c
@@ -70,18 +70,18 @@ void nfs_commit_free(struct nfs_commit_data *p)
70} 70}
71EXPORT_SYMBOL_GPL(nfs_commit_free); 71EXPORT_SYMBOL_GPL(nfs_commit_free);
72 72
73static struct nfs_rw_header *nfs_writehdr_alloc(void) 73static struct nfs_pgio_header *nfs_writehdr_alloc(void)
74{ 74{
75 struct nfs_rw_header *p = mempool_alloc(nfs_wdata_mempool, GFP_NOIO); 75 struct nfs_pgio_header *p = mempool_alloc(nfs_wdata_mempool, GFP_NOIO);
76 76
77 if (p) 77 if (p)
78 memset(p, 0, sizeof(*p)); 78 memset(p, 0, sizeof(*p));
79 return p; 79 return p;
80} 80}
81 81
82static void nfs_writehdr_free(struct nfs_rw_header *whdr) 82static void nfs_writehdr_free(struct nfs_pgio_header *hdr)
83{ 83{
84 mempool_free(whdr, nfs_wdata_mempool); 84 mempool_free(hdr, nfs_wdata_mempool);
85} 85}
86 86
87static void nfs_context_set_write_error(struct nfs_open_context *ctx, int error) 87static void nfs_context_set_write_error(struct nfs_open_context *ctx, int error)
@@ -1655,7 +1655,7 @@ int nfs_migrate_page(struct address_space *mapping, struct page *newpage,
1655int __init nfs_init_writepagecache(void) 1655int __init nfs_init_writepagecache(void)
1656{ 1656{
1657 nfs_wdata_cachep = kmem_cache_create("nfs_write_data", 1657 nfs_wdata_cachep = kmem_cache_create("nfs_write_data",
1658 sizeof(struct nfs_rw_header), 1658 sizeof(struct nfs_pgio_header),
1659 0, SLAB_HWCACHE_ALIGN, 1659 0, SLAB_HWCACHE_ALIGN,
1660 NULL); 1660 NULL);
1661 if (nfs_wdata_cachep == NULL) 1661 if (nfs_wdata_cachep == NULL)