summaryrefslogtreecommitdiffstats
path: root/fs/btrfs/super.c
diff options
context:
space:
mode:
authorWang Shilong2013-08-09 07:25:36 +0200
committerChris Mason2013-09-01 14:16:27 +0200
commitb9e9a6cbc6d25b89d8007e5a680319e07921ead8 (patch)
tree600fe0d3d6962bf13d6efbca1ddc9cbcb4f0d06b /fs/btrfs/super.c
parentBtrfs: pass gfp_t to __add_prelim_ref() to avoid always using GFP_ATOMIC (diff)
downloadkernel-qcow2-linux-b9e9a6cbc6d25b89d8007e5a680319e07921ead8.tar.gz
kernel-qcow2-linux-b9e9a6cbc6d25b89d8007e5a680319e07921ead8.tar.xz
kernel-qcow2-linux-b9e9a6cbc6d25b89d8007e5a680319e07921ead8.zip
Btrfs: allocate prelim_ref with a slab allocater
struct __prelim_ref is allocated and freed frequently when walking backref tree, using slab allocater can not only speed up allocating but also detect memory leaks. Signed-off-by: Wang Shilong <wangsl.fnst@cn.fujitsu.com> Reviewed-by: Miao Xie <miaox@cn.fujitsu.com> Reviewed-by: Jan Schmidt <list.btrfs@jan-o-sch.net> Signed-off-by: Josef Bacik <jbacik@fusionio.com> Signed-off-by: Chris Mason <chris.mason@fusionio.com>
Diffstat (limited to 'fs/btrfs/super.c')
-rw-r--r--fs/btrfs/super.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c
index 4d5d0f3eb0d8..3aab10ce63e8 100644
--- a/fs/btrfs/super.c
+++ b/fs/btrfs/super.c
@@ -56,6 +56,7 @@
#include "rcu-string.h"
#include "dev-replace.h"
#include "free-space-cache.h"
+#include "backref.h"
#include "tests/btrfs-tests.h"
#define CREATE_TRACE_POINTS
@@ -1810,6 +1811,10 @@ static int __init init_btrfs_fs(void)
if (err)
goto free_auto_defrag;
+ err = btrfs_prelim_ref_init();
+ if (err)
+ goto free_prelim_ref;
+
err = btrfs_interface_init();
if (err)
goto free_delayed_ref;
@@ -1830,6 +1835,8 @@ static int __init init_btrfs_fs(void)
unregister_ioctl:
btrfs_interface_exit();
+free_prelim_ref:
+ btrfs_prelim_ref_exit();
free_delayed_ref:
btrfs_delayed_ref_exit();
free_auto_defrag:
@@ -1856,6 +1863,7 @@ static void __exit exit_btrfs_fs(void)
btrfs_delayed_ref_exit();
btrfs_auto_defrag_exit();
btrfs_delayed_inode_exit();
+ btrfs_prelim_ref_exit();
ordered_data_exit();
extent_map_exit();
extent_io_exit();