From owner-p4-projects@FreeBSD.ORG Wed Jul 29 11:44:08 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id B8C65106567A; Wed, 29 Jul 2009 11:44:08 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 766B6106564A for ; Wed, 29 Jul 2009 11:44:08 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 651C48FC1A for ; Wed, 29 Jul 2009 11:44:08 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n6TBi8T4051880 for ; Wed, 29 Jul 2009 11:44:08 GMT (envelope-from jhb@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n6TBi8i0051878 for perforce@freebsd.org; Wed, 29 Jul 2009 11:44:08 GMT (envelope-from jhb@freebsd.org) Date: Wed, 29 Jul 2009 11:44:08 GMT Message-Id: <200907291144.n6TBi8i0051878@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to jhb@freebsd.org using -f From: John Baldwin To: Perforce Change Reviews Cc: Subject: PERFORCE change 166728 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 29 Jul 2009 11:44:09 -0000 http://perforce.freebsd.org/chv.cgi?CH=166728 Change 166728 by jhb@jhb_jhbbsd on 2009/07/29 11:43:49 Address a LOR between vnode locks and the filedesc lock. The normal order is filedesc -> vnode (e.g. in the poll() system call). In this case, mountcheckdirs() doesn't actually need the vnodes in question locked, it just needs them referenced, so we can safely drop the vnode locks before mountcheckdirs() rather than after. Affected files ... .. //depot/projects/smpng/sys/kern/vfs_mount.c#97 edit Differences ... ==== //depot/projects/smpng/sys/kern/vfs_mount.c#97 (text+ko) ==== @@ -1069,9 +1069,10 @@ vfs_event_signal(NULL, VQ_MOUNT, 0); if (VFS_ROOT(mp, LK_EXCLUSIVE, &newdp)) panic("mount: lost mount"); + VOP_UNLOCK(newdp, 0); + VOP_UNLOCK(vp, 0); mountcheckdirs(vp, newdp); - vput(newdp); - VOP_UNLOCK(vp, 0); + vrele(newdp); if ((mp->mnt_flag & MNT_RDONLY) == 0) error = vfs_allocate_syncvnode(mp); vfs_unbusy(mp);