From: Andy Adamson <andros@netapp.com>
Date: Tue, 1 Mar 2011 01:34:07 +0000 (+0000)
Subject: NFSv4.1: put_layout_hdr can remove nfsi->layout
X-Git-Tag: firefly_0821_release~7613^2~2171^2~45
X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=bf9c1387ca80deac792c9ecf1c64dfcc5d1cc768;p=firefly-linux-kernel-4.4.55.git

NFSv4.1: put_layout_hdr can remove nfsi->layout

Prevents an Oops triggered by CB_LAYOUTRECALL and LAYOUTGET race on a
pnfs_layout_hdr first pnfs_layout_segment.

Signed-off-by: Andy Adamson <andros@netapp.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
---

diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c
index 0f5b66f90d17..7d031cd7d920 100644
--- a/fs/nfs/pnfs.c
+++ b/fs/nfs/pnfs.c
@@ -768,7 +768,7 @@ pnfs_update_layout(struct inode *ino,
 	put_layout_hdr(lo);
 out:
 	dprintk("%s end, state 0x%lx lseg %p\n", __func__,
-		nfsi->layout->plh_flags, lseg);
+		nfsi->layout ? nfsi->layout->plh_flags : -1, lseg);
 	return lseg;
 out_unlock:
 	spin_unlock(&ino->i_lock);