From nobody Sun Dec 11 03:48:56 2022 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4NV9jN316Kz4kM0k; Sun, 11 Dec 2022 03:48:56 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4NV9jN2ZK0z3Ljp; Sun, 11 Dec 2022 03:48:56 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1670730536; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=uslWgr24NzaD2tcn2yOsHPr+Ga6Pq1XbqaP2f0MsGWg=; b=DDRcnXclNY+BaZqjTNfoViSFiIna6hT4yzdrOB0p77ZjBwIceo9VO4rg8MGD8XjpeBVdwm r++RVPjbQo0OLNZZ1hnaINnOo0uvW0X5VKZWyyVsDPyjcQIuV4JhK+nXda3PKnHN0qor89 5jlqnl3DRKRmH6jJ6A7Z/U1ajvkNk8ACIZ+XH9bTgp4TXxzNfWUULJc1Z+FtcyirR9sl8w M6W7pNVUVEfigDOgGMliSFKrghFjVGI6WijbScM8WU0mGaG9KhThBYbdfhmTDhj0R+it32 exevQMRMQ5bTKauDY88uxf17qb4f2Q2HffC0goChVPXO1k9zN5fFv6pWS26PwA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1670730536; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=uslWgr24NzaD2tcn2yOsHPr+Ga6Pq1XbqaP2f0MsGWg=; b=qNCJOd6M3+KHHkM+suAzAcH3ajBQ85oCHXDSpy6w0zMIXpegEcriTUG+lfpZjY59rOuAUP dsgZ5kbM1W3QbxlN8+Zi9DZ8JxsGicMNLe8kL4PhWf/uPWYCPzNvK/WgGC68U/RQbsrJbN k5bbcjZtSExMm4J4EafeZrFBi7njm6wPjEYQy+7Z3pBZGLQc/OhU6oVQNe0VnRj4o31CF2 v9spItXc05A1/diEtQnPFUL4yjDw9+F1wNZBOPWSJ+Dghr68X9ObY13hpzU1uBuR9MfWFa OldrL0BDqmHrVX5faMg7jibIEllMxI5EKrkAxACdoB6v3JvUFKkyiXhFSGklNw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1670730536; a=rsa-sha256; cv=none; b=FN6KsTxzBJTEDT5p1TyyemMz5M8lQ1CsO7UGFXRqjfoJ0h4A1xG35++lHbY28Eum/1h5yq /SQ7JIUUH/WZ4Br3JKCdliCMoPbb2rF3XXXE0Sb18YR1wQGLD4dvQga4ctCAN8uhmzvL7a M/sNV47naIBy8se68aM6/QTaVYc/tOi7F9O67gwuaqQqgWJ9r39tPGDNkaE4qKwsgbA+aV BpSWnTT/MeXCWWYgJhVlutHmqnOq5zKUkLLaxtw4+wTWotzAbL9TOjsY5YGOGsChr6SoUa H9GSx5JKWIzKtcAHut8hVRM9vXpHyYBwJYEbqvigAJbrmNnEqy1Cx5o+yYKAeQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4NV9jN1dp4zgq7; Sun, 11 Dec 2022 03:48:56 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 2BB3muuB076830; Sun, 11 Dec 2022 03:48:56 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 2BB3muVt076829; Sun, 11 Dec 2022 03:48:56 GMT (envelope-from git) Date: Sun, 11 Dec 2022 03:48:56 GMT Message-Id: <202212110348.2BB3muVt076829@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: "Jason A. Harmening" Subject: git: 0ef861e6f4dd - main - nullfs: adopt VV_CROSSLOCK List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-main@freebsd.org X-BeenThere: dev-commits-src-main@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: jah X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 0ef861e6f4dd37047e6fdb1ae18736434c2c957c Auto-Submitted: auto-generated X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by jah: URL: https://cgit.FreeBSD.org/src/commit/?id=0ef861e6f4dd37047e6fdb1ae18736434c2c957c commit 0ef861e6f4dd37047e6fdb1ae18736434c2c957c Author: Jason A. Harmening AuthorDate: 2022-11-20 18:33:34 +0000 Commit: Jason A. Harmening CommitDate: 2022-12-11 04:02:39 +0000 nullfs: adopt VV_CROSSLOCK When the lower filesystem directory hierarchy is the same as the nullfs mount point (admittedly not likely to be a useful situation in practice), nullfs is subject to the exact deadlock between the busy count drain and the covered vnode lock that VV_CROSSLOCK is intended to address. Reviewed by: kib Tested by: pho Differential Revision: https://reviews.freebsd.org/D37458 --- sys/fs/nullfs/null_vfsops.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/sys/fs/nullfs/null_vfsops.c b/sys/fs/nullfs/null_vfsops.c index fd119afa7f07..216a8badce56 100644 --- a/sys/fs/nullfs/null_vfsops.c +++ b/sys/fs/nullfs/null_vfsops.c @@ -201,6 +201,12 @@ nullfs_mount(struct mount *mp) &xmp->notify_node); } + if (lowerrootvp == mp->mnt_vnodecovered) { + vn_lock(lowerrootvp, LK_EXCLUSIVE | LK_RETRY | LK_CANRECURSE); + lowerrootvp->v_vflag |= VV_CROSSLOCK; + VOP_UNLOCK(lowerrootvp); + } + MNT_ILOCK(mp); if ((xmp->nullm_flags & NULLM_CACHE) != 0) { mp->mnt_kern_flag |= lowerrootvp->v_mount->mnt_kern_flag & @@ -261,6 +267,11 @@ nullfs_unmount(mp, mntflags) vfs_unregister_for_notification(mntdata->nullm_vfs, &mntdata->notify_node); } + if (mntdata->nullm_lowerrootvp == mp->mnt_vnodecovered) { + vn_lock(mp->mnt_vnodecovered, LK_EXCLUSIVE | LK_RETRY | LK_CANRECURSE); + mp->mnt_vnodecovered->v_vflag &= ~VV_CROSSLOCK; + VOP_UNLOCK(mp->mnt_vnodecovered); + } vfs_unregister_upper(mntdata->nullm_vfs, &mntdata->upper_node); vrele(mntdata->nullm_lowerrootvp); mp->mnt_data = NULL;