aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nfs/write.c
diff options
context:
space:
mode:
authorPeng Tao <tao.peng@primarydata.com>2014-08-06 22:15:02 -0400
committerTrond Myklebust <trond.myklebust@primarydata.com>2014-09-10 15:47:00 -0400
commit378520b837cf4da769600b83690d8e825f16a611 (patch)
treeb2561ec480dbfb3e5b481a64aa5ba031d86d04b1 /fs/nfs/write.c
parent61beef75cc5bae119e500c9f25daad8596c7cbe4 (diff)
nfs41: add a helper function to set layoutcommit after commit
Track lwb in nfs_commit_data so that we can use it to setup layoutcommit in commit_done callback. Signed-off-by: Peng Tao <tao.peng@primarydata.com> Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
Diffstat (limited to 'fs/nfs/write.c')
-rw-r--r--fs/nfs/write.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/fs/nfs/write.c b/fs/nfs/write.c
index 175d5d073ccf..3c5638f381cd 100644
--- a/fs/nfs/write.c
+++ b/fs/nfs/write.c
@@ -1538,6 +1538,18 @@ int nfs_initiate_commit(struct rpc_clnt *clnt, struct nfs_commit_data *data,
1538} 1538}
1539EXPORT_SYMBOL_GPL(nfs_initiate_commit); 1539EXPORT_SYMBOL_GPL(nfs_initiate_commit);
1540 1540
1541static loff_t nfs_get_lwb(struct list_head *head)
1542{
1543 loff_t lwb = 0;
1544 struct nfs_page *req;
1545
1546 list_for_each_entry(req, head, wb_list)
1547 if (lwb < (req_offset(req) + req->wb_bytes))
1548 lwb = req_offset(req) + req->wb_bytes;
1549
1550 return lwb;
1551}
1552
1541/* 1553/*
1542 * Set up the argument/result storage required for the RPC call. 1554 * Set up the argument/result storage required for the RPC call.
1543 */ 1555 */
@@ -1557,6 +1569,9 @@ void nfs_init_commit(struct nfs_commit_data *data,
1557 data->inode = inode; 1569 data->inode = inode;
1558 data->cred = first->wb_context->cred; 1570 data->cred = first->wb_context->cred;
1559 data->lseg = lseg; /* reference transferred */ 1571 data->lseg = lseg; /* reference transferred */
1572 /* only set lwb for pnfs commit */
1573 if (lseg)
1574 data->lwb = nfs_get_lwb(&data->pages);
1560 data->mds_ops = &nfs_commit_ops; 1575 data->mds_ops = &nfs_commit_ops;
1561 data->completion_ops = cinfo->completion_ops; 1576 data->completion_ops = cinfo->completion_ops;
1562 data->dreq = cinfo->dreq; 1577 data->dreq = cinfo->dreq;