diff options
author | Tom Rini <trini@konsulko.com> | 2021-04-27 08:24:10 -0400 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2021-04-27 08:24:10 -0400 |
commit | 27af387e4fa7c04d27a92d5d374d81f2a8fa3cce (patch) | |
tree | 091c1c0638bb2ba4ea93f8e06ea7c3a52557fe73 /fs/btrfs/inode.c | |
parent | 3b589d70cdd0147fb5b5c865a31d63b8f0cd685d (diff) | |
parent | 67e69660781dac57f4a2347e4ae30d97698f245b (diff) |
Merge branch '2021-04-27-assorted-fixes'
- An assortment of bug fixes
Diffstat (limited to 'fs/btrfs/inode.c')
-rw-r--r-- | fs/btrfs/inode.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index 019d532a1a..2c2379303d 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -390,10 +390,16 @@ int btrfs_read_extent_inline(struct btrfs_path *path, csize); ret = btrfs_decompress(btrfs_file_extent_compression(leaf, fi), cbuf, csize, dbuf, dsize); - if (ret < 0 || ret != dsize) { + if (ret == (u32)-1) { ret = -EIO; goto out; } + /* + * The compressed part ends before sector boundary, the remaining needs + * to be zeroed out. + */ + if (ret < dsize) + memset(dbuf + ret, 0, dsize - ret); memcpy(dest, dbuf, dsize); ret = dsize; out: @@ -494,10 +500,16 @@ int btrfs_read_extent_reg(struct btrfs_path *path, ret = btrfs_decompress(btrfs_file_extent_compression(leaf, fi), cbuf, csize, dbuf, dsize); - if (ret != dsize) { + if (ret == (u32)-1) { ret = -EIO; goto out; } + /* + * The compressed part ends before sector boundary, the remaining needs + * to be zeroed out. + */ + if (ret < dsize) + memset(dbuf + ret, 0, dsize - ret); /* Then copy the needed part */ memcpy(dest, dbuf + btrfs_file_extent_offset(leaf, fi), len); ret = len; |