aboutsummaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
Diffstat (limited to 'fs')
-rw-r--r--fs/btrfs/delayed-ref.c10
-rw-r--r--fs/btrfs/delayed-ref.h1
2 files changed, 8 insertions, 3 deletions
diff --git a/fs/btrfs/delayed-ref.c b/fs/btrfs/delayed-ref.c
index 759fa247ced8..cbf7dc8ae3ec 100644
--- a/fs/btrfs/delayed-ref.c
+++ b/fs/btrfs/delayed-ref.c
@@ -450,8 +450,12 @@ static noinline int __btrfs_add_delayed_ref(struct btrfs_trans_handle *trans,
450 * the head node stores the sum of all the mods, so dropping a ref 450 * the head node stores the sum of all the mods, so dropping a ref
451 * should drop the sum in the head node by one. 451 * should drop the sum in the head node by one.
452 */ 452 */
453 if (parent == (u64)-1 && action == BTRFS_DROP_DELAYED_REF) 453 if (parent == (u64)-1) {
454 count_mod = -1; 454 if (action == BTRFS_DROP_DELAYED_REF)
455 count_mod = -1;
456 else if (action == BTRFS_UPDATE_DELAYED_HEAD)
457 count_mod = 0;
458 }
455 459
456 /* 460 /*
457 * BTRFS_ADD_DELAYED_EXTENT means that we need to update 461 * BTRFS_ADD_DELAYED_EXTENT means that we need to update
@@ -647,7 +651,7 @@ int btrfs_update_delayed_ref(struct btrfs_trans_handle *trans,
647 */ 651 */
648 ret = __btrfs_add_delayed_ref(trans, &head_ref->node, bytenr, num_bytes, 652 ret = __btrfs_add_delayed_ref(trans, &head_ref->node, bytenr, num_bytes,
649 (u64)-1, 0, 0, 0, 653 (u64)-1, 0, 0, 0,
650 BTRFS_ADD_DELAYED_REF, 0); 654 BTRFS_UPDATE_DELAYED_HEAD, 0);
651 BUG_ON(ret); 655 BUG_ON(ret);
652 656
653 ret = __btrfs_add_delayed_ref(trans, &ref->node, bytenr, num_bytes, 657 ret = __btrfs_add_delayed_ref(trans, &ref->node, bytenr, num_bytes,
diff --git a/fs/btrfs/delayed-ref.h b/fs/btrfs/delayed-ref.h
index 57153fcc347b..3bec2ff0b15c 100644
--- a/fs/btrfs/delayed-ref.h
+++ b/fs/btrfs/delayed-ref.h
@@ -22,6 +22,7 @@
22#define BTRFS_ADD_DELAYED_REF 1 /* add one backref to the tree */ 22#define BTRFS_ADD_DELAYED_REF 1 /* add one backref to the tree */
23#define BTRFS_DROP_DELAYED_REF 2 /* delete one backref from the tree */ 23#define BTRFS_DROP_DELAYED_REF 2 /* delete one backref from the tree */
24#define BTRFS_ADD_DELAYED_EXTENT 3 /* record a full extent allocation */ 24#define BTRFS_ADD_DELAYED_EXTENT 3 /* record a full extent allocation */
25#define BTRFS_UPDATE_DELAYED_HEAD 4 /* not changing ref count on head ref */
25 26
26struct btrfs_delayed_ref_node { 27struct btrfs_delayed_ref_node {
27 struct rb_node rb_node; 28 struct rb_node rb_node;