diff options
Diffstat (limited to 'fs')
-rw-r--r-- | fs/btrfs/delayed-ref.c | 10 | ||||
-rw-r--r-- | fs/btrfs/delayed-ref.h | 1 |
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 | ||
26 | struct btrfs_delayed_ref_node { | 27 | struct btrfs_delayed_ref_node { |
27 | struct rb_node rb_node; | 28 | struct rb_node rb_node; |