Skip to content

Commit

Permalink
btrfs: add simple debugfs interface
Browse files Browse the repository at this point in the history
Help during debugging to export various interesting infromation and
tunables without the need of extra mount options or ioctls.

Usage:
* declare your variable in sysfs.h, and include where you need it
* define the variable in sysfs.c and make it visible via
  debugfs_create_TYPE

Depends on CONFIG_DEBUG_FS.

Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Josef Bacik <jbacik@fb.com>
  • Loading branch information
kdave authored and Josef Bacik committed Mar 10, 2014
1 parent ace0105 commit 1bae309
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 6 deletions.
33 changes: 27 additions & 6 deletions fs/btrfs/sysfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
#include <linux/kobject.h>
#include <linux/bug.h>
#include <linux/genhd.h>
#include <linux/debugfs.h>

#include "ctree.h"
#include "disk-io.h"
Expand Down Expand Up @@ -599,6 +600,12 @@ static int add_device_membership(struct btrfs_fs_info *fs_info)
/* /sys/fs/btrfs/ entry */
static struct kset *btrfs_kset;

/* /sys/kernel/debug/btrfs */
static struct dentry *btrfs_debugfs_root_dentry;

/* Debugging tunables and exported data */
u64 btrfs_debugfs_test;

int btrfs_sysfs_add_one(struct btrfs_fs_info *fs_info)
{
int error;
Expand Down Expand Up @@ -642,27 +649,41 @@ int btrfs_sysfs_add_one(struct btrfs_fs_info *fs_info)
return error;
}

static int btrfs_init_debugfs(void)
{
#ifdef CONFIG_DEBUG_FS
btrfs_debugfs_root_dentry = debugfs_create_dir("btrfs", NULL);
if (!btrfs_debugfs_root_dentry)
return -ENOMEM;

debugfs_create_u64("test", S_IRUGO | S_IWUGO, btrfs_debugfs_root_dentry,
&btrfs_debugfs_test);
#endif
return 0;
}

int btrfs_init_sysfs(void)
{
int ret;

btrfs_kset = kset_create_and_add("btrfs", NULL, fs_kobj);
if (!btrfs_kset)
return -ENOMEM;

init_feature_attrs();
ret = btrfs_init_debugfs();
if (ret)
return ret;

init_feature_attrs();
ret = sysfs_create_group(&btrfs_kset->kobj, &btrfs_feature_attr_group);
if (ret) {
kset_unregister(btrfs_kset);
return ret;
}

return 0;
return ret;
}

void btrfs_exit_sysfs(void)
{
sysfs_remove_group(&btrfs_kset->kobj, &btrfs_feature_attr_group);
kset_unregister(btrfs_kset);
debugfs_remove_recursive(btrfs_debugfs_root_dentry);
}

5 changes: 5 additions & 0 deletions fs/btrfs/sysfs.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
#ifndef _BTRFS_SYSFS_H_
#define _BTRFS_SYSFS_H_

/*
* Data exported through sysfs
*/
extern u64 btrfs_debugfs_test;

enum btrfs_feature_set {
FEAT_COMPAT,
FEAT_COMPAT_RO,
Expand Down

0 comments on commit 1bae309

Please sign in to comment.