]> www.infradead.org Git - users/hch/misc.git/commitdiff
NFSD: Add /sys/kernel/debug/nfsd
authorChuck Lever <chuck.lever@oracle.com>
Sat, 8 Mar 2025 20:14:37 +0000 (15:14 -0500)
committerChuck Lever <chuck.lever@oracle.com>
Sun, 11 May 2025 23:48:23 +0000 (19:48 -0400)
Create a small sandbox under /sys/kernel/debug for experimental NFS
server feature settings. There is no API/ABI compatibility guarantee
for these settings.

The only documentation for such settings, if any documentation exists,
is in the kernel source code.

Reviewed-by: Jeff Layton <jlayton@kernel.org>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
fs/nfsd/Makefile
fs/nfsd/debugfs.c [new file with mode: 0644]
fs/nfsd/nfsctl.c
fs/nfsd/nfsd.h

index 2f687619f65b38ddcfa0126aca69b6f98dd731f4..55744bb786c9a09ea47069f3643aaf92397c17a8 100644 (file)
@@ -24,6 +24,7 @@ nfsd-$(CONFIG_NFSD_BLOCKLAYOUT) += blocklayout.o blocklayoutxdr.o
 nfsd-$(CONFIG_NFSD_SCSILAYOUT) += blocklayout.o blocklayoutxdr.o
 nfsd-$(CONFIG_NFSD_FLEXFILELAYOUT) += flexfilelayout.o flexfilelayoutxdr.o
 nfsd-$(CONFIG_NFS_LOCALIO) += localio.o
+nfsd-$(CONFIG_DEBUG_FS) += debugfs.o
 
 
 .PHONY: xdrgen
diff --git a/fs/nfsd/debugfs.c b/fs/nfsd/debugfs.c
new file mode 100644 (file)
index 0000000..e913268
--- /dev/null
@@ -0,0 +1,18 @@
+// SPDX-License-Identifier: GPL-2.0
+
+#include <linux/debugfs.h>
+
+#include "nfsd.h"
+
+static struct dentry *nfsd_top_dir __read_mostly;
+
+void nfsd_debugfs_exit(void)
+{
+       debugfs_remove_recursive(nfsd_top_dir);
+       nfsd_top_dir = NULL;
+}
+
+void nfsd_debugfs_init(void)
+{
+       nfsd_top_dir = debugfs_create_dir("nfsd", NULL);
+}
index f9763ced743d2497e88f39182df53f6d31d815ab..3f3e9f6c425018d043492a824b0bf1d4513308a0 100644 (file)
@@ -2281,6 +2281,8 @@ static int __init init_nfsd(void)
 {
        int retval;
 
+       nfsd_debugfs_init();
+
        retval = nfsd4_init_slabs();
        if (retval)
                return retval;
@@ -2329,6 +2331,7 @@ out_free_pnfs:
        nfsd4_exit_pnfs();
 out_free_slabs:
        nfsd4_free_slabs();
+       nfsd_debugfs_exit();
        return retval;
 }
 
@@ -2345,6 +2348,7 @@ static void __exit exit_nfsd(void)
        nfsd_lockd_shutdown();
        nfsd4_free_slabs();
        nfsd4_exit_pnfs();
+       nfsd_debugfs_exit();
 }
 
 MODULE_AUTHOR("Olaf Kirch <okir@monad.swb.de>");
index e2997f0ffbc537fcbd9e9da004ab0b6ad6164cbb..8a53ddab5df011d0f7b868859b6fc720c99eee66 100644 (file)
@@ -156,6 +156,14 @@ void nfsd_reset_versions(struct nfsd_net *nn);
 int nfsd_create_serv(struct net *net);
 void nfsd_destroy_serv(struct net *net);
 
+#ifdef CONFIG_DEBUG_FS
+void nfsd_debugfs_init(void);
+void nfsd_debugfs_exit(void);
+#else
+static inline void nfsd_debugfs_init(void) {}
+static inline void nfsd_debugfs_exit(void) {}
+#endif
+
 extern int nfsd_max_blksize;
 
 static inline int nfsd_v4client(struct svc_rqst *rq)