xref: /linux/fs/ntfs/sysctl.c (revision 1e9ea7e04472d4e5e12e58c881eaacfb3e49b669)
1*1e9ea7e0SNamjae Jeon // SPDX-License-Identifier: GPL-2.0-or-later
2*1e9ea7e0SNamjae Jeon /*
3*1e9ea7e0SNamjae Jeon  * sysctl.c - Code for sysctl handling in NTFS Linux kernel driver. Part of
4*1e9ea7e0SNamjae Jeon  *	      the Linux-NTFS project. Adapted from the old NTFS driver,
5*1e9ea7e0SNamjae Jeon  *	      Copyright (C) 1997 Martin von Löwis, Régis Duchesne
6*1e9ea7e0SNamjae Jeon  *
7*1e9ea7e0SNamjae Jeon  * Copyright (c) 2002-2005 Anton Altaparmakov
8*1e9ea7e0SNamjae Jeon  */
9*1e9ea7e0SNamjae Jeon 
10*1e9ea7e0SNamjae Jeon #ifdef DEBUG
11*1e9ea7e0SNamjae Jeon 
12*1e9ea7e0SNamjae Jeon #include <linux/module.h>
13*1e9ea7e0SNamjae Jeon 
14*1e9ea7e0SNamjae Jeon #ifdef CONFIG_SYSCTL
15*1e9ea7e0SNamjae Jeon 
16*1e9ea7e0SNamjae Jeon #include <linux/proc_fs.h>
17*1e9ea7e0SNamjae Jeon #include <linux/sysctl.h>
18*1e9ea7e0SNamjae Jeon 
19*1e9ea7e0SNamjae Jeon #include "sysctl.h"
20*1e9ea7e0SNamjae Jeon #include "debug.h"
21*1e9ea7e0SNamjae Jeon 
22*1e9ea7e0SNamjae Jeon /* Definition of the ntfs sysctl. */
23*1e9ea7e0SNamjae Jeon static struct ctl_table ntfs_sysctls[] = {
24*1e9ea7e0SNamjae Jeon 	{
25*1e9ea7e0SNamjae Jeon 		.procname	= "ntfs-debug",
26*1e9ea7e0SNamjae Jeon 		.data		= &debug_msgs,		/* Data pointer and size. */
27*1e9ea7e0SNamjae Jeon 		.maxlen		= sizeof(debug_msgs),
28*1e9ea7e0SNamjae Jeon 		.mode		= 0644,			/* Mode, proc handler. */
29*1e9ea7e0SNamjae Jeon 		.proc_handler	= proc_dointvec
30*1e9ea7e0SNamjae Jeon 	},
31*1e9ea7e0SNamjae Jeon };
32*1e9ea7e0SNamjae Jeon 
33*1e9ea7e0SNamjae Jeon /* Storage for the sysctls header. */
34*1e9ea7e0SNamjae Jeon static struct ctl_table_header *sysctls_root_table;
35*1e9ea7e0SNamjae Jeon 
36*1e9ea7e0SNamjae Jeon /**
37*1e9ea7e0SNamjae Jeon  * ntfs_sysctl - add or remove the debug sysctl
38*1e9ea7e0SNamjae Jeon  * @add:	add (1) or remove (0) the sysctl
39*1e9ea7e0SNamjae Jeon  *
40*1e9ea7e0SNamjae Jeon  * Add or remove the debug sysctl. Return 0 on success or -errno on error.
41*1e9ea7e0SNamjae Jeon  */
42*1e9ea7e0SNamjae Jeon int ntfs_sysctl(int add)
43*1e9ea7e0SNamjae Jeon {
44*1e9ea7e0SNamjae Jeon 	if (add) {
45*1e9ea7e0SNamjae Jeon 		BUG_ON(sysctls_root_table);
46*1e9ea7e0SNamjae Jeon 		sysctls_root_table = register_sysctl("fs", ntfs_sysctls);
47*1e9ea7e0SNamjae Jeon 		if (!sysctls_root_table)
48*1e9ea7e0SNamjae Jeon 			return -ENOMEM;
49*1e9ea7e0SNamjae Jeon 	} else {
50*1e9ea7e0SNamjae Jeon 		BUG_ON(!sysctls_root_table);
51*1e9ea7e0SNamjae Jeon 		unregister_sysctl_table(sysctls_root_table);
52*1e9ea7e0SNamjae Jeon 		sysctls_root_table = NULL;
53*1e9ea7e0SNamjae Jeon 	}
54*1e9ea7e0SNamjae Jeon 	return 0;
55*1e9ea7e0SNamjae Jeon }
56*1e9ea7e0SNamjae Jeon 
57*1e9ea7e0SNamjae Jeon #endif /* CONFIG_SYSCTL */
58*1e9ea7e0SNamjae Jeon #endif /* DEBUG */
59