From nobody Mon Feb 24 20:59:31 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 4Z1tQX1c96z5pspP; Mon, 24 Feb 2025 20:59:32 +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 4Z1tQW728sz4Gtk; Mon, 24 Feb 2025 20:59:31 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1740430772; 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=nth2TyyBl6A1GbFd0UKTYHtBLOKEjkV+a3UYpq1222c=; b=qI9oS6P2vzyS9IQeLoGLXXbqaouAgn7o5RW6a6x/BbP22k1+Y4znnrZwkwyuMkpLvM2/NG vo3dHvKheTPE+8J/90dJGd0APHUK1a0dllH/aU/OqmoPezoNpEmHaij1l3G7ZvTK08iVrs h8lvV3hKSmdXSoW42QB8jiXzRbLfdEsIxMdLOw4sPQU773Wp6hU6OVKN2G0YPx7/ej57tJ 6X4PO0yLr/4VkPfd2c0wgW8xS1fpWCICwVJL+5T1E5Anttub89+g1yBpzH1XPYn0iwtCOq 9pcSIraxIcOpQH49DKCTGVg2tXgT0fbP5IUeOTgW8ZoX7eixNH/5UtDxc3ukbQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1740430772; a=rsa-sha256; cv=none; b=VBOJxgxuWLn9gWxiqmX/8ovu7Y7egR+Lh9CmD2lRXEXpqXBniqNOSEGt1YzgQ8fo+BMxq8 b+Sk1g9YP59r8t/1i/7ZX/5FeBqYoatEfqqycGw3j/uqR7jQrmWkxWgyuuGkZjpXGytiW8 JaSoN+vztKreGERTjkATQRkqMe85iFZexJ+5mdhH4ddpSZtrP7CAshUt0nmjpiEmERMGtX 5DAYaxs2gD+sd5kpnz12QzS2xOm2x1kcgFLECPS4CbMbnsInj6ZJtRz7dOZaLgLWMIywFl clVwfWJv1KSn0dhhgw1vzbQIZeRWXfFpqONSxZsDu6wlTg3c5tlVfwdHfLHnRA== 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=1740430772; 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=nth2TyyBl6A1GbFd0UKTYHtBLOKEjkV+a3UYpq1222c=; b=xURExbn+exS45FWqfkffEkY8qkKVxx91uThvZEQ8LV75oUtSJCcvJbqs1Od8YhHSt/6sAj R3HZIk2eydmgZq5wbAOtvRrUGC5Mx5e1Z5AzqFgIKqOlfMD2CnIccqmnuqHar6pg1aI9ct q+BJ6UbylRv3QsXz50Eb+3rKw/5PEFEK/uoo1hJwzBRqIJmtLg0dDl+wAhirVkOt4z0Koj voN0Mn6HZraRiBY6kNFnN6g7Hk1PSrtHFcPjysLwsW5AH5RxWVH7Saw8GlnGmAeHIRrcjY Z7x3EXg04WoVfurBQDP7xx60jMBBgEgYtj47Xkmndso9/n52wtgL5XJqYXNDdg== 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 4Z1tQW6CKXzx01; Mon, 24 Feb 2025 20:59:31 +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 51OKxVgV083247; Mon, 24 Feb 2025 20:59:31 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 51OKxVE9083244; Mon, 24 Feb 2025 20:59:31 GMT (envelope-from git) Date: Mon, 24 Feb 2025 20:59:31 GMT Message-Id: <202502242059.51OKxVE9083244@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Rick Macklem Subject: git: b616d997cb48 - main - nfscl: Fix setting of mtime for the NFSv4.n client 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: rmacklem X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: b616d997cb48eaafe13069eecd95f0495b2358eb Auto-Submitted: auto-generated The branch main has been updated by rmacklem: URL: https://cgit.FreeBSD.org/src/commit/?id=b616d997cb48eaafe13069eecd95f0495b2358eb commit b616d997cb48eaafe13069eecd95f0495b2358eb Author: Rick Macklem AuthorDate: 2025-02-24 20:58:27 +0000 Commit: Rick Macklem CommitDate: 2025-02-24 20:58:27 +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. Reported by: Peter Much Tested by: Peter Much MFC after: 3 days --- 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 b48d853b285e..a95d9245c098 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 7d1aab753628..adfb68f5d8f5 100644 --- a/sys/fs/nfsclient/nfs_clstate.c +++ b/sys/fs/nfsclient/nfs_clstate.c @@ -5174,7 +5174,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; @@ -5198,7 +5198,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); }