diff mbox

rbd: ignore zero-overlap parent

Message ID 518E8203.6050308@inktank.com (mailing list archive)
State New, archived
Headers show

Commit Message

Alex Elder May 11, 2013, 5:38 p.m. UTC
An rbd clone image that has an overlap with its parent of 0 is
effectively not a layered image at all.  Detect this case and treat
such an image as non-layered.  Issue a warning to be sure the user
knows what's going on.

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

Signed-off-by: Alex Elder <elder@inktank.com>
---
 drivers/block/rbd.c |   10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

 out_err:

Comments

Josh Durgin May 11, 2013, 7:29 p.m. UTC | #1
Reviewed-by: Josh Durgin <josh.durgin@inktank.com>

On 05/11/2013 10:38 AM, Alex Elder wrote:
> An rbd clone image that has an overlap with its parent of 0 is
> effectively not a layered image at all.  Detect this case and treat
> such an image as non-layered.  Issue a warning to be sure the user
> knows what's going on.
>
> This resolves:
>      http://tracker.ceph.com/issues/5028
>
> Signed-off-by: Alex Elder <elder@inktank.com>
> ---
>   drivers/block/rbd.c |   10 +++++++---
>   1 file changed, 7 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
> index b9221a0..3a8135f 100644
> --- a/drivers/block/rbd.c
> +++ b/drivers/block/rbd.c
> @@ -3655,9 +3655,13 @@ static int rbd_dev_v2_parent_info(struct
> rbd_device *rbd_dev)
>   	ceph_decode_64_safe(&p, end, parent_spec->snap_id, out_err);
>   	ceph_decode_64_safe(&p, end, overlap, out_err);
>
> -	rbd_dev->parent_overlap = overlap;
> -	rbd_dev->parent_spec = parent_spec;
> -	parent_spec = NULL;	/* rbd_dev now owns this */
> +	if (overlap) {
> +		rbd_dev->parent_spec = parent_spec;
> +		parent_spec = NULL;	/* rbd_dev now owns this */
> +		rbd_dev->parent_overlap = overlap;
> +	} else {
> +		rbd_warn(rbd_dev, "ignoring parent of clone with overlap 0\n");
> +	}
>   out:
>   	ret = 0;
>   out_err:
>

--
To unsubscribe from this list: send the line "unsubscribe ceph-devel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
index b9221a0..3a8135f 100644
--- a/drivers/block/rbd.c
+++ b/drivers/block/rbd.c
@@ -3655,9 +3655,13 @@  static int rbd_dev_v2_parent_info(struct
rbd_device *rbd_dev)
 	ceph_decode_64_safe(&p, end, parent_spec->snap_id, out_err);
 	ceph_decode_64_safe(&p, end, overlap, out_err);

-	rbd_dev->parent_overlap = overlap;
-	rbd_dev->parent_spec = parent_spec;
-	parent_spec = NULL;	/* rbd_dev now owns this */
+	if (overlap) {
+		rbd_dev->parent_spec = parent_spec;
+		parent_spec = NULL;	/* rbd_dev now owns this */
+		rbd_dev->parent_overlap = overlap;
+	} else {
+		rbd_warn(rbd_dev, "ignoring parent of clone with overlap 0\n");
+	}
 out:
 	ret = 0;