aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLiu Bo <[email protected]>2018-01-05 12:51:08 -0700
committerDavid Sterba <[email protected]>2018-01-22 16:08:21 +0100
commita520a7e0b548690ea8eb77bb45800459351a7cf5 (patch)
tree6f865743331bbeeba4babc96f23fe2229d17accc
parent3cbf26da5ec85f1d3177eee534e377c707ed89e1 (diff)
Btrfs: fix incorrect block_len in merge_extent_mapping
%block_len could be checked on deciding if two em are mergeable. merge_extent_mapping() has only added the front pad if the front part of em gets truncated, but it's possible that the end part gets truncated. For both compressed extent and inline extent, em->block_len is not adjusted accordingly, and for regular extent, em->block_len always equals to em->len, hence this sets em->block_len with em->len. Signed-off-by: Liu Bo <[email protected]> Reviewed-by: Josef Bacik <[email protected]> Signed-off-by: David Sterba <[email protected]>
-rw-r--r--fs/btrfs/inode.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index 633b83b709a1..f9fd8b14ef08 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -6874,7 +6874,7 @@ static int merge_extent_mapping(struct extent_map_tree *em_tree,
if (em->block_start < EXTENT_MAP_LAST_BYTE &&
!test_bit(EXTENT_FLAG_COMPRESSED, &em->flags)) {
em->block_start += start_diff;
- em->block_len -= start_diff;
+ em->block_len = em->len;
}
return add_extent_mapping(em_tree, em, 0);
}