diff options
author | Weston Andros Adamson <dros@primarydata.com> | 2014-06-09 11:48:33 -0400 |
---|---|---|
committer | Trond Myklebust <trond.myklebust@primarydata.com> | 2014-06-24 18:46:59 -0400 |
commit | 1e7f3a485922211b6e4a082ebc6bf05810b0b6ea (patch) | |
tree | 409983ab4e7f9e880f31afd0648eb3ca039e1b5a /fs/nfs | |
parent | 66b068604903849c5dee3842eb72564064c64c72 (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.c | 8 | ||||
-rw-r--r-- | fs/nfs/internal.h | 6 | ||||
-rw-r--r-- | fs/nfs/pagelist.c | 94 | ||||
-rw-r--r-- | fs/nfs/pnfs.c | 24 | ||||
-rw-r--r-- | fs/nfs/read.c | 6 | ||||
-rw-r--r-- | fs/nfs/write.c | 10 |
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); | |||
238 | int nfs_iocounter_wait(struct nfs_io_counter *c); | 238 | int nfs_iocounter_wait(struct nfs_io_counter *c); |
239 | 239 | ||
240 | extern const struct nfs_pageio_ops nfs_pgio_rw_ops; | 240 | extern const struct nfs_pageio_ops nfs_pgio_rw_ops; |
241 | struct nfs_rw_header *nfs_rw_header_alloc(const struct nfs_rw_ops *); | 241 | struct nfs_pgio_header *nfs_pgio_header_alloc(const struct nfs_rw_ops *); |
242 | void nfs_rw_header_free(struct nfs_pgio_header *); | 242 | void nfs_pgio_header_free(struct nfs_pgio_header *); |
243 | void nfs_pgio_data_release(struct nfs_pgio_data *); | 243 | void nfs_pgio_data_destroy(struct nfs_pgio_data *); |
244 | int nfs_generic_pgio(struct nfs_pageio_descriptor *, struct nfs_pgio_header *); | 244 | int nfs_generic_pgio(struct nfs_pageio_descriptor *, struct nfs_pgio_header *); |
245 | int nfs_initiate_pgio(struct rpc_clnt *, struct nfs_pgio_data *, | 245 | int 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 | } |
453 | EXPORT_SYMBOL_GPL(nfs_generic_pg_test); | 453 | EXPORT_SYMBOL_GPL(nfs_generic_pg_test); |
454 | 454 | ||
455 | static inline struct nfs_rw_header *NFS_RW_HEADER(struct nfs_pgio_header *hdr) | 455 | struct 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 | */ | ||
464 | struct 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 | } |
478 | EXPORT_SYMBOL_GPL(nfs_rw_header_alloc); | 467 | EXPORT_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 | */ |
484 | void nfs_rw_header_free(struct nfs_pgio_header *hdr) | 473 | void 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 | } |
488 | EXPORT_SYMBOL_GPL(nfs_rw_header_free); | 477 | EXPORT_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 | */ |
495 | static struct nfs_pgio_data *nfs_pgio_data_alloc(struct nfs_pgio_header *hdr, | 484 | static 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 | } |
516 | out: | 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 | */ |
524 | void nfs_pgio_data_release(struct nfs_pgio_data *data) | 499 | void 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 | } |
543 | EXPORT_SYMBOL_GPL(nfs_pgio_data_release); | 509 | EXPORT_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 | ||
775 | static int nfs_generic_pg_pgios(struct nfs_pageio_descriptor *desc) | 739 | static 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 | ||
1552 | static enum pnfs_try_status | 1552 | static enum pnfs_try_status |
@@ -1575,7 +1575,7 @@ static void | |||
1575 | pnfs_do_write(struct nfs_pageio_descriptor *desc, | 1575 | pnfs_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, | |||
1590 | static void pnfs_writehdr_free(struct nfs_pgio_header *hdr) | 1590 | static 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 | } |
1595 | EXPORT_SYMBOL_GPL(pnfs_writehdr_free); | 1595 | EXPORT_SYMBOL_GPL(pnfs_writehdr_free); |
1596 | 1596 | ||
1597 | int | 1597 | int |
1598 | pnfs_generic_pg_writepages(struct nfs_pageio_descriptor *desc) | 1598 | pnfs_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, | |||
1727 | static void | 1725 | static void |
1728 | pnfs_do_read(struct nfs_pageio_descriptor *desc, struct nfs_pgio_header *hdr) | 1726 | pnfs_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) | |||
1742 | static void pnfs_readhdr_free(struct nfs_pgio_header *hdr) | 1740 | static 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 | } |
1747 | EXPORT_SYMBOL_GPL(pnfs_readhdr_free); | 1745 | EXPORT_SYMBOL_GPL(pnfs_readhdr_free); |
1748 | 1746 | ||
1749 | int | 1747 | int |
1750 | pnfs_generic_pg_readpages(struct nfs_pageio_descriptor *desc) | 1748 | pnfs_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 | ||
34 | static struct kmem_cache *nfs_rdata_cachep; | 34 | static struct kmem_cache *nfs_rdata_cachep; |
35 | 35 | ||
36 | static struct nfs_rw_header *nfs_readhdr_alloc(void) | 36 | static 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 | ||
41 | static void nfs_readhdr_free(struct nfs_rw_header *rhdr) | 41 | static 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: | |||
404 | int __init nfs_init_readpagecache(void) | 404 | int __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 | } |
71 | EXPORT_SYMBOL_GPL(nfs_commit_free); | 71 | EXPORT_SYMBOL_GPL(nfs_commit_free); |
72 | 72 | ||
73 | static struct nfs_rw_header *nfs_writehdr_alloc(void) | 73 | static 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 | ||
82 | static void nfs_writehdr_free(struct nfs_rw_header *whdr) | 82 | static 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 | ||
87 | static void nfs_context_set_write_error(struct nfs_open_context *ctx, int error) | 87 | static 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, | |||
1655 | int __init nfs_init_writepagecache(void) | 1655 | int __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) |