From nobody Thu Feb 27 02:32:23 2025 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 4Z3Fjg43ysz5pWHb; Thu, 27 Feb 2025 02:32: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 "R10" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4Z3Fjg2MyLz3hnf; Thu, 27 Feb 2025 02:32:23 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1740623543; 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=bht2IIMwZSmVYK8YFpVmyqO1jDcfRP1MujlUHruGX1I=; b=nkEbILFFTtQlcSfGF2GSHywhVGK3UV/bbcENKEswINBkaxrfn3KPVJLECUWvKa8BqB0sdF CdVDdnt9OrLsKgRMfbqy6L2jcLM7GrJyZplsQqQeBsnsuf930AX/VRwRBISWfjK2IXdkj+ BWJ1CsPA1Fl6M5lTXt32cfYmjlI11dGl+Z+yUfu1FA/Q4oEMbOwMlNmtZ1m0Pw+5AX1eCU /zkwP6nFO1b8yoZTLYwcM7Iqx46IZYzdaBmQ4BrD4uOuLo05T0YMiKs5WVrmI6AOyyrsaR IPeLCdmu66qLQD5ujRbZxNyozLkZmzrvGqxL78KrQ+wopAbQLApodMVERmcpuw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1740623543; a=rsa-sha256; cv=none; b=vptP7LwRvPStHpWm/Sxo8MOl7PkC3MKpKauSZ3aVdGQEGUgYBbh9Utm5nIJxsxW888K2VH T8+IpFvo7lF1Pzl8TcORhLy4dwei+2vI//1lCTB+L0fmJYVByF1zyJpYtibQGfFdSIECu3 uRkin62MIz2x86S7n7wCNCz3ea3qH1yT8ppRPPul/BYKrjbHIp1QSpFs12ycGwvWZsH+X5 oLamSTfPmIBC1XMopA2k7m+FPYtc3+fttWhID1SKDeXY0xkjuHY5brHqt2C+AFX9r91DLY 2N0P/68dZSJ1Gtj0NRDn1wsXTetNMlhx2KneTOxUptAgxW3Tj4yn1Xk9QEpAvw== 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=1740623543; 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=bht2IIMwZSmVYK8YFpVmyqO1jDcfRP1MujlUHruGX1I=; b=kspFIZqIl1rdRXADHCu5KsMloURPNkUBziJMvkUd83Z0nXAQWXYzYjmuHVR4IxCjUSD5/5 wcRZrJU+vS5cZx4gYFs96ruruFJcRSH5iSpUvnYCmMNQdWswyDj4ZRKVp06vyjPmja3e+S RkUUXBgtXP2FPgXhNw7tMbcdwZ0mZjPlYtTp9aQrF6K8hDnIMGELeSRg+HNEmb8PFWC6G4 t92pFcXwHI5SNaGlIBdQ8I9xDmxY8ktSgBddshzuqV57gu3nae0YOhwCROfDQ8KD+AucPp RisUcb51VNTBsOGro/yZZfDD7OLh8pyGognKUqoG3xJDkA4idim1+sWFESNDAg== 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 4Z3Fjg1t8Xz7yk; Thu, 27 Feb 2025 02:32:23 +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 51R2WNTF004154; Thu, 27 Feb 2025 02:32:23 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 51R2WN9R004151; Thu, 27 Feb 2025 02:32:23 GMT (envelope-from git) Date: Thu, 27 Feb 2025 02:32:23 GMT Message-Id: <202502270232.51R2WN9R004151@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Rick Macklem Subject: git: 8ac895f924e7 - stable/14 - nfscl: Fix setting of mtime for the NFSv4.n client 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: rmacklem X-Git-Repository: src X-Git-Refname: refs/heads/stable/14 X-Git-Reftype: branch X-Git-Commit: 8ac895f924e719be32a6173e06a6ee5d3e507932 Auto-Submitted: auto-generated The branch stable/14 has been updated by rmacklem: URL: https://cgit.FreeBSD.org/src/commit/?id=8ac895f924e719be32a6173e06a6ee5d3e507932 commit 8ac895f924e719be32a6173e06a6ee5d3e507932 Author: Rick Macklem AuthorDate: 2025-02-24 20:58:27 +0000 Commit: Rick Macklem CommitDate: 2025-02-27 02:31:01 +0000 nfscl: Fix setting of mtime for the NFSv4.n client It was reported on freebsd-fs@ that unrolling a tarball failed to set the correct modify time if delegations were being issued. This patch fixes the problem. This bug only affects NFSv4 mounts where delegations are being issued. Not running the nfscbd or disabling delegations on the NFSv4 server avoids the problem. (cherry picked from commit b616d997cb48eaafe13069eecd95f0495b2358eb) --- sys/fs/nfs/nfs_var.h | 2 +- sys/fs/nfsclient/nfs_clstate.c | 7 +++++-- sys/fs/nfsclient/nfs_clvnops.c | 4 +++- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/sys/fs/nfs/nfs_var.h b/sys/fs/nfs/nfs_var.h index 950e0c097457..c726d956fee2 100644 --- a/sys/fs/nfs/nfs_var.h +++ b/sys/fs/nfs/nfs_var.h @@ -626,7 +626,7 @@ int nfscl_renamedeleg(vnode_t, nfsv4stateid_t *, int *, vnode_t, nfsv4stateid_t *, int *, NFSPROC_T *); void nfscl_reclaimnode(vnode_t); void nfscl_newnode(vnode_t); -void nfscl_delegmodtime(vnode_t); +void nfscl_delegmodtime(struct vnode *, struct timespec *); void nfscl_deleggetmodtime(vnode_t, struct timespec *); int nfscl_trydelegreturn(struct nfscldeleg *, struct ucred *, struct nfsmount *, NFSPROC_T *); diff --git a/sys/fs/nfsclient/nfs_clstate.c b/sys/fs/nfsclient/nfs_clstate.c index 0a1eb51e279f..a666792c17f9 100644 --- a/sys/fs/nfsclient/nfs_clstate.c +++ b/sys/fs/nfsclient/nfs_clstate.c @@ -5104,7 +5104,7 @@ nfscl_newnode(vnode_t vp) * to the local clock time. */ void -nfscl_delegmodtime(vnode_t vp) +nfscl_delegmodtime(struct vnode *vp, struct timespec *mtime) { struct nfsclclient *clp; struct nfscldeleg *dp; @@ -5128,7 +5128,10 @@ nfscl_delegmodtime(vnode_t vp) } dp = nfscl_finddeleg(clp, np->n_fhp->nfh_fh, np->n_fhp->nfh_len); if (dp != NULL && (dp->nfsdl_flags & NFSCLDL_WRITE)) { - nanotime(&dp->nfsdl_modtime); + if (mtime != NULL) + dp->nfsdl_modtime = *mtime; + else + nanotime(&dp->nfsdl_modtime); dp->nfsdl_flags |= NFSCLDL_MODTIMESET; } NFSUNLOCKCLSTATE(); diff --git a/sys/fs/nfsclient/nfs_clvnops.c b/sys/fs/nfsclient/nfs_clvnops.c index bf24a161b94b..a0bb781e5e5d 100644 --- a/sys/fs/nfsclient/nfs_clvnops.c +++ b/sys/fs/nfsclient/nfs_clvnops.c @@ -1120,7 +1120,7 @@ nfs_setattr(struct vop_setattr_args *ap) * Call nfscl_delegmodtime() to set the modify time * locally, as required. */ - nfscl_delegmodtime(vp); + nfscl_delegmodtime(vp, NULL); } else NFSUNLOCKNODE(np); /* @@ -1158,6 +1158,8 @@ nfs_setattr(struct vop_setattr_args *ap) NFSUNLOCKNODE(np); } } + if (vap->va_mtime.tv_sec != VNOVAL && error == 0) + nfscl_delegmodtime(vp, &vap->va_mtime); return (error); }