1 /* 2 * sysctl.c - Code for sysctl handling in NTFS Linux kernel driver. Part of 3 * the Linux-NTFS project. Adapted from the old NTFS driver, 4 * Copyright (C) 1997 Martin von L�wis, R�gis Duchesne 5 * 6 * Copyright (c) 2002-2005 Anton Altaparmakov 7 * 8 * This program/include file is free software; you can redistribute it and/or 9 * modify it under the terms of the GNU General Public License as published 10 * by the Free Software Foundation; either version 2 of the License, or 11 * (at your option) any later version. 12 * 13 * This program/include file is distributed in the hope that it will be 14 * useful, but WITHOUT ANY WARRANTY; without even the implied warranty 15 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 * GNU General Public License for more details. 17 * 18 * You should have received a copy of the GNU General Public License 19 * along with this program (in the main directory of the Linux-NTFS 20 * distribution in the file COPYING); if not, write to the Free Software 21 * Foundation,Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 22 */ 23 24 #ifdef DEBUG 25 26 #include <linux/module.h> 27 28 #ifdef CONFIG_SYSCTL 29 30 #include <linux/proc_fs.h> 31 #include <linux/sysctl.h> 32 33 #include "sysctl.h" 34 #include "debug.h" 35 36 #define FS_NTFS 1 37 38 /* Definition of the ntfs sysctl. */ 39 static ctl_table ntfs_sysctls[] = { 40 { FS_NTFS, "ntfs-debug", /* Binary and text IDs. */ 41 &debug_msgs,sizeof(debug_msgs), /* Data pointer and size. */ 42 0644, NULL, &proc_dointvec }, /* Mode, child, proc handler. */ 43 { 0 } 44 }; 45 46 /* Define the parent directory /proc/sys/fs. */ 47 static ctl_table sysctls_root[] = { 48 { CTL_FS, "fs", NULL, 0, 0555, ntfs_sysctls }, 49 { 0 } 50 }; 51 52 /* Storage for the sysctls header. */ 53 static struct ctl_table_header *sysctls_root_table = NULL; 54 55 /** 56 * ntfs_sysctl - add or remove the debug sysctl 57 * @add: add (1) or remove (0) the sysctl 58 * 59 * Add or remove the debug sysctl. Return 0 on success or -errno on error. 60 */ 61 int ntfs_sysctl(int add) 62 { 63 if (add) { 64 BUG_ON(sysctls_root_table); 65 sysctls_root_table = register_sysctl_table(sysctls_root, 0); 66 if (!sysctls_root_table) 67 return -ENOMEM; 68 #ifdef CONFIG_PROC_FS 69 /* 70 * If the proc filesystem is in use and we are a module, need 71 * to set the owner of our proc entry to our module. In the 72 * non-modular case, THIS_MODULE is NULL, so this is ok. 73 */ 74 ntfs_sysctls[0].de->owner = THIS_MODULE; 75 #endif 76 } else { 77 BUG_ON(!sysctls_root_table); 78 unregister_sysctl_table(sysctls_root_table); 79 sysctls_root_table = NULL; 80 } 81 return 0; 82 } 83 84 #endif /* CONFIG_SYSCTL */ 85 #endif /* DEBUG */ 86