The following commit has been merged in the master branch:
commit 53e760d8949895390e256e723e7ee46618310361
Merge: 8f5ae30d69d7543eee0d70083daf4de8fe15d585 
bee47cb026e762841f3faece47b51f985e215edb
Author: Linus Torvalds <torva...@linux-foundation.org>
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

Reply via email to