Re: [PATCH] rbd: restore zeroing past the overlap when reading from parent

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Aug 27, 2019 at 2:54 PM Ilya Dryomov <idryomov@xxxxxxxxx> wrote:
>
> The parent image is read only up to the overlap point, the rest of
> the buffer should be zeroed.  This snuck in because as it turns out
> the overlap test case has not been triggering this code path for
> a while now.
>
> Fixes: a9b67e69949d ("rbd: replace obj_req->tried_parent with obj_req->read_state")
> Signed-off-by: Ilya Dryomov <idryomov@xxxxxxxxx>
> ---
>  drivers/block/rbd.c | 11 +++++++++++
>  1 file changed, 11 insertions(+)
>
> diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
> index 58d9f17363d7..13f42f5b06cc 100644
> --- a/drivers/block/rbd.c
> +++ b/drivers/block/rbd.c
> @@ -3038,6 +3038,17 @@ static bool rbd_obj_advance_read(struct rbd_obj_request *obj_req, int *result)
>                 }
>                 return true;
>         case RBD_OBJ_READ_PARENT:
> +               /*
> +                * The parent image is read only up to the overlap -- zero-fill
> +                * from the overlap to the end of the request.
> +                */
> +               if (!*result) {
> +                       u32 obj_overlap = rbd_obj_img_extents_bytes(obj_req);
> +
> +                       if (obj_overlap < obj_req->ex.oe_len)
> +                               rbd_obj_zero_range(obj_req, obj_overlap,
> +                                           obj_req->ex.oe_len - obj_overlap);
> +               }
>                 return true;
>         default:
>                 BUG();
> --
> 2.19.2
>

Reviewed-by: Jason Dillaman <dillaman@xxxxxxxxxx>


--
Jason



[Index of Archives]     [CEPH Users]     [Ceph Large]     [Ceph Dev]     [Information on CEPH]     [Linux BTRFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux