mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-14 04:41:26 +00:00
NFS: Cache rpc_ops in struct nfs_pageio_descriptor
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
parent
275acaafd4
commit
50828d7e67
@ -327,6 +327,7 @@ static int nfs_pagein_multi(struct nfs_pageio_descriptor *desc, struct list_head
|
|||||||
} while(nbytes != 0);
|
} while(nbytes != 0);
|
||||||
atomic_set(&req->wb_complete, requests);
|
atomic_set(&req->wb_complete, requests);
|
||||||
ClearPageError(page);
|
ClearPageError(page);
|
||||||
|
desc->pg_rpc_callops = &nfs_read_partial_ops;
|
||||||
return ret;
|
return ret;
|
||||||
out_bad:
|
out_bad:
|
||||||
while (!list_empty(res)) {
|
while (!list_empty(res)) {
|
||||||
@ -367,6 +368,7 @@ static int nfs_pagein_one(struct nfs_pageio_descriptor *desc, struct list_head *
|
|||||||
|
|
||||||
nfs_read_rpcsetup(req, data, desc->pg_count, 0);
|
nfs_read_rpcsetup(req, data, desc->pg_count, 0);
|
||||||
list_add(&data->list, res);
|
list_add(&data->list, res);
|
||||||
|
desc->pg_rpc_callops = &nfs_read_full_ops;
|
||||||
out:
|
out:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -376,19 +378,14 @@ int nfs_generic_pg_readpages(struct nfs_pageio_descriptor *desc)
|
|||||||
LIST_HEAD(head);
|
LIST_HEAD(head);
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (desc->pg_bsize < PAGE_CACHE_SIZE) {
|
if (desc->pg_bsize < PAGE_CACHE_SIZE)
|
||||||
ret = nfs_pagein_multi(desc, &head);
|
ret = nfs_pagein_multi(desc, &head);
|
||||||
if (ret == 0)
|
else
|
||||||
ret = nfs_do_multiple_reads(&head,
|
|
||||||
&nfs_read_partial_ops,
|
|
||||||
desc->pg_lseg);
|
|
||||||
} else {
|
|
||||||
ret = nfs_pagein_one(desc, &head);
|
ret = nfs_pagein_one(desc, &head);
|
||||||
if (ret == 0)
|
|
||||||
ret = nfs_do_multiple_reads(&head,
|
if (ret == 0)
|
||||||
&nfs_read_full_ops,
|
ret = nfs_do_multiple_reads(&head, desc->pg_rpc_callops,
|
||||||
desc->pg_lseg);
|
desc->pg_lseg);
|
||||||
}
|
|
||||||
put_lseg(desc->pg_lseg);
|
put_lseg(desc->pg_lseg);
|
||||||
desc->pg_lseg = NULL;
|
desc->pg_lseg = NULL;
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -975,6 +975,7 @@ static int nfs_flush_multi(struct nfs_pageio_descriptor *desc, struct list_head
|
|||||||
offset += len;
|
offset += len;
|
||||||
} while (nbytes != 0);
|
} while (nbytes != 0);
|
||||||
atomic_set(&req->wb_complete, requests);
|
atomic_set(&req->wb_complete, requests);
|
||||||
|
desc->pg_rpc_callops = &nfs_write_partial_ops;
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
out_bad:
|
out_bad:
|
||||||
@ -1031,6 +1032,7 @@ static int nfs_flush_one(struct nfs_pageio_descriptor *desc, struct list_head *r
|
|||||||
/* Set up the argument struct */
|
/* Set up the argument struct */
|
||||||
nfs_write_rpcsetup(req, data, desc->pg_count, 0, desc->pg_ioflags);
|
nfs_write_rpcsetup(req, data, desc->pg_count, 0, desc->pg_ioflags);
|
||||||
list_add(&data->list, res);
|
list_add(&data->list, res);
|
||||||
|
desc->pg_rpc_callops = &nfs_write_full_ops;
|
||||||
out:
|
out:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -1040,21 +1042,13 @@ int nfs_generic_pg_writepages(struct nfs_pageio_descriptor *desc)
|
|||||||
LIST_HEAD(head);
|
LIST_HEAD(head);
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (desc->pg_bsize < PAGE_CACHE_SIZE) {
|
if (desc->pg_bsize < PAGE_CACHE_SIZE)
|
||||||
ret = nfs_flush_multi(desc, &head);
|
ret = nfs_flush_multi(desc, &head);
|
||||||
if (ret == 0)
|
else
|
||||||
ret = nfs_do_multiple_writes(&head,
|
|
||||||
&nfs_write_partial_ops,
|
|
||||||
desc->pg_lseg,
|
|
||||||
desc->pg_ioflags);
|
|
||||||
} else {
|
|
||||||
ret = nfs_flush_one(desc, &head);
|
ret = nfs_flush_one(desc, &head);
|
||||||
if (ret == 0)
|
if (ret == 0)
|
||||||
ret = nfs_do_multiple_writes(&head,
|
ret = nfs_do_multiple_writes(&head, desc->pg_rpc_callops,
|
||||||
&nfs_write_full_ops,
|
desc->pg_lseg, desc->pg_ioflags);
|
||||||
desc->pg_lseg,
|
|
||||||
desc->pg_ioflags);
|
|
||||||
}
|
|
||||||
put_lseg(desc->pg_lseg);
|
put_lseg(desc->pg_lseg);
|
||||||
desc->pg_lseg = NULL;
|
desc->pg_lseg = NULL;
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -74,6 +74,7 @@ struct nfs_pageio_descriptor {
|
|||||||
const struct nfs_pageio_ops *pg_ops;
|
const struct nfs_pageio_ops *pg_ops;
|
||||||
int pg_ioflags;
|
int pg_ioflags;
|
||||||
int pg_error;
|
int pg_error;
|
||||||
|
const struct rpc_call_ops *pg_rpc_callops;
|
||||||
struct pnfs_layout_segment *pg_lseg;
|
struct pnfs_layout_segment *pg_lseg;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user