|
|
@@ -1281,7 +1281,8 @@ static noinline int run_delalloc_nocow(struct inode *inode,
|
|
|
nocow = 1;
|
|
|
} else if (extent_type == BTRFS_FILE_EXTENT_INLINE) {
|
|
|
extent_end = found_key.offset +
|
|
|
- btrfs_file_extent_inline_len(leaf, fi);
|
|
|
+ btrfs_file_extent_inline_len(leaf,
|
|
|
+ path->slots[0], fi);
|
|
|
extent_end = ALIGN(extent_end, root->sectorsize);
|
|
|
} else {
|
|
|
BUG_ON(1);
|
|
|
@@ -4023,7 +4024,7 @@ int btrfs_truncate_inode_items(struct btrfs_trans_handle *trans,
|
|
|
btrfs_file_extent_num_bytes(leaf, fi);
|
|
|
} else if (extent_type == BTRFS_FILE_EXTENT_INLINE) {
|
|
|
item_end += btrfs_file_extent_inline_len(leaf,
|
|
|
- fi);
|
|
|
+ path->slots[0], fi);
|
|
|
}
|
|
|
item_end--;
|
|
|
}
|
|
|
@@ -4093,6 +4094,12 @@ int btrfs_truncate_inode_items(struct btrfs_trans_handle *trans,
|
|
|
inode_sub_bytes(inode, item_end + 1 -
|
|
|
new_size);
|
|
|
}
|
|
|
+
|
|
|
+ /*
|
|
|
+ * update the ram bytes to properly reflect
|
|
|
+ * the new size of our item
|
|
|
+ */
|
|
|
+ btrfs_set_file_extent_ram_bytes(leaf, fi, size);
|
|
|
size =
|
|
|
btrfs_file_extent_calc_inline_size(size);
|
|
|
btrfs_truncate_item(root, path, size, 1);
|
|
|
@@ -6162,7 +6169,7 @@ struct extent_map *btrfs_get_extent(struct inode *inode, struct page *page,
|
|
|
btrfs_file_extent_num_bytes(leaf, item);
|
|
|
} else if (found_type == BTRFS_FILE_EXTENT_INLINE) {
|
|
|
size_t size;
|
|
|
- size = btrfs_file_extent_inline_len(leaf, item);
|
|
|
+ size = btrfs_file_extent_inline_len(leaf, path->slots[0], item);
|
|
|
extent_end = ALIGN(extent_start + size, root->sectorsize);
|
|
|
}
|
|
|
next:
|
|
|
@@ -6231,7 +6238,7 @@ struct extent_map *btrfs_get_extent(struct inode *inode, struct page *page,
|
|
|
goto out;
|
|
|
}
|
|
|
|
|
|
- size = btrfs_file_extent_inline_len(leaf, item);
|
|
|
+ size = btrfs_file_extent_inline_len(leaf, path->slots[0], item);
|
|
|
extent_offset = page_offset(page) + pg_offset - extent_start;
|
|
|
copy_size = min_t(u64, PAGE_CACHE_SIZE - pg_offset,
|
|
|
size - extent_offset);
|