From nobody Mon Oct 06 15:22:46 2025 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 4cgNLb20FZz69WrB; Mon, 06 Oct 2025 15:22:47 +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 "R12" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4cgNLb1Pchz3ctl; Mon, 06 Oct 2025 15:22:47 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1759764167; 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=60+xKA/67igTXxh0/5hU5BvL5mR9x75/acnCrmjVziU=; b=jQyaAkz4/O+5luinJweO2/1OfooqYj9WvYXg90uzNlEnt6/Ao+nWv2PBtjJD33cs4achbK nmbxjbYys5QeM1t7vXp9bqSkwtapt/dulsScIFovnhuiAZrLHjwA9iIo32WIFRqdEOkIkF ESEG5FBDWVtvGl8WRStRl7BBD9k73fgz5C2s642YmCEyV6kp2x8HMvJMFrMUZ6NVZNFjF7 5364EVfMK/pIkVQj3rtFDSvlbdR/prKc58H1HJDIyTUBFdM4+mAV/75bbpCiXp+pMZGcNg BMchTdfH7+tyGfWa9hxb59aImZ/tEMFDHvjbjUVcSVlP++d7wo1OY879LcD6eA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1759764167; 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=60+xKA/67igTXxh0/5hU5BvL5mR9x75/acnCrmjVziU=; b=pXxs2PBojzR6I96pgOUjjCL1Yy8e/xQFdH68az/ZdQW+0K/bGpc6nESoN5rDaEU96tg/Vs JSjqkvlVWpAxjP2XFBE36PAeo5V7KKNZvc4ZBQSQ0C22dOe8189PsPVyFEy7WkkOllmoOK YEqNfRdJrH7RK31q0kyUyATgmYI64NgoB9XKgGSIGjyJZiqiRoLHClonrDLJP0XdDfQy4Z 2elANBBSP2W2tSEnJ/xXrs0VYbEDiN5YPFxiUucZDD+Yr6zfjLIsbaR3OV+DkWg72xwhId Ou/EsCez732K+oLgu5vsosDCc4hE/bEV1EjWryEJKDCAFAiRSdEjMaBfk19Kzg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1759764167; a=rsa-sha256; cv=none; b=TPKS3Y+c/q6qIVNbia/iI9ub/+zRrOSMgF5QAc6Omc/kofXiIz5/PKrpTM4fFKiqYDicK5 0EM1QBQW38J5eczH9I7OPa0gvk4gC6Fy0jslFUfWZomXJEemL1MN/LERvL5qt1r8iuwudg mRdVIVsNbyKo7PWTAg6pVN4wZ6ckE2LtobImMoK+BcgaG9waBYERG5bddLmSC1NGwIeAbp wISm5LhUJqanIQbgRRq/ycddgeDXpCecERuCfUXbbhuAFG0lh5LzNEiTI74Sbs546jxJYS HWM8v9IbP2izL2eLwfSXYthQdXXU4xvaNfHh9I1luXv0TTm4D4dUAErm5IMZhA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none 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 4cgNLb0Fvyz13SB; Mon, 06 Oct 2025 15:22:47 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 596FMkOG043855; Mon, 6 Oct 2025 15:22:46 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 596FMk6Q043852; Mon, 6 Oct 2025 15:22:46 GMT (envelope-from git) Date: Mon, 6 Oct 2025 15:22:46 GMT Message-Id: <202510061522.596FMk6Q043852@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Olivier Certner Subject: git: 09f925b57aeb - main - nullfs: Slightly reduce contention by reducing concurrent sections 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: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: olce X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 09f925b57aeb171318a9d54df500bf22b4cdd986 Auto-Submitted: auto-generated The branch main has been updated by olce: URL: https://cgit.FreeBSD.org/src/commit/?id=09f925b57aeb171318a9d54df500bf22b4cdd986 commit 09f925b57aeb171318a9d54df500bf22b4cdd986 Author: Olivier Certner AuthorDate: 2025-10-06 13:22:13 +0000 Commit: Olivier Certner CommitDate: 2025-10-06 15:21:45 +0000 nullfs: Slightly reduce contention by reducing concurrent sections In null_lock_prep_with_smr(), initialize 'lvp' outside of the SMR-protected section. In null_lock(), if after locking the lower vnode we notice that we have been reclaimed, we have to unlock the lower vnode and then relock our own now that the lock isn't shared anymore. Call VOP_UNLOCK() on the lower vnode as soon as this condition is known. This applies comments from D38761, one of which was missed and the other added too late. Reviewed by: kib MFC with: 641a58239520 ("nullfs: avoid the interlock in null_lock with smr") Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D52935 --- sys/fs/nullfs/null_vnops.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/sys/fs/nullfs/null_vnops.c b/sys/fs/nullfs/null_vnops.c index 375b6aa27531..ec8a6b10b13f 100644 --- a/sys/fs/nullfs/null_vnops.c +++ b/sys/fs/nullfs/null_vnops.c @@ -788,10 +788,10 @@ null_lock_prep_with_smr(struct vop_lock1_args *ap) struct null_node *nn; struct vnode *lvp; - vfs_smr_enter(); - lvp = NULL; + vfs_smr_enter(); + nn = VTONULL_SMR(ap->a_vp); if (__predict_true(nn != NULL)) { lvp = nn->null_lowervp; @@ -855,6 +855,8 @@ null_lock(struct vop_lock1_args *ap) * case by reacquiring correct lock in requested mode. */ if (VTONULL(ap->a_vp) == NULL && error == 0) { + VOP_UNLOCK(lvp); + flags = ap->a_flags; ap->a_flags &= ~LK_TYPE_MASK; switch (flags & LK_TYPE_MASK) { @@ -869,7 +871,6 @@ null_lock(struct vop_lock1_args *ap) panic("Unsupported lock request %d\n", flags); } - VOP_UNLOCK(lvp); error = vop_stdlock(ap); } vdrop(lvp);