The following commit has been merged in the master branch:
commit 53e760d8949895390e256e723e7ee46618310361
Merge: 8f5ae30d69d7543eee0d70083daf4de8fe15d585
bee47cb026e762841f3faece47b51f985e215edb
Author: Linus Torvalds <[email protected]>
Date: Mon Aug 11 07:38:55 2025 -0700
Merge tag 'nfsd-6.17-1' of
git://git.kernel.org/pub/scm/linux/kernel/git/cel/linux
Pull nfsd fixes from Chuck Lever:
- A correctness fix for delegated timestamps
- Address an NFSD shutdown hang when LOCALIO is in use
- Prevent a remotely exploitable crasher when TLS is in use
* tag 'nfsd-6.17-1' of
git://git.kernel.org/pub/scm/linux/kernel/git/cel/linux:
sunrpc: fix handling of server side tls alerts
nfsd: avoid ref leak in nfsd_open_local_fh()
nfsd: don't set the ctime on delegated atime updates
diff --combined fs/nfsd/vfs.c
index 98ab55ba3ced7,eaf04751d07fe..edf050766e570
--- a/fs/nfsd/vfs.c
+++ b/fs/nfsd/vfs.c
@@@ -470,7 -470,15 +470,15 @@@ static int __nfsd_setattr(struct dentr
if (!iap->ia_valid)
return 0;
- iap->ia_valid |= ATTR_CTIME;
+ /*
+ * If ATTR_DELEG is set, then this is an update from a client that
+ * holds a delegation. If this is an update for only the atime, the
+ * ctime should not be changed. If the update contains the mtime
+ * too, then ATTR_CTIME should already be set.
+ */
+ if (!(iap->ia_valid & ATTR_DELEG))
+ iap->ia_valid |= ATTR_CTIME;
+
return notify_change(&nop_mnt_idmap, dentry, iap, NULL);
}
@@@ -1867,6 -1875,7 +1875,6 @@@ nfsd_rename(struct svc_rqst *rqstp, str
struct svc_fh *tfhp, char *tname, int tlen)
{
struct dentry *fdentry, *tdentry, *odentry, *ndentry, *trap;
- struct inode *fdir, *tdir;
int type = S_IFDIR;
__be32 err;
int host_err;
@@@ -1882,8 -1891,10 +1890,8 @@@
goto out;
fdentry = ffhp->fh_dentry;
- fdir = d_inode(fdentry);
tdentry = tfhp->fh_dentry;
- tdir = d_inode(tdentry);
err = nfserr_perm;
if (!flen || isdotent(fname, flen) || !tlen || isdotent(tname, tlen))
@@@ -1944,10 -1955,10 +1952,10 @@@ retry
} else {
struct renamedata rd = {
.old_mnt_idmap = &nop_mnt_idmap,
- .old_dir = fdir,
+ .old_parent = fdentry,
.old_dentry = odentry,
.new_mnt_idmap = &nop_mnt_idmap,
- .new_dir = tdir,
+ .new_parent = tdentry,
.new_dentry = ndentry,
};
int retries;
--
LinuxNextTracking