| From acff5880539fe33897d016c0f3dcf062e67c61b6 Mon Sep 17 00:00:00 2001 |
| From: Peng Tao <bergwolf@gmail.com> |
| Date: Sat, 30 Jul 2011 20:52:31 -0400 |
| Subject: pnfs: save layoutcommit lwb at layout header |
| |
| From: Peng Tao <bergwolf@gmail.com> |
| |
| commit acff5880539fe33897d016c0f3dcf062e67c61b6 upstream. |
| |
| No need to save it for every lseg. |
| |
| [Needed in v3.0] |
| Signed-off-by: Peng Tao <peng_tao@emc.com> |
| Signed-off-by: Jim Rees <rees@umich.edu> |
| Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| fs/nfs/nfs4filelayout.c | 2 +- |
| fs/nfs/pnfs.c | 10 ++++++---- |
| fs/nfs/pnfs.h | 2 +- |
| 3 files changed, 8 insertions(+), 6 deletions(-) |
| |
| --- a/fs/nfs/nfs4filelayout.c |
| +++ b/fs/nfs/nfs4filelayout.c |
| @@ -170,7 +170,7 @@ filelayout_set_layoutcommit(struct nfs_w |
| |
| pnfs_set_layoutcommit(wdata); |
| dprintk("%s ionde %lu pls_end_pos %lu\n", __func__, wdata->inode->i_ino, |
| - (unsigned long) wdata->lseg->pls_end_pos); |
| + (unsigned long) NFS_I(wdata->inode)->layout->plh_lwb); |
| } |
| |
| /* |
| --- a/fs/nfs/pnfs.c |
| +++ b/fs/nfs/pnfs.c |
| @@ -1224,9 +1224,11 @@ pnfs_set_layoutcommit(struct nfs_write_d |
| dprintk("%s: Set layoutcommit for inode %lu ", |
| __func__, wdata->inode->i_ino); |
| } |
| - if (end_pos > wdata->lseg->pls_end_pos) |
| - wdata->lseg->pls_end_pos = end_pos; |
| + if (end_pos > nfsi->layout->plh_lwb) |
| + nfsi->layout->plh_lwb = end_pos; |
| spin_unlock(&nfsi->vfs_inode.i_lock); |
| + dprintk("%s: lseg %p end_pos %llu\n", |
| + __func__, wdata->lseg, nfsi->layout->plh_lwb); |
| |
| /* if pnfs_layoutcommit_inode() runs between inode locks, the next one |
| * will be a noop because NFS_INO_LAYOUTCOMMIT will not be set */ |
| @@ -1278,9 +1280,9 @@ pnfs_layoutcommit_inode(struct inode *in |
| */ |
| lseg = pnfs_list_write_lseg(inode); |
| |
| - end_pos = lseg->pls_end_pos; |
| + end_pos = nfsi->layout->plh_lwb; |
| cred = lseg->pls_lc_cred; |
| - lseg->pls_end_pos = 0; |
| + nfsi->layout->plh_lwb = 0; |
| lseg->pls_lc_cred = NULL; |
| |
| memcpy(&data->args.stateid.data, nfsi->layout->plh_stateid.data, |
| --- a/fs/nfs/pnfs.h |
| +++ b/fs/nfs/pnfs.h |
| @@ -45,7 +45,6 @@ struct pnfs_layout_segment { |
| unsigned long pls_flags; |
| struct pnfs_layout_hdr *pls_layout; |
| struct rpc_cred *pls_lc_cred; /* LAYOUTCOMMIT credential */ |
| - loff_t pls_end_pos; /* LAYOUTCOMMIT write end */ |
| }; |
| |
| enum pnfs_try_status { |
| @@ -124,6 +123,7 @@ struct pnfs_layout_hdr { |
| unsigned long plh_block_lgets; /* block LAYOUTGET if >0 */ |
| u32 plh_barrier; /* ignore lower seqids */ |
| unsigned long plh_flags; |
| + loff_t plh_lwb; /* last write byte for layoutcommit */ |
| struct inode *plh_inode; |
| }; |
| |