From: Liu Bo Date: Tue, 19 Dec 2017 22:42:54 +0000 (-0700) Subject: Btrfs: fix incorrect block_len in merge_extent_mapping X-Git-Tag: v4.1.12-124.31.3~1209 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=f1fd0969b3179879d3502dc6ee8e9f7d07eca332;p=users%2Fjedix%2Flinux-maple.git Btrfs: fix incorrect block_len in merge_extent_mapping Orabug: 27446668 %block_len could be checked on deciding if two em are mergable. 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, while 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 Reviewed-by: Anand Jain --- diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index 77f73795ed42..27831a4aa8cb 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -6667,7 +6667,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); }