From nobody Thu Feb 27 02:36:40 2025 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 4Z3Fpd1hCNz5pWLc; Thu, 27 Feb 2025 02:36:41 +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 4Z3Fpd16wVz3kN4; Thu, 27 Feb 2025 02:36:41 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1740623801; 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=41uQjnDGcUgzRKieSpbPT4yz0SXH7uDix2aFrxi/5vs=; b=v1rWjzo2qyNlJbG5pm33GaZEFeKjergZtsfWi9TYQcgQ2w2I+stXj/RJQl2c53snt4nBNO /vzuszeUc4vqVLDezOnBZ0dDXTYlHjDKAB3nxFJr6zfGlRxEDa3neClVgNgbmRkc7no3vN w4R8Ac+P3RtCj/bu+9rBuvCJ81baCJLu1tKz9pxY2rXWhU8y2Mbikwow0HWdqMRLAVbpov IUTrFxnFohlH4vGF/dhoJ1kcAldaWJ6o9TdSU0eF67ZMrsZ1o2mQqYgA/ms52L4RqqfE6E YqUS0qiADewNIy9sRlVn9kOiGaxXY/Gf/8mKR3Nlh/ba58Zb0R+90lHFt6cO0A== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1740623801; a=rsa-sha256; cv=none; b=nZXt7wgchihcuusOg+Iy77irh8r6mDKd+cTDzBzs23iSdJSUneHVHvkvW5oDJ8jD1gYADG J9B/d08Wwltr9WJKxpZPam4lGzSLOC3vhErSBICTbCi8cye6uWsthiwuHTyD47EJUeGkZ8 Hf1TxhtFyrYvhllqyTKZ97tDivoUFxPycUhZ1dUZ1pSAgjLg1rALNrcoc1uBrBE0gDO8Qx Jwyu9kE3FEK0ugEv0w4vQmMLqcoV4Pshd7Hu7dnSVgZpdjFPrjMXr7XbOd7MZsqcbqtqhQ 0dK+CL+vDMsS+JDL5I1m4uzOQrdKkVXEizsnaEinE32XFcI0dYaXStLKPvGIcA== 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=1740623801; 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=41uQjnDGcUgzRKieSpbPT4yz0SXH7uDix2aFrxi/5vs=; b=dDXEApTTqzSht2lDnuAZEbnNp4a1w5whR+ptsWQmgOBE1Y70Xwt7K1W2pdK6FYUNFdeTDz mdCLT2Hbkwbfof4AHu6O/6ahX0HtLby0WFCmN/ldU75y6glv4sjqAI4QVXIUUXFy3TbQHi QnMDqBeGhbo9rFKpwuzgUvfLJt7v75yoZbWwFcfOt9UwjmmCtmEWckHy3mf4duI4C1GU4L 6dFDpN5iMpk3qjJai4kTHBnNTAdV1udK6bFIKtUH7SSHcpbU51USJRCeENDp5v9mBjnOtv IzdKx48JrEeTFV0ozBpuIZWATv3zJkzZ9jo+XR3yf8XuAHkze1hoNNMkXyyPUA== 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 4Z3Fpd0L39z7Zw; Thu, 27 Feb 2025 02:36:41 +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 51R2ae9N005593; Thu, 27 Feb 2025 02:36:40 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 51R2aegH005590; Thu, 27 Feb 2025 02:36:40 GMT (envelope-from git) Date: Thu, 27 Feb 2025 02:36:40 GMT Message-Id: <202502270236.51R2aegH005590@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: 319b59fbde2f - stable/13 - nfscl: Fix setting of mtime for the NFSv4.n client 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: rmacklem X-Git-Repository: src X-Git-Refname: refs/heads/stable/13 X-Git-Reftype: branch X-Git-Commit: 319b59fbde2fb90bd4e41d1f66aa59e56f66f1fe Auto-Submitted: auto-generated The branch stable/13 has been updated by rmacklem: URL: https://cgit.FreeBSD.org/src/commit/?id=319b59fbde2fb90bd4e41d1f66aa59e56f66f1fe commit 319b59fbde2fb90bd4e41d1f66aa59e56f66f1fe Author: Rick Macklem AuthorDate: 2025-02-24 20:58:27 +0000 Commit: Rick Macklem CommitDate: 2025-02-27 02:35:54 +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 083a974516b0..b5e2cd78749e 100644 --- a/sys/fs/nfs/nfs_var.h +++ b/sys/fs/nfs/nfs_var.h @@ -622,7 +622,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_tryclose(struct nfsclopen *, struct ucred *, struct nfsmount *, NFSPROC_T *, bool); diff --git a/sys/fs/nfsclient/nfs_clstate.c b/sys/fs/nfsclient/nfs_clstate.c index 9ab0a29e9c5d..282e9e39536f 100644 --- a/sys/fs/nfsclient/nfs_clstate.c +++ b/sys/fs/nfsclient/nfs_clstate.c @@ -5083,7 +5083,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; @@ -5107,7 +5107,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 38a2f6c8f4f1..f4569068972f 100644 --- a/sys/fs/nfsclient/nfs_clvnops.c +++ b/sys/fs/nfsclient/nfs_clvnops.c @@ -1119,7 +1119,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); /* @@ -1157,6 +1157,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); }