From nobody Tue Mar 17 00:38:23 2026 X-Original-To: dev-commits-src-branches@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 4fZY3M3Lkvz6VH46 for ; Tue, 17 Mar 2026 00:38:23 +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" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4fZY3M14Wjz42XQ for ; Tue, 17 Mar 2026 00:38:23 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1773707903; 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=NBosgcqN3U3KjZz7KZiL7IW+x8BGRmNz8LiPort66Og=; b=mmdvv3d8NiiDEdAZHo7Wga+5reh2fHfuqwWz+1f5/efC37CSdIdn0czPEdBTJuX3i+YiS3 PHUCK7uOYCMzH8nKt5KfshBDxxCFri5x7SumDTneDi6F1fzODedgUQ3TdI5JHUr/nCc3Xp 8USwc9gzverdL/Rj414CudVvzVmlosPyQQLR0y8B/eeTkCjB8FdQCCpuvDAtmFptvvMpdH 3t4MyNxH+pxC9m6UD+cZstmOTSorW5/svso/TCRXi/rXhNMvVr35/De5tKbxE/HKY/7xp+ lwRhFuFDa5Bgks0BqI+TwBIXfVeMlAlNOkpC+cq+VS+X5BIL41jvWyerw0gmfA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1773707903; a=rsa-sha256; cv=none; b=OF3HIzNUg5ADjdpP69mlotzRzJ3HNYlDdaUos4k2BUUSKxDrJs6iaaTsVX9B45KfbXinTF I34BgnvS6pJNhqeyzB+Jsr3AYm/BXuU98UMf4y/7pAtN4fdn7VQe/KFHRNZ1jgnoNdEi7w HD3cvLrPVomYYlapcjIIR651k3cJOCExjnNHq+vuk7Q/eLNeEX8EoDlZQhPT2wIA4f2Jya eZTetzGKXXe2BgjP53CUdtW7kUVE7lzO+jFQIIkwEs/2PY3jIq1zsmqC4ZoDYdVH5fbTlH 1Ekdf0Sz+vDjMireLJgrmucbftWfLwMAxSTr7qo67HtPEEGnM7CyXcxWQD9doQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1773707903; 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=NBosgcqN3U3KjZz7KZiL7IW+x8BGRmNz8LiPort66Og=; b=s0Gf6GjRnvzb1CZ+rrmTb4yi8y+/WJq082qDQS1i6ebrwjnRshEAFOnKK/Sp/Jph6pp/4e P8naJ1AfII+n8uUbkUoeXvIgNHGlQOwW1V34su9HiFcaY8Udbmj7XfgDwuC++Ri6itQQRz DAvGioL0ZyyyMcvGEHTCeLFuXF7OqG5/XnzK5PFXh6hUlQHpXmQRcRRxXqExAfkWXgqyY5 549d7QLm0fsQnKrZ4mwPrIRi2jlyJUH09kaWuAp+xw2iFyaVdXKQFglkO/8rsS8GbOvfE/ Jj8UPFVULleYd95Wqm0nFvWhNvUSOaHTJveFvQ33PRixR1yGW1wW8rkv3MfusA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fZY3M0LMpz1020 for ; Tue, 17 Mar 2026 00:38:23 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 313af by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 17 Mar 2026 00:38:23 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Konstantin Belousov Subject: git: 47f299838540 - stable/15 - nfsclient: convert to use vn_delayed_setsize() List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-branches@freebsd.org Sender: owner-dev-commits-src-branches@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kib X-Git-Repository: src X-Git-Refname: refs/heads/stable/15 X-Git-Reftype: branch X-Git-Commit: 47f299838540dbd72061e578d9e6c89092fcdb2d Auto-Submitted: auto-generated Date: Tue, 17 Mar 2026 00:38:23 +0000 Message-Id: <69b8a27f.313af.356b4993@gitrepo.freebsd.org> The branch stable/15 has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=47f299838540dbd72061e578d9e6c89092fcdb2d commit 47f299838540dbd72061e578d9e6c89092fcdb2d Author: Konstantin Belousov AuthorDate: 2026-02-28 16:26:12 +0000 Commit: Konstantin Belousov CommitDate: 2026-03-15 06:58:57 +0000 nfsclient: convert to use vn_delayed_setsize() (cherry picked from commit 5c71df9850355e20cf8f89fb656b18ef79cdf178) --- sys/fs/nfsclient/nfs_clbio.c | 4 +-- sys/fs/nfsclient/nfs_clport.c | 2 +- sys/fs/nfsclient/nfs_clvnops.c | 68 +++++------------------------------------- sys/fs/nfsclient/nfsnode.h | 1 - 4 files changed, 10 insertions(+), 65 deletions(-) diff --git a/sys/fs/nfsclient/nfs_clbio.c b/sys/fs/nfsclient/nfs_clbio.c index e181bf593e23..b534a2eb5555 100644 --- a/sys/fs/nfsclient/nfs_clbio.c +++ b/sys/fs/nfsclient/nfs_clbio.c @@ -1041,7 +1041,7 @@ again: NFSLOCKNODE(np); np->n_size = uio->uio_offset + n; np->n_flag |= NMODIFIED; - np->n_flag &= ~NVNSETSZSKIP; + vn_clear_delayed_setsize(vp); vnode_pager_setsize(vp, np->n_size); NFSUNLOCKNODE(np); @@ -1071,7 +1071,7 @@ again: if (uio->uio_offset + n > np->n_size) { np->n_size = uio->uio_offset + n; np->n_flag |= NMODIFIED; - np->n_flag &= ~NVNSETSZSKIP; + vn_clear_delayed_setsize(vp); vnode_pager_setsize(vp, np->n_size); } NFSUNLOCKNODE(np); diff --git a/sys/fs/nfsclient/nfs_clport.c b/sys/fs/nfsclient/nfs_clport.c index c5f7ce0a12c7..1156e1738703 100644 --- a/sys/fs/nfsclient/nfs_clport.c +++ b/sys/fs/nfsclient/nfs_clport.c @@ -646,7 +646,7 @@ ncl_pager_setsize(struct vnode *vp, u_quad_t *nsizep) (curthread->td_pflags2 & TDP2_SBPAGES) == 0) setnsize = true; else - np->n_flag |= NVNSETSZSKIP; + vn_delay_setsize(vp); } if (nsizep == NULL) { NFSUNLOCKNODE(np); diff --git a/sys/fs/nfsclient/nfs_clvnops.c b/sys/fs/nfsclient/nfs_clvnops.c index 5eea16d0f129..6b0531dda504 100644 --- a/sys/fs/nfsclient/nfs_clvnops.c +++ b/sys/fs/nfsclient/nfs_clvnops.c @@ -155,7 +155,7 @@ static vop_getextattr_t nfs_getextattr; static vop_setextattr_t nfs_setextattr; static vop_listextattr_t nfs_listextattr; static vop_deleteextattr_t nfs_deleteextattr; -static vop_lock1_t nfs_lock; +static vop_delayed_setsize_t nfs_delayed_setsize; /* * Global vfs data structures for nfs @@ -168,13 +168,13 @@ static struct vop_vector newnfs_vnodeops_nosig = { .vop_advlockasync = nfs_advlockasync, .vop_close = nfs_close, .vop_create = nfs_create, + .vop_delayed_setsize = nfs_delayed_setsize, .vop_fsync = nfs_fsync, .vop_getattr = nfs_getattr, .vop_getpages = ncl_getpages, .vop_putpages = ncl_putpages, .vop_inactive = ncl_inactive, .vop_link = nfs_link, - .vop_lock1 = nfs_lock, .vop_lookup = nfs_lookup, .vop_mkdir = nfs_mkdir, .vop_mknod = nfs_mknod, @@ -331,73 +331,19 @@ SYSCTL_U64(_vfs_nfs, OID_AUTO, maxalloclen, CTLFLAG_RW, */ static int -nfs_lock(struct vop_lock1_args *ap) +nfs_delayed_setsize(struct vop_delayed_setsize_args *ap) { struct vnode *vp; struct nfsnode *np; u_quad_t nsize; - int error, lktype; - bool onfault; vp = ap->a_vp; - lktype = ap->a_flags & LK_TYPE_MASK; - error = VOP_LOCK1_APV(&default_vnodeops, ap); - if (error != 0 || vp->v_op != &newnfs_vnodeops) - return (error); np = VTONFS(vp); - if (np == NULL) - return (0); - NFSLOCKNODE(np); - if ((np->n_flag & NVNSETSZSKIP) == 0 || (lktype != LK_SHARED && - lktype != LK_EXCLUSIVE && lktype != LK_UPGRADE && - lktype != LK_TRYUPGRADE)) { - NFSUNLOCKNODE(np); - return (0); - } - onfault = (ap->a_flags & LK_EATTR_MASK) == LK_NOWAIT && - (ap->a_flags & LK_INIT_MASK) == LK_CANRECURSE && - (lktype == LK_SHARED || lktype == LK_EXCLUSIVE); - if (onfault && vp->v_vnlock->lk_recurse == 0) { - /* - * Force retry in vm_fault(), to make the lock request - * sleepable, which allows us to piggy-back the - * sleepable call to vnode_pager_setsize(). - */ - NFSUNLOCKNODE(np); - VOP_UNLOCK(vp); - return (EBUSY); - } - if ((ap->a_flags & LK_NOWAIT) != 0 || - (lktype == LK_SHARED && vp->v_vnlock->lk_recurse > 0)) { - NFSUNLOCKNODE(np); - return (0); - } - if (lktype == LK_SHARED) { - NFSUNLOCKNODE(np); - VOP_UNLOCK(vp); - ap->a_flags &= ~(LK_TYPE_MASK | LK_INTERLOCK); - ap->a_flags |= LK_EXCLUSIVE; - error = VOP_LOCK1_APV(&default_vnodeops, ap); - if (error != 0 || vp->v_op != &newnfs_vnodeops) - return (error); - if (vp->v_data == NULL) - goto downgrade; - MPASS(vp->v_data == np); + if (np != NULL) { NFSLOCKNODE(np); - if ((np->n_flag & NVNSETSZSKIP) == 0) { - NFSUNLOCKNODE(np); - goto downgrade; - } - } - np->n_flag &= ~NVNSETSZSKIP; - nsize = np->n_size; - NFSUNLOCKNODE(np); - vnode_pager_setsize(vp, nsize); -downgrade: - if (lktype == LK_SHARED) { - ap->a_flags &= ~(LK_TYPE_MASK | LK_INTERLOCK); - ap->a_flags |= LK_DOWNGRADE; - (void)VOP_LOCK1_APV(&default_vnodeops, ap); + nsize = np->n_size; + NFSUNLOCKNODE(np); + vnode_pager_setsize(vp, nsize); } return (0); } diff --git a/sys/fs/nfsclient/nfsnode.h b/sys/fs/nfsclient/nfsnode.h index 9b2627015612..07c7ccb0ff10 100644 --- a/sys/fs/nfsclient/nfsnode.h +++ b/sys/fs/nfsclient/nfsnode.h @@ -160,7 +160,6 @@ struct nfsnode { #define NWRITEOPENED 0x00040000 /* Has been opened for writing */ #define NHASBEENLOCKED 0x00080000 /* Has been file locked. */ #define NDSCOMMIT 0x00100000 /* Commit is done via the DS. */ -#define NVNSETSZSKIP 0x00200000 /* Skipped vnode_pager_setsize() */ #define NMIGHTBELOCKED 0x00400000 /* Might be file locked. */ #define NNAMEDNOTSUPP 0x00800000 /* Openattr is not supported. */