• Alex Elder's avatar
    rbd: don't zero-fill non-image object requests · 6e2a4505
    Alex Elder authored
    A result of ENOENT from a read request for an object that's part of
    an rbd image indicates that there is a hole in that portion of the
    image.  Similarly, a short read for such an object indicates that
    the remainder of the read should be interpreted a full read with
    zeros filling out the end of the request.
    
    This behavior is not correct for objects that are not backing rbd
    image data.  Currently rbd_img_obj_request_callback() assumes it
    should be done for all objects.
    
    Change rbd_img_obj_request_callback() so it only does this zeroing
    for image objects.  Encapsulate that special handling in its own
    function.  Add an assertion that the image object request is a bio
    request, since we assume that (and we currently don't support any
    other types).
    
    This resolves a problem identified here:
        http://tracker.ceph.com/issues/4559
    
    The regression was introduced by bf0d5f50.
    Reported-by: default avatarDan van der Ster <dan@vanderster.com>
    Signed-off-by: default avatarAlex Elder <elder@inktank.com>
    Reviewed-off-by: default avatarSage Weil <sage@inktank.com>
    6e2a4505
rbd.c 106 KB