Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 30 May 2009 22:11:12 +0000 (UTC)
From:      Rick Macklem <rmacklem@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r193125 - head/sys/fs/nfsclient
Message-ID:  <200905302211.n4UMBC7R020910@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: rmacklem
Date: Sat May 30 22:11:12 2009
New Revision: 193125
URL: http://svn.freebsd.org/changeset/base/193125

Log:
  Add a check to v_type == VREG for the recently modified code that
  does NFSv4 Closes in the experimental client's VOP_INACTIVE().
  I also replaced a bunch of ap->a_vp with a local copy of vp,
  because I thought that made it more readable.
  
  Approved by:	kib (mentor)

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

Modified: head/sys/fs/nfsclient/nfs_clnode.c
==============================================================================
--- head/sys/fs/nfsclient/nfs_clnode.c	Sat May 30 22:06:58 2009	(r193124)
+++ head/sys/fs/nfsclient/nfs_clnode.c	Sat May 30 22:11:12 2009	(r193125)
@@ -185,35 +185,35 @@ ncl_inactive(struct vop_inactive_args *a
 {
 	struct nfsnode *np;
 	struct sillyrename *sp;
+	struct vnode *vp = ap->a_vp;
 
-	np = VTONFS(ap->a_vp);
-	if (prtactive && vrefcnt(ap->a_vp) != 0)
-		vprint("ncl_inactive: pushing active", ap->a_vp);
+	np = VTONFS(vp);
+	if (prtactive && vrefcnt(vp) != 0)
+		vprint("ncl_inactive: pushing active", vp);
 
-	if (NFS_ISV4(ap->a_vp)) {
+	if (NFS_ISV4(vp) && vp->v_type == VREG) {
 		/*
 		 * Since mmap()'d files do I/O after VOP_CLOSE(), the NFSv4
 		 * Close operations are delayed until now. Any dirty buffers
 		 * must be flushed before the close, so that the stateid is
 		 * available for the writes.
 		 */
-		if (nfscl_mustflush(ap->a_vp))
-			(void) ncl_flush(ap->a_vp, MNT_WAIT, NULL, ap->a_td,
-			    1);
-		(void) nfsrpc_close(ap->a_vp, 1, ap->a_td);
+		if (nfscl_mustflush(vp))
+			(void) ncl_flush(vp, MNT_WAIT, NULL, ap->a_td, 1);
+		(void) nfsrpc_close(vp, 1, ap->a_td);
 	}
 
-	if (ap->a_vp->v_type != VDIR) {
+	if (vp->v_type != VDIR) {
 		sp = np->n_sillyrename;
 		np->n_sillyrename = NULL;
 	} else
 		sp = NULL;
 	if (sp) {
-		(void)ncl_vinvalbuf(ap->a_vp, 0, ap->a_td, 1);
+		(void) ncl_vinvalbuf(vp, 0, ap->a_td, 1);
 		/*
 		 * Remove the silly file that was rename'd earlier
 		 */
-		ncl_removeit(sp, ap->a_vp);
+		ncl_removeit(sp, vp);
 		crfree(sp->s_cred);
 		vrele(sp->s_dvp);
 		FREE((caddr_t)sp, M_NEWNFSREQ);



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