From owner-svn-src-head@freebsd.org Sat Jul 4 15:46:40 2015 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 3A8CC9879; Sat, 4 Jul 2015 15:46:40 +0000 (UTC) (envelope-from mjg@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 21D6C1FE9; Sat, 4 Jul 2015 15:46:40 +0000 (UTC) (envelope-from mjg@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.14.9/8.14.9) with ESMTP id t64Fkd5Q071670; Sat, 4 Jul 2015 15:46:40 GMT (envelope-from mjg@FreeBSD.org) Received: (from mjg@localhost) by repo.freebsd.org (8.14.9/8.14.9/Submit) id t64FkdV3071669; Sat, 4 Jul 2015 15:46:39 GMT (envelope-from mjg@FreeBSD.org) Message-Id: <201507041546.t64FkdV3071669@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mjg set sender to mjg@FreeBSD.org using -f From: Mateusz Guzik Date: Sat, 4 Jul 2015 15:46:39 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r285135 - head/sys/kern X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 04 Jul 2015 15:46:40 -0000 Author: mjg Date: Sat Jul 4 15:46:39 2015 New Revision: 285135 URL: https://svnweb.freebsd.org/changeset/base/285135 Log: vfs: use shared vnode locking when looking up ".." in vop_stdvptocnp Briefly discussed with: kib Modified: head/sys/kern/vfs_default.c Modified: head/sys/kern/vfs_default.c ============================================================================== --- head/sys/kern/vfs_default.c Sat Jul 4 15:42:03 2015 (r285134) +++ head/sys/kern/vfs_default.c Sat Jul 4 15:46:39 2015 (r285135) @@ -810,7 +810,7 @@ vop_stdvptocnp(struct vop_vptocnp_args * VREF(vp); locked = VOP_ISLOCKED(vp); VOP_UNLOCK(vp, 0); - NDINIT_ATVP(&nd, LOOKUP, FOLLOW | LOCKLEAF, UIO_SYSSPACE, + NDINIT_ATVP(&nd, LOOKUP, FOLLOW | LOCKSHARED | LOCKLEAF, UIO_SYSSPACE, "..", vp, td); flags = FREAD; error = vn_open_cred(&nd, &flags, 0, VN_OPEN_NOAUDIT, cred, NULL); @@ -830,7 +830,7 @@ vop_stdvptocnp(struct vop_vptocnp_args * VOP_UNLOCK(mvp, 0); vn_close(mvp, FREAD, cred, td); VREF(*dvp); - vn_lock(*dvp, LK_EXCLUSIVE | LK_RETRY); + vn_lock(*dvp, LK_SHARED | LK_RETRY); covered = 1; } @@ -859,15 +859,15 @@ vop_stdvptocnp(struct vop_vptocnp_args * (dp->d_fileno == fileno)) { if (covered) { VOP_UNLOCK(*dvp, 0); - vn_lock(mvp, LK_EXCLUSIVE | LK_RETRY); + vn_lock(mvp, LK_SHARED | LK_RETRY); if (dirent_exists(mvp, dp->d_name, td)) { error = ENOENT; VOP_UNLOCK(mvp, 0); - vn_lock(*dvp, LK_EXCLUSIVE | LK_RETRY); + vn_lock(*dvp, LK_SHARED | LK_RETRY); goto out; } VOP_UNLOCK(mvp, 0); - vn_lock(*dvp, LK_EXCLUSIVE | LK_RETRY); + vn_lock(*dvp, LK_SHARED | LK_RETRY); } i -= dp->d_namlen;