rbd: move bumping img_request refcount into rbd_obj_request_submit()
authorIlya Dryomov <idryomov@gmail.com>
Tue, 13 Sep 2016 19:08:10 +0000 (21:08 +0200)
committerIlya Dryomov <idryomov@gmail.com>
Mon, 3 Oct 2016 14:13:47 +0000 (16:13 +0200)
commit4a17dadcae55ca1f5c1ed826d42185e22653c256
tree06b25176db3e0a4675dfa5c94f5d63a310515008
parentc2e82414884718ad6ec33a7528606cb07cf55cb4
rbd: move bumping img_request refcount into rbd_obj_request_submit()

Commit 0f2d5be792b0 ("rbd: use reference counts for image requests")
added rbd_img_request_get(), which rbd_img_request_fill() calls for
each obj_request added to img_request.  It was an urgent band-aid for
the uglyness that is rbd_img_obj_callback() and none of the error paths
were updated.

Given that this img_request reference is meant to represent an
obj_request that hasn't passed through rbd_img_obj_callback() yet,
proper cleanup in appropriate destructors is a challenge.  However,
noting that if we don't get a chance to call rbd_obj_request_complete(),
there is not going to be a call to rbd_img_obj_callback(), we can move
rbd_img_request_get() into rbd_obj_request_submit() and fixup the two
places that call rbd_obj_request_complete() directly and not through
rbd_obj_request_submit() to temporarily bump img_request, so that
rbd_img_obj_callback() can put as usual.

This takes care of img_request leaks on errors on the submit side.

Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
Reviewed-by: Alex Elder <elder@linaro.org>
drivers/block/rbd.c