mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-08 14:13:53 +00:00
btrfs: fix lost error return value when reading a data page
At btrfs_do_readpage(), if we get an error when trying to lookup for an extent map, we end up marking the page with the error bit, clearing the uptodate bit on it, and doing everything else that should be done. However we return success (0) to the caller, when we should return the error encoded in the extent map pointer. So fix that by returning the error encoded in the pointer. Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com> Signed-off-by: Filipe Manana <fdmanana@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
c03475506e
commit
bbf0ea7ea3
@ -3611,6 +3611,7 @@ int btrfs_do_readpage(struct page *page, struct extent_map **em_cached,
|
||||
if (IS_ERR(em)) {
|
||||
unlock_extent(tree, cur, end);
|
||||
end_page_read(page, false, cur, end + 1 - cur);
|
||||
ret = PTR_ERR(em);
|
||||
break;
|
||||
}
|
||||
extent_offset = cur - em->start;
|
||||
|
@ -8118,8 +8118,13 @@ int btrfs_readpage(struct file *file, struct page *page)
|
||||
btrfs_lock_and_flush_ordered_range(inode, start, end, NULL);
|
||||
|
||||
ret = btrfs_do_readpage(page, NULL, &bio_ctrl, 0, NULL);
|
||||
if (bio_ctrl.bio)
|
||||
ret = submit_one_bio(bio_ctrl.bio, 0, bio_ctrl.bio_flags);
|
||||
if (bio_ctrl.bio) {
|
||||
int ret2;
|
||||
|
||||
ret2 = submit_one_bio(bio_ctrl.bio, 0, bio_ctrl.bio_flags);
|
||||
if (ret == 0)
|
||||
ret = ret2;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user