Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 50b78c24 authored by Chris Mason's avatar Chris Mason
Browse files

btrfs_get_extent should treat inline extents as though they hold a whole block

parent b3cfa35a
Loading
Loading
Loading
Loading
+7 −5
Original line number Diff line number Diff line
@@ -1505,13 +1505,13 @@ struct extent_map *btrfs_get_extent(struct inode *inode, struct page *page,

		size = btrfs_file_extent_inline_len(leaf->items +
						    path->slots[0]);
		extent_end = extent_start + size;
		extent_end = extent_start | ((u64)root->blocksize - 1);
		if (start < extent_start || start >= extent_end) {
			em->start = start;
			if (start < extent_start) {
				if (end < extent_start)
					goto not_found;
				em->end = extent_end - 1;
				em->end = extent_end;
			} else {
				em->end = end;
			}
@@ -1520,17 +1520,19 @@ struct extent_map *btrfs_get_extent(struct inode *inode, struct page *page,
		em->block_start = EXTENT_MAP_INLINE;
		em->block_end = EXTENT_MAP_INLINE;
		em->start = extent_start;
		em->end = extent_end - 1;
		em->end = extent_end;
		if (!page) {
			goto insert;
		}
		ptr = btrfs_file_extent_inline_start(item);
		map = kmap(page);
		memcpy(map + page_offset, ptr, size);
		flush_dcache_page(result->b_page);
		memset(map + page_offset + size, 0,
		       root->blocksize - (page_offset + size));
		flush_dcache_page(page);
		kunmap(page);
		set_extent_uptodate(em_tree, extent_start,
				    extent_end - 1, GFP_NOFS);
				    extent_end, GFP_NOFS);
		goto insert;
	} else {
		printk("unkknown found_type %d\n", found_type);