|
29 | 29 | static struct kmem_cache *nfs_page_cachep; |
30 | 30 | static const struct rpc_call_ops nfs_pgio_common_ops; |
31 | 31 |
|
32 | | -static bool nfs_pgarray_set(struct nfs_page_array *p, unsigned int pagecount, |
33 | | - gfp_t gfp_flags) |
34 | | -{ |
35 | | - p->npages = pagecount; |
36 | | - if (pagecount <= ARRAY_SIZE(p->page_array)) |
37 | | - p->pagevec = p->page_array; |
38 | | - else { |
39 | | - p->pagevec = kcalloc(pagecount, sizeof(struct page *), gfp_flags); |
40 | | - if (!p->pagevec) |
41 | | - p->npages = 0; |
42 | | - } |
43 | | - return p->pagevec != NULL; |
44 | | -} |
45 | | - |
46 | 32 | struct nfs_pgio_mirror * |
47 | 33 | nfs_pgio_current_mirror(struct nfs_pageio_descriptor *desc) |
48 | 34 | { |
@@ -758,16 +744,24 @@ int nfs_generic_pgio(struct nfs_pageio_descriptor *desc, |
758 | 744 | *last_page; |
759 | 745 | struct list_head *head = &mirror->pg_list; |
760 | 746 | struct nfs_commit_info cinfo; |
| 747 | + struct nfs_page_array *pg_array = &hdr->page_array; |
761 | 748 | unsigned int pagecount, pageused; |
762 | 749 | gfp_t gfp_flags = GFP_KERNEL; |
763 | 750 |
|
764 | 751 | pagecount = nfs_page_array_len(mirror->pg_base, mirror->pg_count); |
765 | | - if (desc->pg_rw_ops->rw_mode == FMODE_WRITE) |
766 | | - gfp_flags = GFP_NOIO; |
767 | | - if (!nfs_pgarray_set(&hdr->page_array, pagecount, gfp_flags)) { |
768 | | - nfs_pgio_error(hdr); |
769 | | - desc->pg_error = -ENOMEM; |
770 | | - return desc->pg_error; |
| 752 | + |
| 753 | + if (pagecount <= ARRAY_SIZE(pg_array->page_array)) |
| 754 | + pg_array->pagevec = pg_array->page_array; |
| 755 | + else { |
| 756 | + if (desc->pg_rw_ops->rw_mode == FMODE_WRITE) |
| 757 | + gfp_flags = GFP_NOIO; |
| 758 | + pg_array->pagevec = kcalloc(pagecount, sizeof(struct page *), gfp_flags); |
| 759 | + if (!pg_array->pagevec) { |
| 760 | + pg_array->npages = 0; |
| 761 | + nfs_pgio_error(hdr); |
| 762 | + desc->pg_error = -ENOMEM; |
| 763 | + return desc->pg_error; |
| 764 | + } |
771 | 765 | } |
772 | 766 |
|
773 | 767 | nfs_init_cinfo(&cinfo, desc->pg_inode, desc->pg_dreq); |
|
0 commit comments