diff options
-rw-r--r-- | fs/nfs/internal.h | 2 | ||||
-rw-r--r-- | fs/nfs/nfs3proc.c | 1 | ||||
-rw-r--r-- | fs/nfs/nfs4proc.c | 1 | ||||
-rw-r--r-- | fs/nfs/pnfs.c | 11 | ||||
-rw-r--r-- | fs/nfs/pnfs.h | 6 | ||||
-rw-r--r-- | fs/nfs/proc.c | 1 | ||||
-rw-r--r-- | fs/nfs/write.c | 18 | ||||
-rw-r--r-- | include/linux/nfs_xdr.h | 2 |
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); | |||
320 | extern void nfs_writehdr_free(struct nfs_pgio_header *hdr); | 320 | extern void nfs_writehdr_free(struct nfs_pgio_header *hdr); |
321 | extern int nfs_generic_flush(struct nfs_pageio_descriptor *desc, | 321 | extern int nfs_generic_flush(struct nfs_pageio_descriptor *desc, |
322 | struct nfs_pgio_header *hdr); | 322 | struct nfs_pgio_header *hdr); |
323 | extern void nfs_pageio_init_write_mds(struct nfs_pageio_descriptor *pgio, | 323 | extern 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); |
326 | extern void nfs_pageio_reset_write_mds(struct nfs_pageio_descriptor *pgio); | 326 | extern 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 | ||
1225 | bool | 1225 | void |
1226 | pnfs_pageio_init_write(struct nfs_pageio_descriptor *pgio, struct inode *inode, | 1226 | pnfs_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 | ||
1240 | bool | 1239 | bool |
@@ -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 | ||
181 | void pnfs_pageio_init_read(struct nfs_pageio_descriptor *, struct inode *, | 181 | void pnfs_pageio_init_read(struct nfs_pageio_descriptor *, struct inode *, |
182 | const struct nfs_pgio_completion_ops *); | 182 | const struct nfs_pgio_completion_ops *); |
183 | bool pnfs_pageio_init_write(struct nfs_pageio_descriptor *, struct inode *, | 183 | void 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 | ||
186 | void set_pnfs_layoutdriver(struct nfs_server *, const struct nfs_fh *, u32); | 186 | void 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 | ||
447 | static inline bool pnfs_pageio_init_write(struct nfs_pageio_descriptor *pgio, struct inode *inode, int ioflags, | 447 | static 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 | ||
453 | static inline int | 453 | static 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 | ||
1205 | void nfs_pageio_init_write_mds(struct nfs_pageio_descriptor *pgio, | 1206 | void 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 | } |
1218 | EXPORT_SYMBOL_GPL(nfs_pageio_reset_write_mds); | 1219 | EXPORT_SYMBOL_GPL(nfs_pageio_reset_write_mds); |
1219 | 1220 | ||
1220 | void 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 | ||
1228 | void nfs_write_prepare(struct rpc_task *task, void *calldata) | 1222 | void 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 *); |