Loading fs/nfs/read.c +8 −11 Original line number Diff line number Diff line Loading @@ -327,6 +327,7 @@ static int nfs_pagein_multi(struct nfs_pageio_descriptor *desc, struct list_head } while(nbytes != 0); atomic_set(&req->wb_complete, requests); ClearPageError(page); desc->pg_rpc_callops = &nfs_read_partial_ops; return ret; out_bad: while (!list_empty(res)) { Loading Loading @@ -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); list_add(&data->list, res); desc->pg_rpc_callops = &nfs_read_full_ops; out: return ret; } Loading @@ -376,19 +378,14 @@ int nfs_generic_pg_readpages(struct nfs_pageio_descriptor *desc) LIST_HEAD(head); int ret; if (desc->pg_bsize < PAGE_CACHE_SIZE) { if (desc->pg_bsize < PAGE_CACHE_SIZE) ret = nfs_pagein_multi(desc, &head); if (ret == 0) ret = nfs_do_multiple_reads(&head, &nfs_read_partial_ops, desc->pg_lseg); } else { else ret = nfs_pagein_one(desc, &head); if (ret == 0) ret = nfs_do_multiple_reads(&head, &nfs_read_full_ops, ret = nfs_do_multiple_reads(&head, desc->pg_rpc_callops, desc->pg_lseg); } put_lseg(desc->pg_lseg); desc->pg_lseg = NULL; return ret; Loading fs/nfs/write.c +7 −13 Original line number Diff line number Diff line Loading @@ -975,6 +975,7 @@ static int nfs_flush_multi(struct nfs_pageio_descriptor *desc, struct list_head offset += len; } while (nbytes != 0); atomic_set(&req->wb_complete, requests); desc->pg_rpc_callops = &nfs_write_partial_ops; return ret; out_bad: Loading Loading @@ -1031,6 +1032,7 @@ static int nfs_flush_one(struct nfs_pageio_descriptor *desc, struct list_head *r /* Set up the argument struct */ nfs_write_rpcsetup(req, data, desc->pg_count, 0, desc->pg_ioflags); list_add(&data->list, res); desc->pg_rpc_callops = &nfs_write_full_ops; out: return ret; } Loading @@ -1040,21 +1042,13 @@ int nfs_generic_pg_writepages(struct nfs_pageio_descriptor *desc) LIST_HEAD(head); int ret; if (desc->pg_bsize < PAGE_CACHE_SIZE) { if (desc->pg_bsize < PAGE_CACHE_SIZE) ret = nfs_flush_multi(desc, &head); if (ret == 0) ret = nfs_do_multiple_writes(&head, &nfs_write_partial_ops, desc->pg_lseg, desc->pg_ioflags); } else { else ret = nfs_flush_one(desc, &head); if (ret == 0) ret = nfs_do_multiple_writes(&head, &nfs_write_full_ops, desc->pg_lseg, desc->pg_ioflags); } ret = nfs_do_multiple_writes(&head, desc->pg_rpc_callops, desc->pg_lseg, desc->pg_ioflags); put_lseg(desc->pg_lseg); desc->pg_lseg = NULL; return ret; Loading include/linux/nfs_page.h +1 −0 Original line number Diff line number Diff line Loading @@ -74,6 +74,7 @@ struct nfs_pageio_descriptor { const struct nfs_pageio_ops *pg_ops; int pg_ioflags; int pg_error; const struct rpc_call_ops *pg_rpc_callops; struct pnfs_layout_segment *pg_lseg; }; Loading Loading
fs/nfs/read.c +8 −11 Original line number Diff line number Diff line Loading @@ -327,6 +327,7 @@ static int nfs_pagein_multi(struct nfs_pageio_descriptor *desc, struct list_head } while(nbytes != 0); atomic_set(&req->wb_complete, requests); ClearPageError(page); desc->pg_rpc_callops = &nfs_read_partial_ops; return ret; out_bad: while (!list_empty(res)) { Loading Loading @@ -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); list_add(&data->list, res); desc->pg_rpc_callops = &nfs_read_full_ops; out: return ret; } Loading @@ -376,19 +378,14 @@ int nfs_generic_pg_readpages(struct nfs_pageio_descriptor *desc) LIST_HEAD(head); int ret; if (desc->pg_bsize < PAGE_CACHE_SIZE) { if (desc->pg_bsize < PAGE_CACHE_SIZE) ret = nfs_pagein_multi(desc, &head); if (ret == 0) ret = nfs_do_multiple_reads(&head, &nfs_read_partial_ops, desc->pg_lseg); } else { else ret = nfs_pagein_one(desc, &head); if (ret == 0) ret = nfs_do_multiple_reads(&head, &nfs_read_full_ops, ret = nfs_do_multiple_reads(&head, desc->pg_rpc_callops, desc->pg_lseg); } put_lseg(desc->pg_lseg); desc->pg_lseg = NULL; return ret; Loading
fs/nfs/write.c +7 −13 Original line number Diff line number Diff line Loading @@ -975,6 +975,7 @@ static int nfs_flush_multi(struct nfs_pageio_descriptor *desc, struct list_head offset += len; } while (nbytes != 0); atomic_set(&req->wb_complete, requests); desc->pg_rpc_callops = &nfs_write_partial_ops; return ret; out_bad: Loading Loading @@ -1031,6 +1032,7 @@ static int nfs_flush_one(struct nfs_pageio_descriptor *desc, struct list_head *r /* Set up the argument struct */ nfs_write_rpcsetup(req, data, desc->pg_count, 0, desc->pg_ioflags); list_add(&data->list, res); desc->pg_rpc_callops = &nfs_write_full_ops; out: return ret; } Loading @@ -1040,21 +1042,13 @@ int nfs_generic_pg_writepages(struct nfs_pageio_descriptor *desc) LIST_HEAD(head); int ret; if (desc->pg_bsize < PAGE_CACHE_SIZE) { if (desc->pg_bsize < PAGE_CACHE_SIZE) ret = nfs_flush_multi(desc, &head); if (ret == 0) ret = nfs_do_multiple_writes(&head, &nfs_write_partial_ops, desc->pg_lseg, desc->pg_ioflags); } else { else ret = nfs_flush_one(desc, &head); if (ret == 0) ret = nfs_do_multiple_writes(&head, &nfs_write_full_ops, desc->pg_lseg, desc->pg_ioflags); } ret = nfs_do_multiple_writes(&head, desc->pg_rpc_callops, desc->pg_lseg, desc->pg_ioflags); put_lseg(desc->pg_lseg); desc->pg_lseg = NULL; return ret; Loading
include/linux/nfs_page.h +1 −0 Original line number Diff line number Diff line Loading @@ -74,6 +74,7 @@ struct nfs_pageio_descriptor { const struct nfs_pageio_ops *pg_ops; int pg_ioflags; int pg_error; const struct rpc_call_ops *pg_rpc_callops; struct pnfs_layout_segment *pg_lseg; }; Loading