1 // SPDX-License-Identifier: GPL-2.0
2
3 #include <linux/debugfs.h>
4
5 #include "nfsd.h"
6
7 static struct dentry *nfsd_top_dir __read_mostly;
8
9 /*
10 * /sys/kernel/debug/nfsd/disable-splice-read
11 *
12 * Contents:
13 * %0: NFS READ is allowed to use page splicing
14 * %1: NFS READ uses only iov iter read
15 *
16 * The default value of this setting is zero (page splicing is
17 * allowed). This setting takes immediate effect for all NFS
18 * versions, all exports, and in all NFSD net namespaces.
19 */
20
nfsd_dsr_get(void * data,u64 * val)21 static int nfsd_dsr_get(void *data, u64 *val)
22 {
23 *val = nfsd_disable_splice_read ? 1 : 0;
24 return 0;
25 }
26
nfsd_dsr_set(void * data,u64 val)27 static int nfsd_dsr_set(void *data, u64 val)
28 {
29 nfsd_disable_splice_read = (val > 0) ? true : false;
30 return 0;
31 }
32
33 DEFINE_DEBUGFS_ATTRIBUTE(nfsd_dsr_fops, nfsd_dsr_get, nfsd_dsr_set, "%llu\n");
34
nfsd_debugfs_exit(void)35 void nfsd_debugfs_exit(void)
36 {
37 debugfs_remove_recursive(nfsd_top_dir);
38 nfsd_top_dir = NULL;
39 }
40
nfsd_debugfs_init(void)41 void nfsd_debugfs_init(void)
42 {
43 nfsd_top_dir = debugfs_create_dir("nfsd", NULL);
44
45 debugfs_create_file("disable-splice-read", S_IWUSR | S_IRUGO,
46 nfsd_top_dir, NULL, &nfsd_dsr_fops);
47 }
48