xref: /linux/fs/nfsd/debugfs.c (revision f64397e04b4d094319a8f72bb1b82e4d2e3672ae)
19fe5ea76SChuck Lever // SPDX-License-Identifier: GPL-2.0
29fe5ea76SChuck Lever 
39fe5ea76SChuck Lever #include <linux/debugfs.h>
49fe5ea76SChuck Lever 
59fe5ea76SChuck Lever #include "nfsd.h"
69fe5ea76SChuck Lever 
79fe5ea76SChuck Lever static struct dentry *nfsd_top_dir __read_mostly;
89fe5ea76SChuck Lever 
912181490SChuck Lever /*
1012181490SChuck Lever  * /sys/kernel/debug/nfsd/disable-splice-read
1112181490SChuck Lever  *
1212181490SChuck Lever  * Contents:
1312181490SChuck Lever  *   %0: NFS READ is allowed to use page splicing
1412181490SChuck Lever  *   %1: NFS READ uses only iov iter read
1512181490SChuck Lever  *
1612181490SChuck Lever  * The default value of this setting is zero (page splicing is
1712181490SChuck Lever  * allowed). This setting takes immediate effect for all NFS
1812181490SChuck Lever  * versions, all exports, and in all NFSD net namespaces.
1912181490SChuck Lever  */
2012181490SChuck Lever 
2112181490SChuck Lever static int nfsd_dsr_get(void *data, u64 *val)
2212181490SChuck Lever {
2312181490SChuck Lever 	*val = nfsd_disable_splice_read ? 1 : 0;
2412181490SChuck Lever 	return 0;
2512181490SChuck Lever }
2612181490SChuck Lever 
2712181490SChuck Lever static int nfsd_dsr_set(void *data, u64 val)
2812181490SChuck Lever {
29*f64397e0SXichao Zhao 	nfsd_disable_splice_read = (val > 0);
3012181490SChuck Lever 	return 0;
3112181490SChuck Lever }
3212181490SChuck Lever 
3312181490SChuck Lever DEFINE_DEBUGFS_ATTRIBUTE(nfsd_dsr_fops, nfsd_dsr_get, nfsd_dsr_set, "%llu\n");
3412181490SChuck Lever 
359fe5ea76SChuck Lever void nfsd_debugfs_exit(void)
369fe5ea76SChuck Lever {
379fe5ea76SChuck Lever 	debugfs_remove_recursive(nfsd_top_dir);
389fe5ea76SChuck Lever 	nfsd_top_dir = NULL;
399fe5ea76SChuck Lever }
409fe5ea76SChuck Lever 
419fe5ea76SChuck Lever void nfsd_debugfs_init(void)
429fe5ea76SChuck Lever {
439fe5ea76SChuck Lever 	nfsd_top_dir = debugfs_create_dir("nfsd", NULL);
4412181490SChuck Lever 
4512181490SChuck Lever 	debugfs_create_file("disable-splice-read", S_IWUSR | S_IRUGO,
4612181490SChuck Lever 			    nfsd_top_dir, NULL, &nfsd_dsr_fops);
479fe5ea76SChuck Lever }
48