aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/nfs/internal.h2
-rw-r--r--fs/nfs/nfs3proc.c1
-rw-r--r--fs/nfs/nfs4proc.c1
-rw-r--r--fs/nfs/pnfs.c11
-rw-r--r--fs/nfs/pnfs.h6
-rw-r--r--fs/nfs/proc.c1
-rw-r--r--fs/nfs/write.c18
-rw-r--r--include/linux/nfs_xdr.h2
8 files changed, 20 insertions, 22 deletions
diff --git a/fs/nfs/internal.h b/fs/nfs/internal.h
index b3121123b40d..7edc172c371e 100644
--- a/fs/nfs/internal.h
+++ b/fs/nfs/internal.h
@@ -320,7 +320,7 @@ extern struct nfs_write_header *nfs_writehdr_alloc(void);
320extern void nfs_writehdr_free(struct nfs_pgio_header *hdr); 320extern void nfs_writehdr_free(struct nfs_pgio_header *hdr);
321extern int nfs_generic_flush(struct nfs_pageio_descriptor *desc, 321extern int nfs_generic_flush(struct nfs_pageio_descriptor *desc,
322 struct nfs_pgio_header *hdr); 322 struct nfs_pgio_header *hdr);
323extern void nfs_pageio_init_write_mds(struct nfs_pageio_descriptor *pgio, 323extern void nfs_pageio_init_write(struct nfs_pageio_descriptor *pgio,
324 struct inode *inode, int ioflags, 324 struct inode *inode, int ioflags,
325 const struct nfs_pgio_completion_ops *compl_ops); 325 const struct nfs_pgio_completion_ops *compl_ops);
326extern void nfs_pageio_reset_write_mds(struct nfs_pageio_descriptor *pgio); 326extern void nfs_pageio_reset_write_mds(struct nfs_pageio_descriptor *pgio);
diff --git a/fs/nfs/nfs3proc.c b/fs/nfs/nfs3proc.c
index 9864d05432da..f3344f7f46a9 100644
--- a/fs/nfs/nfs3proc.c
+++ b/fs/nfs/nfs3proc.c
@@ -925,6 +925,7 @@ const struct nfs_rpc_ops nfs_v3_clientops = {
925 .read_rpc_prepare = nfs3_proc_read_rpc_prepare, 925 .read_rpc_prepare = nfs3_proc_read_rpc_prepare,
926 .read_done = nfs3_read_done, 926 .read_done = nfs3_read_done,
927 .write_setup = nfs3_proc_write_setup, 927 .write_setup = nfs3_proc_write_setup,
928 .write_pageio_init = nfs_pageio_init_write,
928 .write_rpc_prepare = nfs3_proc_write_rpc_prepare, 929 .write_rpc_prepare = nfs3_proc_write_rpc_prepare,
929 .write_done = nfs3_write_done, 930 .write_done = nfs3_write_done,
930 .commit_setup = nfs3_proc_commit_setup, 931 .commit_setup = nfs3_proc_commit_setup,
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
index f99cf71f4e36..7d387cb8ceb5 100644
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -6796,6 +6796,7 @@ const struct nfs_rpc_ops nfs_v4_clientops = {
6796 .read_rpc_prepare = nfs4_proc_read_rpc_prepare, 6796 .read_rpc_prepare = nfs4_proc_read_rpc_prepare,
6797 .read_done = nfs4_read_done, 6797 .read_done = nfs4_read_done,
6798 .write_setup = nfs4_proc_write_setup, 6798 .write_setup = nfs4_proc_write_setup,
6799 .write_pageio_init = pnfs_pageio_init_write,
6799 .write_rpc_prepare = nfs4_proc_write_rpc_prepare, 6800 .write_rpc_prepare = nfs4_proc_write_rpc_prepare,
6800 .write_done = nfs4_write_done, 6801 .write_done = nfs4_write_done,
6801 .commit_setup = nfs4_proc_commit_setup, 6802 .commit_setup = nfs4_proc_commit_setup,
diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c
index 9c830603a16c..2617831afd39 100644
--- a/fs/nfs/pnfs.c
+++ b/fs/nfs/pnfs.c
@@ -1222,7 +1222,7 @@ pnfs_pageio_init_read(struct nfs_pageio_descriptor *pgio, struct inode *inode,
1222 nfs_pageio_init(pgio, inode, ld->pg_read_ops, compl_ops, server->rsize, 0); 1222 nfs_pageio_init(pgio, inode, ld->pg_read_ops, compl_ops, server->rsize, 0);
1223} 1223}
1224 1224
1225bool 1225void
1226pnfs_pageio_init_write(struct nfs_pageio_descriptor *pgio, struct inode *inode, 1226pnfs_pageio_init_write(struct nfs_pageio_descriptor *pgio, struct inode *inode,
1227 int ioflags, 1227 int ioflags,
1228 const struct nfs_pgio_completion_ops *compl_ops) 1228 const struct nfs_pgio_completion_ops *compl_ops)
@@ -1231,10 +1231,9 @@ pnfs_pageio_init_write(struct nfs_pageio_descriptor *pgio, struct inode *inode,
1231 struct pnfs_layoutdriver_type *ld = server->pnfs_curr_ld; 1231 struct pnfs_layoutdriver_type *ld = server->pnfs_curr_ld;
1232 1232
1233 if (ld == NULL) 1233 if (ld == NULL)
1234 return false; 1234 nfs_pageio_init_write(pgio, inode, ioflags, compl_ops);
1235 nfs_pageio_init(pgio, inode, ld->pg_write_ops, compl_ops, 1235 else
1236 server->wsize, ioflags); 1236 nfs_pageio_init(pgio, inode, ld->pg_write_ops, compl_ops, server->wsize, ioflags);
1237 return true;
1238} 1237}
1239 1238
1240bool 1239bool
@@ -1271,7 +1270,7 @@ int pnfs_write_done_resend_to_mds(struct inode *inode,
1271 LIST_HEAD(failed); 1270 LIST_HEAD(failed);
1272 1271
1273 /* Resend all requests through the MDS */ 1272 /* Resend all requests through the MDS */
1274 nfs_pageio_init_write_mds(&pgio, inode, FLUSH_STABLE, compl_ops); 1273 nfs_pageio_init_write(&pgio, inode, FLUSH_STABLE, compl_ops);
1275 while (!list_empty(head)) { 1274 while (!list_empty(head)) {
1276 struct nfs_page *req = nfs_list_entry(head->next); 1275 struct nfs_page *req = nfs_list_entry(head->next);
1277 1276
diff --git a/fs/nfs/pnfs.h b/fs/nfs/pnfs.h
index 80ee8919dd5e..592beb02c955 100644
--- a/fs/nfs/pnfs.h
+++ b/fs/nfs/pnfs.h
@@ -180,7 +180,7 @@ void put_lseg(struct pnfs_layout_segment *lseg);
180 180
181void pnfs_pageio_init_read(struct nfs_pageio_descriptor *, struct inode *, 181void pnfs_pageio_init_read(struct nfs_pageio_descriptor *, struct inode *,
182 const struct nfs_pgio_completion_ops *); 182 const struct nfs_pgio_completion_ops *);
183bool pnfs_pageio_init_write(struct nfs_pageio_descriptor *, struct inode *, 183void pnfs_pageio_init_write(struct nfs_pageio_descriptor *, struct inode *,
184 int, const struct nfs_pgio_completion_ops *); 184 int, const struct nfs_pgio_completion_ops *);
185 185
186void set_pnfs_layoutdriver(struct nfs_server *, const struct nfs_fh *, u32); 186void set_pnfs_layoutdriver(struct nfs_server *, const struct nfs_fh *, u32);
@@ -444,10 +444,10 @@ static inline void pnfs_pageio_init_read(struct nfs_pageio_descriptor *pgio, str
444 nfs_pageio_init_read(pgio, inode, compl_ops); 444 nfs_pageio_init_read(pgio, inode, compl_ops);
445} 445}
446 446
447static inline bool pnfs_pageio_init_write(struct nfs_pageio_descriptor *pgio, struct inode *inode, int ioflags, 447static inline void pnfs_pageio_init_write(struct nfs_pageio_descriptor *pgio, struct inode *inode, int ioflags,
448 const struct nfs_pgio_completion_ops *compl_ops) 448 const struct nfs_pgio_completion_ops *compl_ops)
449{ 449{
450 return false; 450 nfs_pageio_init_write(pgio, inode, ioflags, compl_ops);
451} 451}
452 452
453static inline int 453static inline int
diff --git a/fs/nfs/proc.c b/fs/nfs/proc.c
index 6fea6e107bc3..cf6499742b10 100644
--- a/fs/nfs/proc.c
+++ b/fs/nfs/proc.c
@@ -782,6 +782,7 @@ const struct nfs_rpc_ops nfs_v2_clientops = {
782 .read_rpc_prepare = nfs_proc_read_rpc_prepare, 782 .read_rpc_prepare = nfs_proc_read_rpc_prepare,
783 .read_done = nfs_read_done, 783 .read_done = nfs_read_done,
784 .write_setup = nfs_proc_write_setup, 784 .write_setup = nfs_proc_write_setup,
785 .write_pageio_init = nfs_pageio_init_write,
785 .write_rpc_prepare = nfs_proc_write_rpc_prepare, 786 .write_rpc_prepare = nfs_proc_write_rpc_prepare,
786 .write_done = nfs_write_done, 787 .write_done = nfs_write_done,
787 .commit_setup = nfs_proc_commit_setup, 788 .commit_setup = nfs_proc_commit_setup,
diff --git a/fs/nfs/write.c b/fs/nfs/write.c
index f163355b9618..c11fb0025f0b 100644
--- a/fs/nfs/write.c
+++ b/fs/nfs/write.c
@@ -336,8 +336,10 @@ static int nfs_writepage_locked(struct page *page, struct writeback_control *wbc
336 struct nfs_pageio_descriptor pgio; 336 struct nfs_pageio_descriptor pgio;
337 int err; 337 int err;
338 338
339 nfs_pageio_init_write(&pgio, page->mapping->host, wb_priority(wbc), 339 NFS_PROTO(page->mapping->host)->write_pageio_init(&pgio,
340 &nfs_async_write_completion_ops); 340 page->mapping->host,
341 wb_priority(wbc),
342 &nfs_async_write_completion_ops);
341 err = nfs_do_writepage(page, wbc, &pgio); 343 err = nfs_do_writepage(page, wbc, &pgio);
342 nfs_pageio_complete(&pgio); 344 nfs_pageio_complete(&pgio);
343 if (err < 0) 345 if (err < 0)
@@ -380,8 +382,7 @@ int nfs_writepages(struct address_space *mapping, struct writeback_control *wbc)
380 382
381 nfs_inc_stats(inode, NFSIOS_VFSWRITEPAGES); 383 nfs_inc_stats(inode, NFSIOS_VFSWRITEPAGES);
382 384
383 nfs_pageio_init_write(&pgio, inode, wb_priority(wbc), 385 NFS_PROTO(inode)->write_pageio_init(&pgio, inode, wb_priority(wbc), &nfs_async_write_completion_ops);
384 &nfs_async_write_completion_ops);
385 err = write_cache_pages(mapping, wbc, nfs_writepages_callback, &pgio); 386 err = write_cache_pages(mapping, wbc, nfs_writepages_callback, &pgio);
386 nfs_pageio_complete(&pgio); 387 nfs_pageio_complete(&pgio);
387 388
@@ -1202,7 +1203,7 @@ static const struct nfs_pageio_ops nfs_pageio_write_ops = {
1202 .pg_doio = nfs_generic_pg_writepages, 1203 .pg_doio = nfs_generic_pg_writepages,
1203}; 1204};
1204 1205
1205void nfs_pageio_init_write_mds(struct nfs_pageio_descriptor *pgio, 1206void nfs_pageio_init_write(struct nfs_pageio_descriptor *pgio,
1206 struct inode *inode, int ioflags, 1207 struct inode *inode, int ioflags,
1207 const struct nfs_pgio_completion_ops *compl_ops) 1208 const struct nfs_pgio_completion_ops *compl_ops)
1208{ 1209{
@@ -1217,13 +1218,6 @@ void nfs_pageio_reset_write_mds(struct nfs_pageio_descriptor *pgio)
1217} 1218}
1218EXPORT_SYMBOL_GPL(nfs_pageio_reset_write_mds); 1219EXPORT_SYMBOL_GPL(nfs_pageio_reset_write_mds);
1219 1220
1220void nfs_pageio_init_write(struct nfs_pageio_descriptor *pgio,
1221 struct inode *inode, int ioflags,
1222 const struct nfs_pgio_completion_ops *compl_ops)
1223{
1224 if (!pnfs_pageio_init_write(pgio, inode, ioflags, compl_ops))
1225 nfs_pageio_init_write_mds(pgio, inode, ioflags, compl_ops);
1226}
1227 1221
1228void nfs_write_prepare(struct rpc_task *task, void *calldata) 1222void nfs_write_prepare(struct rpc_task *task, void *calldata)
1229{ 1223{
diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h
index e00b8b3c334e..8ed8ec628290 100644
--- a/include/linux/nfs_xdr.h
+++ b/include/linux/nfs_xdr.h
@@ -1413,6 +1413,8 @@ struct nfs_rpc_ops {
1413 void (*read_rpc_prepare)(struct rpc_task *, struct nfs_read_data *); 1413 void (*read_rpc_prepare)(struct rpc_task *, struct nfs_read_data *);
1414 int (*read_done) (struct rpc_task *, struct nfs_read_data *); 1414 int (*read_done) (struct rpc_task *, struct nfs_read_data *);
1415 void (*write_setup) (struct nfs_write_data *, struct rpc_message *); 1415 void (*write_setup) (struct nfs_write_data *, struct rpc_message *);
1416 void (*write_pageio_init)(struct nfs_pageio_descriptor *, struct inode *, int,
1417 const struct nfs_pgio_completion_ops *);
1416 void (*write_rpc_prepare)(struct rpc_task *, struct nfs_write_data *); 1418 void (*write_rpc_prepare)(struct rpc_task *, struct nfs_write_data *);
1417 int (*write_done) (struct rpc_task *, struct nfs_write_data *); 1419 int (*write_done) (struct rpc_task *, struct nfs_write_data *);
1418 void (*commit_setup) (struct nfs_commit_data *, struct rpc_message *); 1420 void (*commit_setup) (struct nfs_commit_data *, struct rpc_message *);