Commit 0f49d5d0 authored by Jose R. Santos's avatar Jose R. Santos Committed by Theodore Ts'o

jbd2: Move jbd2-debug file to debugfs

The jbd2-debug file used to be located in /proc/sys/fs/jbd2-debug, but it
incorrectly used create_proc_entry() instead of the sysctl routines, and
no proc entry was ever created.

Instead of fixing this we might as well move the jbd2-debug file to
debugfs which would be the preferred location for this kind of tunable.
The new location is now /sys/kernel/debug/jbd2/jbd2-debug.
Signed-off-by: default avatarJose R. Santos <jrs@us.ibm.com>
Signed-off-by: default avatar"Theodore Ts'o" <tytso@mit.edu>
parent e23291b9
...@@ -251,7 +251,7 @@ config JBD2 ...@@ -251,7 +251,7 @@ config JBD2
config JBD2_DEBUG config JBD2_DEBUG
bool "JBD2 (ext4dev/ext4) debugging support" bool "JBD2 (ext4dev/ext4) debugging support"
depends on JBD2 depends on JBD2 && DEBUG_FS
help help
If you are using the ext4dev/ext4 journaled file system (or If you are using the ext4dev/ext4 journaled file system (or
potentially any other filesystem/device using JBD2), this option potentially any other filesystem/device using JBD2), this option
...@@ -260,10 +260,10 @@ config JBD2_DEBUG ...@@ -260,10 +260,10 @@ config JBD2_DEBUG
By default, the debugging output will be turned off. By default, the debugging output will be turned off.
If you select Y here, then you will be able to turn on debugging If you select Y here, then you will be able to turn on debugging
with "echo N > /proc/sys/fs/jbd2-debug", where N is a number between with "echo N > /sys/kernel/debug/jbd2/jbd2-debug", where N is a
1 and 5. The higher the number, the more debugging output is number between 1 and 5. The higher the number, the more debugging
generated. To turn debugging off again, do output is generated. To turn debugging off again, do
"echo 0 > /proc/sys/fs/jbd2-debug". "echo 0 > /sys/kernel/debug/jbd2/jbd2-debug".
config FS_MBCACHE config FS_MBCACHE
# Meta block cache for Extended Attributes (ext2/ext3/ext4) # Meta block cache for Extended Attributes (ext2/ext3/ext4)
......
...@@ -35,6 +35,7 @@ ...@@ -35,6 +35,7 @@
#include <linux/kthread.h> #include <linux/kthread.h>
#include <linux/poison.h> #include <linux/poison.h>
#include <linux/proc_fs.h> #include <linux/proc_fs.h>
#include <linux/debugfs.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
#include <asm/page.h> #include <asm/page.h>
...@@ -1951,64 +1952,50 @@ void jbd2_journal_put_journal_head(struct journal_head *jh) ...@@ -1951,64 +1952,50 @@ void jbd2_journal_put_journal_head(struct journal_head *jh)
} }
/* /*
* /proc tunables * debugfs tunables
*/ */
#if defined(CONFIG_JBD2_DEBUG) #if defined(CONFIG_JBD2_DEBUG)
int jbd2_journal_enable_debug; u8 jbd2_journal_enable_debug;
EXPORT_SYMBOL(jbd2_journal_enable_debug); EXPORT_SYMBOL(jbd2_journal_enable_debug);
#endif #endif
#if defined(CONFIG_JBD2_DEBUG) && defined(CONFIG_PROC_FS) #if defined(CONFIG_JBD2_DEBUG) && defined(CONFIG_DEBUG_FS)
static struct proc_dir_entry *proc_jbd_debug; #define JBD2_DEBUG_NAME "jbd2-debug"
static int read_jbd_debug(char *page, char **start, off_t off, struct dentry *jbd2_debugfs_dir, *jbd2_debug;
int count, int *eof, void *data)
{
int ret;
ret = sprintf(page + off, "%d\n", jbd2_journal_enable_debug); static void __init jbd2_create_debugfs_entry(void)
*eof = 1; {
return ret; jbd2_debugfs_dir = debugfs_create_dir("jbd2", NULL);
if (jbd2_debugfs_dir)
jbd2_debug = debugfs_create_u8(JBD2_DEBUG_NAME, S_IRUGO,
jbd2_debugfs_dir,
&jbd2_journal_enable_debug);
} }
static int write_jbd_debug(struct file *file, const char __user *buffer, static void __exit jbd2_remove_debugfs_entry(void)
unsigned long count, void *data)
{ {
char buf[32]; if (jbd2_debug)
debugfs_remove(jbd2_debug);
if (count > ARRAY_SIZE(buf) - 1) if (jbd2_debugfs_dir)
count = ARRAY_SIZE(buf) - 1; debugfs_remove(jbd2_debugfs_dir);
if (copy_from_user(buf, buffer, count))
return -EFAULT;
buf[ARRAY_SIZE(buf) - 1] = '\0';
jbd2_journal_enable_debug = simple_strtoul(buf, NULL, 10);
return count;
} }
#define JBD_PROC_NAME "sys/fs/jbd2-debug" #else
static void __init create_jbd_proc_entry(void) static void __init jbd2_create_debugfs_entry(void)
{ {
proc_jbd_debug = create_proc_entry(JBD_PROC_NAME, 0644, NULL); do {
if (proc_jbd_debug) { } while (0);
/* Why is this so hard? */
proc_jbd_debug->read_proc = read_jbd_debug;
proc_jbd_debug->write_proc = write_jbd_debug;
}
} }
static void __exit jbd2_remove_jbd_proc_entry(void) static void __exit jbd2_remove_debugfs_entry(void)
{ {
if (proc_jbd_debug) do {
remove_proc_entry(JBD_PROC_NAME, NULL); } while (0);
} }
#else
#define create_jbd_proc_entry() do {} while (0)
#define jbd2_remove_jbd_proc_entry() do {} while (0)
#endif #endif
struct kmem_cache *jbd2_handle_cache; struct kmem_cache *jbd2_handle_cache;
...@@ -2067,7 +2054,7 @@ static int __init journal_init(void) ...@@ -2067,7 +2054,7 @@ static int __init journal_init(void)
ret = journal_init_caches(); ret = journal_init_caches();
if (ret != 0) if (ret != 0)
jbd2_journal_destroy_caches(); jbd2_journal_destroy_caches();
create_jbd_proc_entry(); jbd2_create_debugfs_entry();
return ret; return ret;
} }
...@@ -2078,7 +2065,7 @@ static void __exit journal_exit(void) ...@@ -2078,7 +2065,7 @@ static void __exit journal_exit(void)
if (n) if (n)
printk(KERN_EMERG "JBD: leaked %d journal_heads!\n", n); printk(KERN_EMERG "JBD: leaked %d journal_heads!\n", n);
#endif #endif
jbd2_remove_jbd_proc_entry(); jbd2_remove_debugfs_entry();
jbd2_journal_destroy_caches(); jbd2_journal_destroy_caches();
} }
......
...@@ -57,7 +57,7 @@ ...@@ -57,7 +57,7 @@
* CONFIG_JBD2_DEBUG is on. * CONFIG_JBD2_DEBUG is on.
*/ */
#define JBD_EXPENSIVE_CHECKING #define JBD_EXPENSIVE_CHECKING
extern int jbd2_journal_enable_debug; extern u8 jbd2_journal_enable_debug;
#define jbd_debug(n, f, a...) \ #define jbd_debug(n, f, a...) \
do { \ do { \
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment