rbd: fix image request leak on parent read
authorAlex Elder <elder@inktank.com>
Thu, 2 May 2013 02:37:07 +0000 (21:37 -0500)
committerAlex Elder <elder@inktank.com>
Thu, 2 May 2013 17:15:28 +0000 (12:15 -0500)
When a read for a layered image object finds the target object
doesn't exist, a read image request for the parent image is created
and submitted.  When that completes, the callback routine was
not releasing that parent image request.  Fix that.

The slab allocation stuff just added has greatly simplified the
search for the source of this memory leak.

This resolves:
    http://tracker.ceph.com/issues/4803

Signed-off-by: Alex Elder <elder@inktank.com>
Reviewed-by: Josh Durgin <josh.durgin@inktank.com>
drivers/block/rbd.c

index 390946a078be1ff9454b342e1e036403120367be..c2ca1818f33583679ac3d96f8bbaa4f33949640a 100644 (file)
@@ -2547,6 +2547,7 @@ static void rbd_img_parent_read_callback(struct rbd_img_request *img_request)
                obj_request->xferred = img_request->xferred;
        }
 out:
+       rbd_img_request_put(img_request);
        rbd_img_obj_request_read_callback(obj_request);
        rbd_obj_request_complete(obj_request);
 }