diff options
-rw-r--r-- | fs/btrfs/delayed-ref.c | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/fs/btrfs/delayed-ref.c b/fs/btrfs/delayed-ref.c index b7a0641ead77..116abec7a29c 100644 --- a/fs/btrfs/delayed-ref.c +++ b/fs/btrfs/delayed-ref.c | |||
@@ -40,16 +40,19 @@ struct kmem_cache *btrfs_delayed_extent_op_cachep; | |||
40 | * compare two delayed tree backrefs with same bytenr and type | 40 | * compare two delayed tree backrefs with same bytenr and type |
41 | */ | 41 | */ |
42 | static int comp_tree_refs(struct btrfs_delayed_tree_ref *ref2, | 42 | static int comp_tree_refs(struct btrfs_delayed_tree_ref *ref2, |
43 | struct btrfs_delayed_tree_ref *ref1) | 43 | struct btrfs_delayed_tree_ref *ref1, int type) |
44 | { | 44 | { |
45 | if (ref1->root < ref2->root) | 45 | if (type == BTRFS_TREE_BLOCK_REF_KEY) { |
46 | return -1; | 46 | if (ref1->root < ref2->root) |
47 | if (ref1->root > ref2->root) | 47 | return -1; |
48 | return 1; | 48 | if (ref1->root > ref2->root) |
49 | if (ref1->parent < ref2->parent) | 49 | return 1; |
50 | return -1; | 50 | } else { |
51 | if (ref1->parent > ref2->parent) | 51 | if (ref1->parent < ref2->parent) |
52 | return 1; | 52 | return -1; |
53 | if (ref1->parent > ref2->parent) | ||
54 | return 1; | ||
55 | } | ||
53 | return 0; | 56 | return 0; |
54 | } | 57 | } |
55 | 58 | ||
@@ -113,7 +116,8 @@ static int comp_entry(struct btrfs_delayed_ref_node *ref2, | |||
113 | if (ref1->type == BTRFS_TREE_BLOCK_REF_KEY || | 116 | if (ref1->type == BTRFS_TREE_BLOCK_REF_KEY || |
114 | ref1->type == BTRFS_SHARED_BLOCK_REF_KEY) { | 117 | ref1->type == BTRFS_SHARED_BLOCK_REF_KEY) { |
115 | return comp_tree_refs(btrfs_delayed_node_to_tree_ref(ref2), | 118 | return comp_tree_refs(btrfs_delayed_node_to_tree_ref(ref2), |
116 | btrfs_delayed_node_to_tree_ref(ref1)); | 119 | btrfs_delayed_node_to_tree_ref(ref1), |
120 | ref1->type); | ||
117 | } else if (ref1->type == BTRFS_EXTENT_DATA_REF_KEY || | 121 | } else if (ref1->type == BTRFS_EXTENT_DATA_REF_KEY || |
118 | ref1->type == BTRFS_SHARED_DATA_REF_KEY) { | 122 | ref1->type == BTRFS_SHARED_DATA_REF_KEY) { |
119 | return comp_data_refs(btrfs_delayed_node_to_data_ref(ref2), | 123 | return comp_data_refs(btrfs_delayed_node_to_data_ref(ref2), |