mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-27 00:51:35 +00:00
pNFS: Files and flexfiles always need to commit before layoutcommit
So ensure that we mark the layout for commit once the write is done, and then ensure that the commit to ds is finished before sending layoutcommit. Note that by doing this, we're able to optimise away the commit for the case of servers that don't need layoutcommit in order to return updated attributes. Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
This commit is contained in:
parent
bc28e1c2e3
commit
2e18d4d822
5 changed files with 30 additions and 9 deletions
|
@ -255,13 +255,16 @@ static int filelayout_read_done_cb(struct rpc_task *task,
|
|||
static void
|
||||
filelayout_set_layoutcommit(struct nfs_pgio_header *hdr)
|
||||
{
|
||||
loff_t end_offs = 0;
|
||||
|
||||
if (FILELAYOUT_LSEG(hdr->lseg)->commit_through_mds ||
|
||||
hdr->res.verf->committed != NFS_DATA_SYNC)
|
||||
hdr->res.verf->committed == NFS_FILE_SYNC)
|
||||
return;
|
||||
if (hdr->res.verf->committed == NFS_DATA_SYNC)
|
||||
end_offs = hdr->mds_offset + (loff_t)hdr->res.count;
|
||||
|
||||
pnfs_set_layoutcommit(hdr->inode, hdr->lseg,
|
||||
hdr->mds_offset + hdr->res.count);
|
||||
/* Note: if the write is unstable, don't set end_offs until commit */
|
||||
pnfs_set_layoutcommit(hdr->inode, hdr->lseg, end_offs);
|
||||
dprintk("%s inode %lu pls_end_pos %lu\n", __func__, hdr->inode->i_ino,
|
||||
(unsigned long) NFS_I(hdr->inode)->layout->plh_lwb);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue