From: Alex Elder <elder@inktank.com>
To: ceph-devel <ceph-devel@vger.kernel.org>
Subject: Re: [PATCH 5/6] rbd: get additional info in parent spec
Date: Wed, 31 Oct 2012 09:11:47 -0500 [thread overview]
Message-ID: <509131A3.5090902@inktank.com> (raw)
In-Reply-To: <509083C4.409@inktank.com>
On 10/30/2012 08:49 PM, Alex Elder wrote:
> When a layered rbd image has a parent, that parent is identified
> only by its pool id, image id, and snapshot id. Images that have
> been mapped also record *names* for those three id's.
>
> Add code to look up these names for parent images so they match
> mapped images more closely. Skip doing this for an image if it
> already has its pool name defined (this will be the case for images
> mapped by the user).
>
> It is possible that an the name of a parent image can't be
> determined, even if the image id is valid. If this occurs it
> does not preclude correct operation, so don't treat this as
> an error.
>
> On the other hand, defined pools will always have both an id and a
> name. And any snapshot of an image identified as a parent for a
> clone image will exist, and will have a name (if not it indicates
> some other internal error). So treat failure to get these bits
> of information as errors.
>
> Signed-off-by: Alex Elder <elder@inktank.com>
> ---
> drivers/block/rbd.c | 131
> +++++++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 131 insertions(+)
>
> diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
> index bce1fcf..04062c1 100644
> --- a/drivers/block/rbd.c
> +++ b/drivers/block/rbd.c
. . .
> @@ -2514,6 +2532,115 @@ out_err:
> return ret;
> }
>
> +static char *rbd_dev_image_name(struct rbd_device *rbd_dev)
> +{
> + size_t image_id_size;
> + char *image_id;
> + void *p;
> + void *end;
> + size_t size;
> + void *reply_buf = NULL;
> + size_t len = 0;
> + char *image_name = NULL;
> + int ret;
> +
> + rbd_assert(!rbd_dev->spec->image_name);
> +
> + image_id_size = sizeof (__le32) + rbd_dev->spec->image_id_len;
> + image_id = kmalloc(image_id_size, GFP_KERNEL);
> + if (!image_id)
> + return NULL;
> +
> + p = image_id;
> + end = (char *) image_id + image_id_size;
> + ceph_encode_string(&p, end, rbd_dev->spec->image_id,
> + (u32) rbd_dev->spec->image_id_len);
> +
> + size = sizeof (__le32) + RBD_IMAGE_NAME_LEN_MAX;
> + reply_buf = kmalloc(size, GFP_KERNEL);
> + if (!reply_buf)
> + goto out;
> +
> + ret = rbd_req_sync_exec(rbd_dev, RBD_DIRECTORY,
> + "rbd", "dir_get_name",
> + image_id, image_id_size,
> + (char *) reply_buf, size,
> + CEPH_OSD_FLAG_READ, NULL);
> + if (ret < 0)
> + goto out;
> + p = reply_buf;
> + end = (char *) reply_buf + size;
> + image_name = ceph_extract_encoded_string(&p, end, &len, GFP_KERNEL);
The next line will need to be changed to:
if (IS_ERR(image_name))
image_name = NULL;
else
> + if (image_name)
> + dout("%s: name is %s len is %zd\n", __func__, image_name, len);
> +out:
> + kfree(reply_buf);
> + kfree(image_id);
> +
> + return image_name;
> +}
> +
. . .
next prev parent reply other threads:[~2012-10-31 14:11 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-10-31 1:41 [PATCH 0/6] rbd: version 2 parent probing Alex Elder
2012-10-31 1:49 ` [PATCH 1/6] rbd: skip getting image id if known Alex Elder
2012-10-31 21:05 ` Josh Durgin
2012-10-31 1:49 ` [PATCH 2/6] rbd: allow null image name Alex Elder
2012-10-31 21:07 ` Josh Durgin
2012-10-31 1:49 ` [PATCH 3/6] rbd: get parent spec for version 2 images Alex Elder
2012-11-01 1:33 ` Josh Durgin
2012-10-31 1:49 ` [PATCH 4/6] libceph: define ceph_pg_pool_name_by_id() Alex Elder
2012-11-01 1:34 ` Josh Durgin
2012-10-31 1:49 ` [PATCH 5/6] rbd: get additional info in parent spec Alex Elder
2012-10-31 14:11 ` Alex Elder [this message]
2012-11-01 1:49 ` Josh Durgin
2012-11-01 12:18 ` Alex Elder
2012-10-31 1:50 ` [PATCH 6/6] rbd: probe the parent of an image if present Alex Elder
2012-10-31 11:59 ` slow fio random read benchmark, need help Alexandre DERUMIER
2012-10-31 15:57 ` Sage Weil
2012-10-31 16:29 ` Alexandre DERUMIER
2012-10-31 16:50 ` Alexandre DERUMIER
2012-10-31 17:08 ` Marcus Sorensen
2012-10-31 17:27 ` Alexandre DERUMIER
2012-10-31 17:38 ` Marcus Sorensen
2012-10-31 18:56 ` Alexandre DERUMIER
2012-10-31 19:50 ` Marcus Sorensen
2012-11-01 5:11 ` Alexandre DERUMIER
2012-11-01 5:41 ` Stefan Priebe - Profihost AG
2012-10-31 20:22 ` Josh Durgin
2012-11-01 7:38 ` Dietmar Maurer
2012-11-01 8:08 ` Stefan Priebe - Profihost AG
2012-11-01 10:40 ` Gregory Farnum
2012-11-01 10:54 ` Stefan Priebe - Profihost AG
2012-11-02 9:38 ` Alexandre DERUMIER
2012-11-03 10:01 ` slow fio random read benchmark: last librbd git : 20000iops ! Alexandre DERUMIER
2012-11-03 12:09 ` Alexandre DERUMIER
2012-11-01 15:46 ` slow fio random read benchmark, need help Marcus Sorensen
2012-11-01 16:28 ` Marcus Sorensen
2012-11-01 17:00 ` Dietmar Maurer
2012-11-03 17:09 ` Gregory Farnum
2012-11-04 14:54 ` Alexandre DERUMIER
2012-11-01 2:07 ` [PATCH 6/6] rbd: probe the parent of an image if present Josh Durgin
2012-11-01 12:26 ` 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=509131A3.5090902@inktank.com \
--to=elder@inktank.com \
--cc=ceph-devel@vger.kernel.org \
/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.