diff options
author | Bryan Schumaker <bjschuma@netapp.com> | 2012-06-20 15:53:48 -0400 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2012-06-29 11:46:46 -0400 |
commit | 57208fa7e51ca16cd68de8e8bf482f16b06d3ea1 (patch) | |
tree | c34e830385439ac3ec5679c37266c2caa922e9aa /fs/nfs/write.c | |
parent | 1abb50886afe8a126705c93dab2b50c1252a9c19 (diff) |
NFS: Create an write_pageio_init() function
pNFS needs to select a write function based on the layout driver
currently in use, so I let each NFS version decide how to best handle
initializing writes.
Signed-off-by: Bryan Schumaker <bjschuma@netapp.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'fs/nfs/write.c')
-rw-r--r-- | fs/nfs/write.c | 18 |
1 files changed, 6 insertions, 12 deletions
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 | { |