diff options
Diffstat (limited to 'fs/btrfs/inode.c')
-rw-r--r-- | fs/btrfs/inode.c | 15 |
1 files changed, 5 insertions, 10 deletions
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index 5f805bc944fa..24dfa27a4f76 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c | |||
@@ -6086,16 +6086,8 @@ static noinline int uncompress_inline(struct btrfs_path *path, | |||
6086 | max_size = min_t(unsigned long, PAGE_CACHE_SIZE, max_size); | 6086 | max_size = min_t(unsigned long, PAGE_CACHE_SIZE, max_size); |
6087 | ret = btrfs_decompress(compress_type, tmp, page, | 6087 | ret = btrfs_decompress(compress_type, tmp, page, |
6088 | extent_offset, inline_size, max_size); | 6088 | extent_offset, inline_size, max_size); |
6089 | if (ret) { | ||
6090 | char *kaddr = kmap_atomic(page); | ||
6091 | unsigned long copy_size = min_t(u64, | ||
6092 | PAGE_CACHE_SIZE - pg_offset, | ||
6093 | max_size - extent_offset); | ||
6094 | memset(kaddr + pg_offset, 0, copy_size); | ||
6095 | kunmap_atomic(kaddr); | ||
6096 | } | ||
6097 | kfree(tmp); | 6089 | kfree(tmp); |
6098 | return 0; | 6090 | return ret; |
6099 | } | 6091 | } |
6100 | 6092 | ||
6101 | /* | 6093 | /* |
@@ -6296,7 +6288,10 @@ next: | |||
6296 | ret = uncompress_inline(path, inode, page, | 6288 | ret = uncompress_inline(path, inode, page, |
6297 | pg_offset, | 6289 | pg_offset, |
6298 | extent_offset, item); | 6290 | extent_offset, item); |
6299 | BUG_ON(ret); /* -ENOMEM */ | 6291 | if (ret) { |
6292 | err = ret; | ||
6293 | goto out; | ||
6294 | } | ||
6300 | } else { | 6295 | } else { |
6301 | map = kmap(page); | 6296 | map = kmap(page); |
6302 | read_extent_buffer(leaf, map + pg_offset, ptr, | 6297 | read_extent_buffer(leaf, map + pg_offset, ptr, |