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