1 // SPDX-License-Identifier: GPL-2.0
2 /*
3 * linux/fs/fuse/fuse_sysctl.c
4 *
5 * Sysctl interface to fuse parameters
6 */
7 #include <linux/sysctl.h>
8
9 #include "fuse_i.h"
10
11 static struct ctl_table_header *fuse_table_header;
12
13 /* Bound by fuse_init_out max_pages, which is a u16 */
14 static unsigned int sysctl_fuse_max_pages_limit = 65535;
15
16 /*
17 * fuse_init_out request timeouts are u16.
18 * This goes up to ~18 hours, which is plenty for a timeout.
19 */
20 static unsigned int sysctl_fuse_req_timeout_limit = 65535;
21
22 static const struct ctl_table fuse_sysctl_table[] = {
23 {
24 .procname = "max_pages_limit",
25 .data = &fuse_max_pages_limit,
26 .maxlen = sizeof(fuse_max_pages_limit),
27 .mode = 0644,
28 .proc_handler = proc_douintvec_minmax,
29 .extra1 = SYSCTL_ONE,
30 .extra2 = &sysctl_fuse_max_pages_limit,
31 },
32 {
33 .procname = "default_request_timeout",
34 .data = &fuse_default_req_timeout,
35 .maxlen = sizeof(fuse_default_req_timeout),
36 .mode = 0644,
37 .proc_handler = proc_douintvec_minmax,
38 .extra1 = SYSCTL_ZERO,
39 .extra2 = &sysctl_fuse_req_timeout_limit,
40 },
41 {
42 .procname = "max_request_timeout",
43 .data = &fuse_max_req_timeout,
44 .maxlen = sizeof(fuse_max_req_timeout),
45 .mode = 0644,
46 .proc_handler = proc_douintvec_minmax,
47 .extra1 = SYSCTL_ZERO,
48 .extra2 = &sysctl_fuse_req_timeout_limit,
49 },
50 };
51
fuse_sysctl_register(void)52 int fuse_sysctl_register(void)
53 {
54 fuse_table_header = register_sysctl("fs/fuse", fuse_sysctl_table);
55 if (!fuse_table_header)
56 return -ENOMEM;
57 return 0;
58 }
59
fuse_sysctl_unregister(void)60 void fuse_sysctl_unregister(void)
61 {
62 unregister_sysctl_table(fuse_table_header);
63 fuse_table_header = NULL;
64 }
65