]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
Merge tag 'nfsd-6.19' of git://git.kernel.org/pub/scm/linux/kernel/git/cel/linux
authorLinus Torvalds <torvalds@linux-foundation.org>
Sat, 6 Dec 2025 18:57:02 +0000 (10:57 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sat, 6 Dec 2025 18:57:02 +0000 (10:57 -0800)
Pull nfsd updates from Chuck Lever:

 - Mike Snitzer's mechanism for disabling I/O caching introduced in
   v6.18 is extended to include using direct I/O. The goal is to further
   reduce the memory footprint consumed by NFS clients accessing large
   data sets via NFSD.

 - The NFSD community adopted a maintainer entry profile during this
   cycle. See

      Documentation/filesystems/nfs/nfsd-maintainer-entry-profile.rst

 - Work continues on hardening NFSD's implementation of the pNFS block
   layout type. This type enables pNFS clients to directly access the
   underlying block devices that contain an exported file system,
   reducing server overhead and increasing data throughput.

 - The remaining patches are clean-ups and minor optimizations. Many
   thanks to the contributors, reviewers, testers, and bug reporters who
   participated during the v6.19 NFSD development cycle.

* tag 'nfsd-6.19' of git://git.kernel.org/pub/scm/linux/kernel/git/cel/linux: (38 commits)
  NFSD: nfsd-io-modes: Separate lists
  NFSD: nfsd-io-modes: Wrap shell snippets in literal code blocks
  NFSD: Add toctree entry for NFSD IO modes docs
  NFSD: add Documentation/filesystems/nfs/nfsd-io-modes.rst
  NFSD: Implement NFSD_IO_DIRECT for NFS WRITE
  NFSD: Make FILE_SYNC WRITEs comply with spec
  NFSD: Add trace point for SCSI fencing operation.
  NFSD: use correct reservation type in nfsd4_scsi_fence_client
  xdrgen: Don't generate unnecessary semicolon
  xdrgen: Fix union declarations
  NFSD: don't start nfsd if sv_permsocks is empty
  xdrgen: handle _XdrString in union encoder/decoder
  xdrgen: Fix the variable-length opaque field decoder template
  xdrgen: Make the xdrgen script location-independent
  xdrgen: Generalize/harden pathname construction
  lockd: don't allow locking on reexported NFSv2/3
  MAINTAINERS: add a nfsd blocklayout reviewer
  nfsd: Use MD5 library instead of crypto_shash
  nfsd: stop pretending that we cache the SEQUENCE reply.
  NFS: nfsd-maintainer-entry-profile: Inline function name prefixes
  ...

1  2 
MAINTAINERS
fs/nfsd/nfs4recover.c
fs/nfsd/nfs4state.c
fs/nfsd/vfs.c
fs/nfsd/vfs.h
net/sunrpc/svcsock.c

diff --cc MAINTAINERS
Simple merge
index b39d4cbdfd35e2fc23635fd6a4898e068f95d632,aa15b30f9dbffa3ed255a12673cda398d309428b..441dfbfe2d2bd082a848a4c681c1b8429cbf7661
@@@ -210,17 -160,18 +158,16 @@@ nfsd4_create_clid_dir(struct nfs4_clien
                 * In the 4.0 case, we should never get here; but we may
                 * as well be forgiving and just succeed silently.
                 */
 -              goto out_put;
 -      dentry = vfs_mkdir(&nop_mnt_idmap, d_inode(dir), dentry, S_IRWXU);
 +              goto out_end;
 +      dentry = vfs_mkdir(&nop_mnt_idmap, d_inode(dir), dentry, 0700, NULL);
        if (IS_ERR(dentry))
                status = PTR_ERR(dentry);
 -out_put:
 -      if (!status)
 -              dput(dentry);
 -out_unlock:
 -      inode_unlock(d_inode(dir));
 +out_end:
 +      end_creating(dentry);
 +out:
        if (status == 0) {
                if (nn->in_grace)
-                       __nfsd4_create_reclaim_record_grace(clp, dname,
-                                       HEXDIR_LEN, nn);
+                       __nfsd4_create_reclaim_record_grace(clp, dname, nn);
                vfs_fsync(nn->rec_file, 0);
        } else {
                printk(KERN_ERR "NFSD: failed to write recovery record"
@@@ -415,10 -363,17 +351,17 @@@ purge_old(struct dentry *parent, char *
        if (nfs4_has_reclaimed_state(name, nn))
                goto out_free;
  
-       status = vfs_rmdir(&nop_mnt_idmap, d_inode(parent), child, NULL);
-       if (status)
-               printk("failed to remove client recovery directory %pd\n",
-                               child);
+       inode_lock_nested(d_inode(parent), I_MUTEX_PARENT);
+       child = lookup_one(&nop_mnt_idmap, &QSTR(cname), parent);
+       if (!IS_ERR(child)) {
 -              status = vfs_rmdir(&nop_mnt_idmap, d_inode(parent), child);
++              status = vfs_rmdir(&nop_mnt_idmap, d_inode(parent), child, NULL);
+               if (status)
+                       printk("failed to remove client recovery directory %pd\n",
+                              child);
+               dput(child);
+       }
+       inode_unlock(d_inode(parent));
  out_free:
        kfree(name.data);
  out:
Simple merge
diff --cc fs/nfsd/vfs.c
Simple merge
diff --cc fs/nfsd/vfs.h
Simple merge
Simple merge