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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox