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>