rbd: fix an incorrect assertion condition
authorAlex Elder <elder@inktank.com>
Mon, 6 May 2013 22:40:32 +0000 (17:40 -0500)
committerAlex Elder <elder@inktank.com>
Thu, 9 May 2013 01:16:10 +0000 (20:16 -0500)
In rbd_img_obj_parent_read_full_callback() there is an assertion
intended to verify the size of the image request for a full parent
read was the size of the original request's target object.  But
assertion was looking at the parent image order rather than the
original one, and these values can differ.

Fix that.

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

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

index 0d874a54694978ad837c2bf717aa559f4a286fdb..15ac2a54d4f3a3100d5b1068bb433c0da7f4e361 100644 (file)
@@ -2186,13 +2186,13 @@ rbd_img_obj_parent_read_full_callback(struct rbd_img_request *img_request)
        result = img_request->result;
        obj_size = img_request->length;
        xferred = img_request->xferred;
+       rbd_img_request_put(img_request);
 
-       rbd_dev = img_request->rbd_dev;
+       rbd_assert(orig_request->img_request);
+       rbd_dev = orig_request->img_request->rbd_dev;
        rbd_assert(rbd_dev);
        rbd_assert(obj_size == (u64)1 << rbd_dev->header.obj_order);
 
-       rbd_img_request_put(img_request);
-
        if (result)
                goto out_err;