mirror of
https://github.com/torvalds/linux.git
synced 2024-11-12 23:23:03 +00:00
rbd: don't crash or leak on errors in rbd_img_obj_parent_read_full_callback()
- fix parent_length == img_request->xferred assert to not fire on copyup read failures - don't leak pages if copyup read fails or we can't allocate a new osd request Signed-off-by: Ilya Dryomov <idryomov@gmail.com> Reviewed-by: Alex Elder <elder@linaro.org> Reviewed-by: David Disseldorp <ddiss@suse.de>
This commit is contained in:
parent
4a17dadcae
commit
fa355112c2
@ -2674,7 +2674,7 @@ rbd_img_obj_parent_read_full_callback(struct rbd_img_request *img_request)
|
||||
rbd_assert(obj_request_type_valid(orig_request->type));
|
||||
img_result = img_request->result;
|
||||
parent_length = img_request->length;
|
||||
rbd_assert(parent_length == img_request->xferred);
|
||||
rbd_assert(img_result || parent_length == img_request->xferred);
|
||||
rbd_img_request_put(img_request);
|
||||
|
||||
rbd_assert(orig_request->img_request);
|
||||
@ -2727,6 +2727,7 @@ rbd_img_obj_parent_read_full_callback(struct rbd_img_request *img_request)
|
||||
return;
|
||||
|
||||
out_err:
|
||||
ceph_release_page_vector(pages, page_count);
|
||||
orig_request->result = img_result;
|
||||
orig_request->xferred = 0;
|
||||
rbd_img_request_get(orig_request->img_request);
|
||||
|
Loading…
Reference in New Issue
Block a user