All of lore.kernel.org
 help / color / mirror / Atom feed
From: Alex Elder <alex.elder@linaro.org>
To: Josh Durgin <josh.durgin@inktank.com>
Cc: ceph-devel@vger.kernel.org
Subject: Re: [PATCH v3 5/5] rbd: fix error handling from rbd_snap_name()
Date: Mon, 09 Sep 2013 08:49:07 -0500	[thread overview]
Message-ID: <522DD1D3.2040805@linaro.org> (raw)
In-Reply-To: <1378711022-20158-6-git-send-email-josh.durgin@inktank.com>

On 09/09/2013 02:17 AM, Josh Durgin wrote:
> rbd_snap_name() calls rbd_dev_v{1,2}_snap_name() depending on the
> format of the image. The format 1 version returns NULL on error, which
> is handled by the caller. The format 2 version returns an ERR_PTR,
> which the caller of rbd_snap_name() does not expect.
> 
> Fortunately this is unlikely to occur in practice because
> rbd_snap_id_by_name() is called before rbd_snap_name(). This would hit
> similar errors to rbd_snap_name() (like the snapshot not existing) and
> return early, so rbd_snap_name() would not hit an error unless the
> snapshot was removed between the two calls or memory was exhausted.
> 
> Use an ERR_PTR in rbd_dev_v1_snap_name() so that the specific error
> can be propagated, and it is consistent with rbd_dev_v2_snap_name().
> Handle the ERR_PTR in the only rbd_snap_name() caller.

Looks good.

Reviewed-by: Alex Elder <elder@linaro.org>

> Suggested-by: Alex Elder <alex.elder@linaro.org>
> Signed-off-by: Josh Durgin <josh.durgin@inktank.com>
> ---
>  drivers/block/rbd.c |   10 ++++++----
>  1 files changed, 6 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
> index 226fa04..16384b7 100644
> --- a/drivers/block/rbd.c
> +++ b/drivers/block/rbd.c
> @@ -927,12 +927,14 @@ static const char *rbd_dev_v1_snap_name(struct rbd_device *rbd_dev,
>  					u64 snap_id)
>  {
>  	u32 which;
> +	const char *snap_name;
>  
>  	which = rbd_dev_snap_index(rbd_dev, snap_id);
>  	if (which == BAD_SNAP_INDEX)
> -		return NULL;
> +		return ERR_PTR(-ENOENT);
>  
> -	return _rbd_dev_v1_snap_name(rbd_dev, which);
> +	snap_name = _rbd_dev_v1_snap_name(rbd_dev, which);
> +	return snap_name ? snap_name : ERR_PTR(-ENOMEM);
>  }
>  
>  static const char *rbd_snap_name(struct rbd_device *rbd_dev, u64 snap_id)
> @@ -4163,8 +4165,8 @@ static int rbd_dev_spec_update(struct rbd_device *rbd_dev)
>  	/* Look up the snapshot name, and make a copy */
>  
>  	snap_name = rbd_snap_name(rbd_dev, spec->snap_id);
> -	if (!snap_name) {
> -		ret = -ENOMEM;
> +	if (IS_ERR(snap_name)) {
> +		ret = PTR_ERR(snap_name);
>  		goto out_err;
>  	}
>  
> 


  reply	other threads:[~2013-09-09 13:49 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-09-09  7:16 [PATCH v3 0/5] fix shutdown races and snapshot error handling Josh Durgin
2013-09-09  7:16 ` [PATCH v3 1/5] rbd: complete notifies before cleaning up osd_client and rbd_dev Josh Durgin
2013-09-09  7:16 ` [PATCH v3 2/5] rbd: make rbd_obj_notify_ack() synchronous Josh Durgin
2013-09-09 12:06   ` Alex Elder
2013-09-09  7:17 ` [PATCH v3 3/5] rbd: fix use-after free of rbd_dev->disk Josh Durgin
2013-09-09 13:37   ` Alex Elder
2013-09-09 16:15     ` Josh Durgin
2013-09-09 16:43       ` Alex Elder
2013-09-09  7:17 ` [PATCH v3 4/5] rbd: ignore unmapped snapshots that no longer exist Josh Durgin
2013-09-09 13:47   ` Alex Elder
2013-09-09  7:17 ` [PATCH v3 5/5] rbd: fix error handling from rbd_snap_name() Josh Durgin
2013-09-09 13:49   ` Alex Elder [this message]
2013-09-09 13:50 ` [PATCH v3 0/5] fix shutdown races and snapshot error handling Alex Elder

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=522DD1D3.2040805@linaro.org \
    --to=alex.elder@linaro.org \
    --cc=ceph-devel@vger.kernel.org \
    --cc=josh.durgin@inktank.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.