| From 42dd037c08c7cd6e3e9af7824b0c1d063f838885 Mon Sep 17 00:00:00 2001 |
| From: Ilya Dryomov <ilya.dryomov@inktank.com> |
| Date: Tue, 4 Mar 2014 11:57:17 +0200 |
| Subject: rbd: fix error paths in rbd_img_request_fill() |
| |
| From: Ilya Dryomov <ilya.dryomov@inktank.com> |
| |
| commit 42dd037c08c7cd6e3e9af7824b0c1d063f838885 upstream. |
| |
| Doing rbd_obj_request_put() in rbd_img_request_fill() error paths is |
| not only insufficient, but also triggers an rbd_assert() in |
| rbd_obj_request_destroy(): |
| |
| Assertion failure in rbd_obj_request_destroy() at line 1867: |
| |
| rbd_assert(obj_request->img_request == NULL); |
| |
| rbd_img_obj_request_add() adds obj_requests to the img_request, the |
| opposite is rbd_img_obj_request_del(). Use it. |
| |
| Fixes: http://tracker.ceph.com/issues/7327 |
| |
| Signed-off-by: Ilya Dryomov <ilya.dryomov@inktank.com> |
| Reviewed-by: Alex Elder <elder@linaro.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/block/rbd.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/drivers/block/rbd.c |
| +++ b/drivers/block/rbd.c |
| @@ -2253,7 +2253,7 @@ out_partial: |
| rbd_obj_request_put(obj_request); |
| out_unwind: |
| for_each_obj_request_safe(img_request, obj_request, next_obj_request) |
| - rbd_obj_request_put(obj_request); |
| + rbd_img_obj_request_del(img_request, obj_request); |
| |
| return -ENOMEM; |
| } |