On Thu, Mar 10, 2016 at 11:09 AM, Alex Lyakas <alex.bols...@gmail.com> wrote: > Signed-off-by: Alex Lyakas <a...@zadarastorage.com> Reviewed-by: Filipe Manana <fdman...@suse.com>
> --- > fs/btrfs/disk-io.c | 13 +++++-------- > 1 file changed, 5 insertions(+), 8 deletions(-) > > diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c > index 4545e2e..4420ab2 100644 > --- a/fs/btrfs/disk-io.c > +++ b/fs/btrfs/disk-io.c > @@ -296,52 +296,52 @@ static int csum_tree_block(struct btrfs_fs_info > *fs_info, > unsigned long map_len; > int err; > u32 crc = ~(u32)0; > unsigned long inline_result; > > len = buf->len - offset; > while (len > 0) { > err = map_private_extent_buffer(buf, offset, 32, > &kaddr, &map_start, &map_len); > if (err) > - return 1; > + return err; > cur_len = min(len, map_len - (offset - map_start)); > crc = btrfs_csum_data(kaddr + offset - map_start, > crc, cur_len); > len -= cur_len; > offset += cur_len; > } > if (csum_size > sizeof(inline_result)) { > result = kzalloc(csum_size, GFP_NOFS); > if (!result) > - return 1; > + return -ENOMEM; > } else { > result = (char *)&inline_result; > } > > btrfs_csum_final(crc, result); > > if (verify) { > if (memcmp_extent_buffer(buf, result, 0, csum_size)) { > u32 val; > u32 found = 0; > memcpy(&found, result, csum_size); > > read_extent_buffer(buf, &val, 0, csum_size); > btrfs_warn_rl(fs_info, > "%s checksum verify failed on %llu wanted %X > found %X " > "level %d", > fs_info->sb->s_id, buf->start, > val, found, btrfs_header_level(buf)); > if (result != (char *)&inline_result) > kfree(result); > - return 1; > + return -EUCLEAN; > } > } else { > write_extent_buffer(buf, result, 0, csum_size); > } > if (result != (char *)&inline_result) > kfree(result); > return 0; > } > > /* > @@ -509,22 +509,21 @@ static int csum_dirty_buffer(struct btrfs_fs_info > *fs_info, struct page *page) > u64 start = page_offset(page); > u64 found_start; > struct extent_buffer *eb; > > eb = (struct extent_buffer *)page->private; > if (page != eb->pages[0]) > return 0; > found_start = btrfs_header_bytenr(eb); > if (WARN_ON(found_start != start || !PageUptodate(page))) > return 0; > - csum_tree_block(fs_info, eb, 0); > - return 0; > + return csum_tree_block(fs_info, eb, 0); > } > > static int check_tree_block_fsid(struct btrfs_fs_info *fs_info, > struct extent_buffer *eb) > { > struct btrfs_fs_devices *fs_devices = fs_info->fs_devices; > u8 fsid[BTRFS_UUID_SIZE]; > int ret = 1; > > read_extent_buffer(eb, fsid, btrfs_header_fsid(), BTRFS_FSID_SIZE); > @@ -653,24 +652,22 @@ static int btree_readpage_end_io_hook(struct > btrfs_io_bio *io_bio, > btrfs_err(root->fs_info, "bad tree block level %d", > (int)btrfs_header_level(eb)); > ret = -EIO; > goto err; > } > > btrfs_set_buffer_lockdep_class(btrfs_header_owner(eb), > eb, found_level); > > ret = csum_tree_block(root->fs_info, eb, 1); > - if (ret) { > - ret = -EIO; > + if (ret) > goto err; > - } > > /* > * If this is a leaf block and it is corrupt, set the corrupt bit so > * that we don't try and read the other copies of this block, just > * return -EIO. > */ > if (found_level == 0 && check_leaf(root, eb)) { > set_bit(EXTENT_BUFFER_CORRUPT, &eb->bflags); > ret = -EIO; > } > -- > 1.9.1 > -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html