|
@@ -664,11 +664,11 @@ void nfs_pageio_init(struct nfs_pageio_descriptor *desc,
|
|
const struct nfs_pgio_completion_ops *compl_ops,
|
|
const struct nfs_pgio_completion_ops *compl_ops,
|
|
const struct nfs_rw_ops *rw_ops,
|
|
const struct nfs_rw_ops *rw_ops,
|
|
size_t bsize,
|
|
size_t bsize,
|
|
- int io_flags)
|
|
|
|
|
|
+ int io_flags,
|
|
|
|
+ gfp_t gfp_flags)
|
|
{
|
|
{
|
|
struct nfs_pgio_mirror *new;
|
|
struct nfs_pgio_mirror *new;
|
|
int i;
|
|
int i;
|
|
- gfp_t gfp_flags = GFP_KERNEL;
|
|
|
|
|
|
|
|
desc->pg_moreio = 0;
|
|
desc->pg_moreio = 0;
|
|
desc->pg_inode = inode;
|
|
desc->pg_inode = inode;
|
|
@@ -688,8 +688,6 @@ void nfs_pageio_init(struct nfs_pageio_descriptor *desc,
|
|
if (pg_ops->pg_get_mirror_count) {
|
|
if (pg_ops->pg_get_mirror_count) {
|
|
/* until we have a request, we don't have an lseg and no
|
|
/* until we have a request, we don't have an lseg and no
|
|
* idea how many mirrors there will be */
|
|
* idea how many mirrors there will be */
|
|
- if (desc->pg_rw_ops->rw_mode == FMODE_WRITE)
|
|
|
|
- gfp_flags = GFP_NOIO;
|
|
|
|
new = kcalloc(NFS_PAGEIO_DESCRIPTOR_MIRROR_MAX,
|
|
new = kcalloc(NFS_PAGEIO_DESCRIPTOR_MIRROR_MAX,
|
|
sizeof(struct nfs_pgio_mirror), gfp_flags);
|
|
sizeof(struct nfs_pgio_mirror), gfp_flags);
|
|
desc->pg_mirrors_dynamic = new;
|
|
desc->pg_mirrors_dynamic = new;
|
|
@@ -753,7 +751,7 @@ int nfs_generic_pgio(struct nfs_pageio_descriptor *desc,
|
|
if (pagecount <= ARRAY_SIZE(pg_array->page_array))
|
|
if (pagecount <= ARRAY_SIZE(pg_array->page_array))
|
|
pg_array->pagevec = pg_array->page_array;
|
|
pg_array->pagevec = pg_array->page_array;
|
|
else {
|
|
else {
|
|
- if (desc->pg_rw_ops->rw_mode == FMODE_WRITE)
|
|
|
|
|
|
+ if (hdr->rw_mode == FMODE_WRITE)
|
|
gfp_flags = GFP_NOIO;
|
|
gfp_flags = GFP_NOIO;
|
|
pg_array->pagevec = kcalloc(pagecount, sizeof(struct page *), gfp_flags);
|
|
pg_array->pagevec = kcalloc(pagecount, sizeof(struct page *), gfp_flags);
|
|
if (!pg_array->pagevec) {
|
|
if (!pg_array->pagevec) {
|