|
@@ -6146,14 +6146,14 @@ static int btrfs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
|
|
|
static int merge_extent_mapping(struct extent_map_tree *em_tree,
|
|
static int merge_extent_mapping(struct extent_map_tree *em_tree,
|
|
|
struct extent_map *existing,
|
|
struct extent_map *existing,
|
|
|
struct extent_map *em,
|
|
struct extent_map *em,
|
|
|
- u64 map_start, u64 map_len)
|
|
|
|
|
|
|
+ u64 map_start)
|
|
|
{
|
|
{
|
|
|
u64 start_diff;
|
|
u64 start_diff;
|
|
|
|
|
|
|
|
BUG_ON(map_start < em->start || map_start >= extent_map_end(em));
|
|
BUG_ON(map_start < em->start || map_start >= extent_map_end(em));
|
|
|
start_diff = map_start - em->start;
|
|
start_diff = map_start - em->start;
|
|
|
em->start = map_start;
|
|
em->start = map_start;
|
|
|
- em->len = map_len;
|
|
|
|
|
|
|
+ em->len = existing->start - em->start;
|
|
|
if (em->block_start < EXTENT_MAP_LAST_BYTE &&
|
|
if (em->block_start < EXTENT_MAP_LAST_BYTE &&
|
|
|
!test_bit(EXTENT_FLAG_COMPRESSED, &em->flags)) {
|
|
!test_bit(EXTENT_FLAG_COMPRESSED, &em->flags)) {
|
|
|
em->block_start += start_diff;
|
|
em->block_start += start_diff;
|
|
@@ -6441,8 +6441,7 @@ struct extent_map *btrfs_get_extent(struct inode *inode, struct page *page,
|
|
|
em->len);
|
|
em->len);
|
|
|
if (existing) {
|
|
if (existing) {
|
|
|
err = merge_extent_mapping(em_tree, existing,
|
|
err = merge_extent_mapping(em_tree, existing,
|
|
|
- em, start,
|
|
|
|
|
- root->sectorsize);
|
|
|
|
|
|
|
+ em, start);
|
|
|
free_extent_map(existing);
|
|
free_extent_map(existing);
|
|
|
if (err) {
|
|
if (err) {
|
|
|
free_extent_map(em);
|
|
free_extent_map(em);
|