^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) // SPDX-License-Identifier: GPL-2.0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * linux/fs/nfs/sysctl.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) * Sysctl interface to NFS parameters
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) #include <linux/types.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) #include <linux/linkage.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) #include <linux/ctype.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) #include <linux/fs.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) #include <linux/sysctl.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) #include <linux/module.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) #include <linux/nfs_fs.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) static struct ctl_table_header *nfs_callback_sysctl_table;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) static struct ctl_table nfs_cb_sysctls[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) .procname = "nfs_mountpoint_timeout",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) .data = &nfs_mountpoint_expiry_timeout,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) .maxlen = sizeof(nfs_mountpoint_expiry_timeout),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) .mode = 0644,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) .proc_handler = proc_dointvec_jiffies,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) .procname = "nfs_congestion_kb",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) .data = &nfs_congestion_kb,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) .maxlen = sizeof(nfs_congestion_kb),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) .mode = 0644,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) .proc_handler = proc_dointvec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) { }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) static struct ctl_table nfs_cb_sysctl_dir[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) .procname = "nfs",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) .mode = 0555,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) .child = nfs_cb_sysctls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) { }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) static struct ctl_table nfs_cb_sysctl_root[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) .procname = "fs",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) .mode = 0555,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) .child = nfs_cb_sysctl_dir,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) { }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) int nfs_register_sysctl(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) nfs_callback_sysctl_table = register_sysctl_table(nfs_cb_sysctl_root);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) if (nfs_callback_sysctl_table == NULL)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) return -ENOMEM;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) void nfs_unregister_sysctl(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) unregister_sysctl_table(nfs_callback_sysctl_table);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) nfs_callback_sysctl_table = NULL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) }