Date: Thu, 07 Jun 2012 11:30:19 +0000 From: gpf@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r237258 - soc2012/gpf/pefs_kmod/sys/fs/pefs Message-ID: <20120607113019.506FA1065672@hub.freebsd.org>
next in thread | raw e-mail | index | archive | help
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:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20120607113019.506FA1065672>