From nobody Thu Mar 5 23:48:28 2026 X-Original-To: dev-commits-src-all@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 4fRmSr4DfHz6Ts56 for ; Thu, 05 Mar 2026 23:48:28 +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 4fRmSr2BBPz3MD8 for ; Thu, 05 Mar 2026 23:48:28 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1772754508; 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=6g5zoZ9rLlQONg9RJaCoH/OPhTHJnBQpue8WTX6wMNE=; b=I4wtj+yKA7PcGPuqtJzqQlhoT1W/IqOdpUgfSCr+v/LgO0mpzcR/61uy/7GiNj3wjYeA/8 ++my5B0CFkwnFbqkHbAZOSKnVAx7mFyFuZCgxHtBO6+pyLn/wsE4jElz6rvmTEk2Yg7rmy emYa+1WFHzUdsM/nR80hE+7PWmgeuvzbr9hyR3YGoAPYjWy1bp0nAEciwllFtDV2wtRJWB QCnQc3GoQChKD5AfcjACY3v7T11EAxZyz7tRv4vk+uGIUvy6njS1L59h4FaT9KBV9JU+Kf LqOKGAQAQdIp0GUJCH0aczIRLkA+TD7eo1Y7e0qnR1flHYHe+I2i7x0sPl9GMg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1772754508; a=rsa-sha256; cv=none; b=OjlLshzLuRhKyoIFt3h8ZVqpaDbiKegZPyzlEq+tHJf17lGB8nbVu7i+Vq7E+n9UikA6YB L11sEJq7VEfnpire8FP5OfiZBDDD7Iie1eOoSRKPI4ElK5QwB3zbE3ui59CEPMnNwefx1T z6hFtmwXUqUr0xsamhSwhbNNIdvtKPMgYYTO0U4+9YIQBM8U0ffGBkxVTzLJXC+OE6JrsK zNsr4cu9NRO//ZnwN5JVwvDvsJJjxSfOtYlJuu1FItKyCUwOy62t5v8BZitSTMBLQVXPvU E/a/6kDjRlH6V0kQyjB0l09Cb18Qs80Pl54H68fJhFApYBUk3WsyWYUluR2ErA== 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=1772754508; 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=6g5zoZ9rLlQONg9RJaCoH/OPhTHJnBQpue8WTX6wMNE=; b=t5E9n+QWI8ushSuuAASSAew01HV+FT4egPBSfaCdv+TsZC7AcTB9vd7LaDsJNEifMgYn+3 4W7CEEePG9H0U6+3xBuppTOhW2rZw0MpFfkyLnjClwijLPBIEDa6RuyapcGlMWcE0yKUCI /KD7dxvAgeBZUzS43bJc7BLZi+tTTm/tLmO0OnEEbLiRJkxYD9J44zhKCdoBKy2JIHxb9O oLLHGd5wiLTkbTQwDfI37tyqZLIKWmLAXk6GqeGCHgZr968MCqdXCScL4LSzBpbYe9XEnz 8yKVtDsQMUrOHsHspYUyPsPH9ErkugAv718QsUVuW+y447Z1Arlhj8kVjezSSg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fRmSr1jxSzyZJ for ; Thu, 05 Mar 2026 23:48:28 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3f8f4 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Thu, 05 Mar 2026 23:48:28 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Konstantin Belousov Subject: git: 5c71df985035 - main - nfsclient: convert to use vn_delayed_setsize() List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@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/main X-Git-Reftype: branch X-Git-Commit: 5c71df9850355e20cf8f89fb656b18ef79cdf178 Auto-Submitted: auto-generated Date: Thu, 05 Mar 2026 23:48:28 +0000 Message-Id: <69aa164c.3f8f4.35428cd8@gitrepo.freebsd.org> The branch main has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=5c71df9850355e20cf8f89fb656b18ef79cdf178 commit 5c71df9850355e20cf8f89fb656b18ef79cdf178 Author: Konstantin Belousov AuthorDate: 2026-02-28 16:26:12 +0000 Commit: Konstantin Belousov CommitDate: 2026-03-05 23:46:54 +0000 nfsclient: convert to use vn_delayed_setsize() Reviewed by: rmacklem Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D55595 --- 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 edd6974a50d0..26aa6491ac4a 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. */