Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 26 Jun 2016 14:18:29 +0000 (UTC)
From:      Konstantin Belousov <kib@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r302210 - head/sys/fs/nfsclient
Message-ID:  <201606261418.u5QEITxu002962@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: kib
Date: Sun Jun 26 14:18:28 2016
New Revision: 302210
URL: https://svnweb.freebsd.org/changeset/base/302210

Log:
  Clean other flags in ncl_inactive, only.  Add comment explaining why other
  flags should be unset.
  
  Suggested and reviewed by:	rmacklem
  Sponsored by:	The FreeBSD Foundation
  MFC after:	12 days
  Approved by:	re (gjb)

Modified:
  head/sys/fs/nfsclient/nfs_clnode.c

Modified: head/sys/fs/nfsclient/nfs_clnode.c
==============================================================================
--- head/sys/fs/nfsclient/nfs_clnode.c	Sun Jun 26 13:18:03 2016	(r302209)
+++ head/sys/fs/nfsclient/nfs_clnode.c	Sun Jun 26 14:18:28 2016	(r302210)
@@ -206,7 +206,7 @@ ncl_releasesillyrename(struct vnode *vp,
 
 	ASSERT_VOP_ELOCKED(vp, "releasesillyrename");
 	np = VTONFS(vp);
-	mtx_lock(&np->n_mtx);
+	mtx_assert(&np->n_mtx, MA_OWNED);
 	if (vp->v_type != VDIR) {
 		sp = np->n_sillyrename;
 		np->n_sillyrename = NULL;
@@ -224,14 +224,13 @@ ncl_releasesillyrename(struct vnode *vp,
 		taskqueue_enqueue(taskqueue_thread, &sp->s_task);
 		mtx_lock(&np->n_mtx);
 	}
-	np->n_flag &= NMODIFIED;
-	mtx_unlock(&np->n_mtx);
 }
 
 int
 ncl_inactive(struct vop_inactive_args *ap)
 {
 	struct vnode *vp = ap->a_vp;
+	struct nfsnode *np;
 	boolean_t retv;
 
 	if (NFS_ISV4(vp) && vp->v_type == VREG) {
@@ -254,7 +253,17 @@ ncl_inactive(struct vop_inactive_args *a
 		}
 	}
 
+	np = VTONFS(vp);
+	mtx_lock(&np->n_mtx);
 	ncl_releasesillyrename(vp, ap->a_td);
+
+	/*
+	 * NMODIFIED means that there might be dirty/stale buffers
+	 * associated with the NFS vnode.  None of the other flags are
+	 * meaningful after the vnode is unused.
+	 */
+	np->n_flag &= NMODIFIED;
+	mtx_unlock(&np->n_mtx);
 	return (0);
 }
 
@@ -275,7 +284,9 @@ ncl_reclaim(struct vop_reclaim_args *ap)
 	if (nfs_reclaim_p != NULL)
 		nfs_reclaim_p(ap);
 
+	mtx_lock(&np->n_mtx);
 	ncl_releasesillyrename(vp, ap->a_td);
+	mtx_unlock(&np->n_mtx);
 
 	/*
 	 * Destroy the vm object and flush associated pages.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201606261418.u5QEITxu002962>