From owner-svn-soc-all@FreeBSD.ORG Thu Jun 7 11:30:21 2012 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from socsvn.FreeBSD.org (unknown [IPv6:2001:4f8:fff6::2f]) by hub.freebsd.org (Postfix) with SMTP id 506FA1065672 for ; Thu, 7 Jun 2012 11:30:19 +0000 (UTC) (envelope-from gpf@FreeBSD.org) Received: by socsvn.FreeBSD.org (sSMTP sendmail emulation); Thu, 07 Jun 2012 11:30:19 +0000 Date: Thu, 07 Jun 2012 11:30:19 +0000 From: gpf@FreeBSD.org To: svn-soc-all@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Message-Id: <20120607113019.506FA1065672@hub.freebsd.org> Cc: Subject: socsvn commit: r237258 - soc2012/gpf/pefs_kmod/sys/fs/pefs X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 07 Jun 2012 11:30:21 -0000 Author: gpf Date: Thu Jun 7 11:30:17 2012 New Revision: 237258 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=237258 Log: - avoid messing with lower vp locks. - use vput to node acquired from lookup() to get rid of that reference counter as well Modified: soc2012/gpf/pefs_kmod/sys/fs/pefs/pefs_vnops.c Modified: soc2012/gpf/pefs_kmod/sys/fs/pefs/pefs_vnops.c ============================================================================== --- soc2012/gpf/pefs_kmod/sys/fs/pefs/pefs_vnops.c Thu Jun 7 10:53:42 2012 (r237257) +++ soc2012/gpf/pefs_kmod/sys/fs/pefs/pefs_vnops.c Thu Jun 7 11:30:17 2012 (r237258) @@ -2362,7 +2362,7 @@ u_quad_t fsize; struct vnode *vp = ap->a_vp; struct vnode *lvp = PEFS_LOWERVP(vp); - struct vnode *svp; + struct vnode *svp, *slvp; struct pefs_xkey *xk = ap->a_data; struct pefs_xnamecsum *xncs = ap->a_data; struct pefs_xsector_ctext *xsct = ap->a_data; @@ -2512,10 +2512,8 @@ pefs_chunk_create(&pc, pn, xsct->pxsct_ctext_len); puio = pefs_chunk_uio(&pc, xsct->pxsct_offset, UIO_READ); - /* XXXgpf: is this lock really necessary? */ - vn_lock(lvp, LK_EXCLUSIVE); + error = VOP_READ(lvp, puio, IO_UNIT | IO_NODELOCKED, cred); - VOP_UNLOCK(lvp, 0); if (error == 0) memcpy(xsct->pxsct_ctext, pc.pc_base, xsct->pxsct_ctext_len); @@ -2633,28 +2631,25 @@ if (svp->v_type != VLNK) { printf("pefs_ioctl: PEFS_GETSLINKCTEXT svp is not a symlink '/'\n"); - VOP_UNLOCK(svp, 0); + vput(svp); VOP_UNLOCK(vp, 0); return (EINVAL); } /* VOP_READLINK our lvp */ - lvp = PEFS_LOWERVP(svp); + slvp = PEFS_LOWERVP(svp); pn = VP_TO_PN(svp); pefs_chunk_create(&pc, pn, MAXPATHLEN); puio = pefs_chunk_uio(&pc, 0, UIO_READ); - /* XXXgpf: is this lock really necessary? */ - vn_lock(lvp, LK_EXCLUSIVE); - error = VOP_READLINK(lvp, puio, cred); - VOP_UNLOCK(lvp, 0); + error = VOP_READLINK(slvp, puio, cred); xsl->pxsl_slink_len = pc.pc_size - pc.pc_uio.uio_resid; if (error == 0) memcpy(xsl->pxsl_slink, pc.pc_base, xsl->pxsl_slink_len); pefs_chunk_free(&pc, pn); - VOP_UNLOCK(svp, 0); + vput(svp); VOP_UNLOCK(vp, 0); break; default: