[pnfs] [PATCH 3/7] pnfs: always set pnfs_layout_suspend
Fred Isaman
iisaman at citi.umich.edu
Mon Jun 9 16:29:04 EDT 2008
nfsi->pnfs_layout_suspend was left uninitialized for the non-switch
error cases of pnfs_get_layout_done.
Signed-off-by: Fred Isaman <iisaman at citi.umich.edu>
---
fs/nfs/pnfs.c | 12 +++++++-----
1 files changed, 7 insertions(+), 5 deletions(-)
diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c
index cac9675..ea71e9b 100644
--- a/fs/nfs/pnfs.c
+++ b/fs/nfs/pnfs.c
@@ -976,6 +976,7 @@ pnfs_get_layout_done(struct pnfs_layout_type *lo,
struct nfs4_pnfs_layoutget_res *res = &lgp->res;
struct pnfs_layout_segment *lseg = NULL;
struct nfs_inode *nfsi = NFS_I(lo->inode);
+ time_t suspend = 0;
dprintk("-->%s\n", __func__);
@@ -997,9 +998,9 @@ pnfs_get_layout_done(struct pnfs_layout_type *lo,
case -EAGAIN: /* NFS4ERR_LAYOUTTRYLATER,
* NFS4ERR_RECALLCONFLICT, NFS4ERR_LOCKED
*/
- nfsi->pnfs_layout_suspend = get_seconds() + 1;
+ suspend = get_seconds() + 1;
dprintk("%s: layout_get suspended until %ld\n",
- __func__, nfsi->pnfs_layout_suspend);
+ __func__, suspend);
break;
case -EINVAL: /* NFS4ERR_INVAL, NFSERR_BADIOMODE,
* NFS4ERR_UNKNOWN_LAYOUTTYPE
@@ -1008,9 +1009,8 @@ pnfs_get_layout_done(struct pnfs_layout_type *lo,
case -ETOOSMALL:/* NFS4ERR_TOOSMALL */
default:
/* suspend layout get for ever for this file */
- nfsi->pnfs_layout_suspend = 0;
dprintk("%s: no layout_get until %ld\n",
- __func__, nfsi->pnfs_layout_suspend);
+ __func__, suspend);
/* mark with NFS_INO_LAYOUT_FAILED */
break;
}
@@ -1043,8 +1043,10 @@ pnfs_get_layout_done(struct pnfs_layout_type *lo,
get_out:
/* remember that get layout failed and don't try again */
- if (lgp->status < 0)
+ if (lgp->status < 0) {
set_bit(NFS_INO_LAYOUT_FAILED, &nfsi->pnfs_layout_state);
+ nfsi->pnfs_layout_suspend = suspend;
+ }
spin_unlock(&nfsi->lo_lock);
/* Done processing layoutget. Set the layout stateid */
--
1.5.3.3
More information about the pNFS
mailing list