[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