aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/extent-tree.c
diff options
context:
space:
mode:
authorMiao Xie <miaox@cn.fujitsu.com>2012-11-20 21:21:28 -0500
committerJosef Bacik <jbacik@fusionio.com>2013-02-20 09:36:34 -0500
commit78a6184a3ff9041280ee56273c01e5679a831b39 (patch)
tree0310eb020cf6ed7a8ff71feb8c468bb6e42488fa /fs/btrfs/extent-tree.c
parent6f60cbd3ae442cb35861bb522f388db123d42ec1 (diff)
Btrfs: use slabs for delayed reference allocation
The delayed reference allocation is in the fast path of the IO, so use slabs to improve the speed of the allocation. And besides that, it can do check for leaked objects when the module is removed. Signed-off-by: Miao Xie <miaox@cn.fujitsu.com>
Diffstat (limited to 'fs/btrfs/extent-tree.c')
-rw-r--r--fs/btrfs/extent-tree.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c
index 61da9d0bb805..9bd87f0d73d0 100644
--- a/fs/btrfs/extent-tree.c
+++ b/fs/btrfs/extent-tree.c
@@ -2285,7 +2285,7 @@ static noinline int run_clustered_refs(struct btrfs_trans_handle *trans,
2285 ref = &locked_ref->node; 2285 ref = &locked_ref->node;
2286 2286
2287 if (extent_op && must_insert_reserved) { 2287 if (extent_op && must_insert_reserved) {
2288 kfree(extent_op); 2288 btrfs_free_delayed_extent_op(extent_op);
2289 extent_op = NULL; 2289 extent_op = NULL;
2290 } 2290 }
2291 2291
@@ -2294,7 +2294,7 @@ static noinline int run_clustered_refs(struct btrfs_trans_handle *trans,
2294 2294
2295 ret = run_delayed_extent_op(trans, root, 2295 ret = run_delayed_extent_op(trans, root,
2296 ref, extent_op); 2296 ref, extent_op);
2297 kfree(extent_op); 2297 btrfs_free_delayed_extent_op(extent_op);
2298 2298
2299 if (ret) { 2299 if (ret) {
2300 list_del_init(&locked_ref->cluster); 2300 list_del_init(&locked_ref->cluster);
@@ -2338,7 +2338,7 @@ static noinline int run_clustered_refs(struct btrfs_trans_handle *trans,
2338 must_insert_reserved); 2338 must_insert_reserved);
2339 2339
2340 btrfs_put_delayed_ref(ref); 2340 btrfs_put_delayed_ref(ref);
2341 kfree(extent_op); 2341 btrfs_free_delayed_extent_op(extent_op);
2342 count++; 2342 count++;
2343 2343
2344 if (ret) { 2344 if (ret) {
@@ -2586,7 +2586,7 @@ int btrfs_set_disk_extent_flags(struct btrfs_trans_handle *trans,
2586 struct btrfs_delayed_extent_op *extent_op; 2586 struct btrfs_delayed_extent_op *extent_op;
2587 int ret; 2587 int ret;
2588 2588
2589 extent_op = kmalloc(sizeof(*extent_op), GFP_NOFS); 2589 extent_op = btrfs_alloc_delayed_extent_op();
2590 if (!extent_op) 2590 if (!extent_op)
2591 return -ENOMEM; 2591 return -ENOMEM;
2592 2592
@@ -2598,7 +2598,7 @@ int btrfs_set_disk_extent_flags(struct btrfs_trans_handle *trans,
2598 ret = btrfs_add_delayed_extent_op(root->fs_info, trans, bytenr, 2598 ret = btrfs_add_delayed_extent_op(root->fs_info, trans, bytenr,
2599 num_bytes, extent_op); 2599 num_bytes, extent_op);
2600 if (ret) 2600 if (ret)
2601 kfree(extent_op); 2601 btrfs_free_delayed_extent_op(extent_op);
2602 return ret; 2602 return ret;
2603} 2603}
2604 2604
@@ -5330,7 +5330,7 @@ static noinline int check_ref_cleanup(struct btrfs_trans_handle *trans,
5330 if (head->extent_op) { 5330 if (head->extent_op) {
5331 if (!head->must_insert_reserved) 5331 if (!head->must_insert_reserved)
5332 goto out; 5332 goto out;
5333 kfree(head->extent_op); 5333 btrfs_free_delayed_extent_op(head->extent_op);
5334 head->extent_op = NULL; 5334 head->extent_op = NULL;
5335 } 5335 }
5336 5336
@@ -6400,7 +6400,7 @@ struct extent_buffer *btrfs_alloc_free_block(struct btrfs_trans_handle *trans,
6400 6400
6401 if (root_objectid != BTRFS_TREE_LOG_OBJECTID) { 6401 if (root_objectid != BTRFS_TREE_LOG_OBJECTID) {
6402 struct btrfs_delayed_extent_op *extent_op; 6402 struct btrfs_delayed_extent_op *extent_op;
6403 extent_op = kmalloc(sizeof(*extent_op), GFP_NOFS); 6403 extent_op = btrfs_alloc_delayed_extent_op();
6404 BUG_ON(!extent_op); /* -ENOMEM */ 6404 BUG_ON(!extent_op); /* -ENOMEM */
6405 if (key) 6405 if (key)
6406 memcpy(&extent_op->key, key, sizeof(extent_op->key)); 6406 memcpy(&extent_op->key, key, sizeof(extent_op->key));