From: Alex Elder <elder@inktank.com>
To: ceph-devel@vger.kernel.org
Subject: [PATCH 04/11] rbd: more cleanup in rbd_header_from_disk()
Date: Fri, 24 Aug 2012 11:33:30 -0500 [thread overview]
Message-ID: <5037ACDA.3010004@inktank.com> (raw)
In-Reply-To: <5037AB20.4000103@inktank.com>
This just rearranges things a bit more in rbd_header_from_disk()
so that the snapshot sizes are initialized right after the buffer
to hold them is allocated, and doing a little further consolidation
that follows from that. It also adds a few simple comments.
Signed-off-by: Alex Elder <elder@inktank.com>
---
drivers/block/rbd.c | 26 +++++++++++++-------------
1 file changed, 13 insertions(+), 13 deletions(-)
diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
index 7b3d861..130dbc2 100644
--- a/drivers/block/rbd.c
+++ b/drivers/block/rbd.c
@@ -520,6 +520,7 @@ static int rbd_header_from_disk(struct
rbd_image_header *header,
u32 snap_count;
size_t len;
size_t size;
+ u32 i;
memset(header, 0, sizeof (*header));
@@ -535,6 +536,8 @@ static int rbd_header_from_disk(struct
rbd_image_header *header,
if (snap_count) {
u64 snap_names_len = le64_to_cpu(ondisk->snap_names_len);
+ /* Save a copy of the snapshot names */
+
BUG_ON(snap_names_len > (u64) SIZE_MAX);
header->snap_names = kmalloc(snap_names_len, GFP_KERNEL);
if (!header->snap_names)
@@ -542,10 +545,15 @@ static int rbd_header_from_disk(struct
rbd_image_header *header,
memcpy(header->snap_names, &ondisk->snaps[snap_count],
snap_names_len);
+ /* Record each snapshot's size */
+
size = snap_count * sizeof (*header->snap_sizes);
header->snap_sizes = kmalloc(size, GFP_KERNEL);
if (!header->snap_sizes)
goto out_err;
+ for (i = 0; i < snap_count; i++)
+ header->snap_sizes[i] =
+ le64_to_cpu(ondisk->snaps[i].image_size);
} else {
WARN_ON(ondisk->snap_names_len);
header->snap_names = NULL;
@@ -558,6 +566,8 @@ static int rbd_header_from_disk(struct
rbd_image_header *header,
header->comp_type = ondisk->options.comp_type;
header->total_snaps = snap_count;
+ /* Allocate and fill in the snapshot context */
+
size = sizeof (struct ceph_snap_context);
size += snap_count * sizeof (header->snapc->snaps[0]);
header->snapc = kzalloc(size, GFP_KERNEL);
@@ -567,19 +577,9 @@ static int rbd_header_from_disk(struct
rbd_image_header *header,
atomic_set(&header->snapc->nref, 1);
header->snapc->seq = le64_to_cpu(ondisk->snap_seq);
header->snapc->num_snaps = snap_count;
-
- /* Fill in the snapshot information */
-
- if (snap_count) {
- u32 i;
-
- for (i = 0; i < snap_count; i++) {
- header->snapc->snaps[i] =
- le64_to_cpu(ondisk->snaps[i].id);
- header->snap_sizes[i] =
- le64_to_cpu(ondisk->snaps[i].image_size);
- }
- }
+ for (i = 0; i < snap_count; i++)
+ header->snapc->snaps[i] =
+ le64_to_cpu(ondisk->snaps[i].id);
return 0;
--
1.7.9.5
next prev parent reply other threads:[~2012-08-24 16:33 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-08-24 16:26 [PATCH 00/11] rbd: another set of patches Alex Elder
2012-08-24 16:32 ` [PATCH 01/11] rbd: handle locking inside __rbd_client_find() Alex Elder
2012-08-30 16:09 ` Yehuda Sadeh
2012-08-24 16:32 ` [PATCH 02/11] rbd: don't over-allocate space for object prefix Alex Elder
2012-08-30 16:18 ` Yehuda Sadeh
2012-08-24 16:33 ` [PATCH 03/11] rbd: kill incore snap_names_len Alex Elder
2012-08-30 16:24 ` Yehuda Sadeh
2012-08-30 16:41 ` Alex Elder
2012-09-06 15:36 ` [PATCH, v2 " Alex Elder
2012-09-07 21:22 ` Yehuda Sadeh
2012-08-24 16:33 ` Alex Elder [this message]
2012-08-30 16:48 ` [PATCH 04/11] rbd: more cleanup in rbd_header_from_disk() Yehuda Sadeh
2012-08-24 16:33 ` [PATCH 05/11] rbd: move rbd_opts to struct rbd_device Alex Elder
2012-08-30 17:07 ` Yehuda Sadeh
2012-09-06 14:21 ` Alex Elder
2012-09-07 21:40 ` Yehuda Sadeh
2012-08-24 16:34 ` [PATCH 06/11] rbd: add read_only rbd map option Alex Elder
2012-08-30 17:29 ` Yehuda Sadeh
2012-08-30 17:39 ` Alex Elder
2012-09-06 15:36 ` [PATCH, v2 " Alex Elder
2012-09-07 15:45 ` Sage Weil
2012-09-07 20:36 ` Alex Elder
2012-09-07 21:26 ` Yehuda Sadeh Weinraub
2012-08-24 16:34 ` [PATCH 07/11] rbd: kill notify_timeout option Alex Elder
2012-08-30 17:31 ` Yehuda Sadeh
2012-08-24 16:35 ` [PATCH 08/11] rbd: bio_chain_clone() cleanups Alex Elder
2012-08-30 17:40 ` Yehuda Sadeh
2012-08-24 16:35 ` [PATCH 09/11] rbd: drop needless test in rbd_rq_fn() Alex Elder
2012-08-30 17:41 ` Yehuda Sadeh
2012-08-24 16:36 ` [PATCH 10/11] rbd: check for overflow in rbd_get_num_segments() Alex Elder
2012-08-30 17:50 ` Yehuda Sadeh
2012-08-24 16:36 ` [PATCH 11/11] rbd: split up rbd_get_segment() Alex Elder
2012-08-30 18:03 ` Yehuda Sadeh
2012-08-30 12:32 ` [PATCH 00/11] rbd: another set of patches Alex Elder
2012-09-06 15:34 ` 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=5037ACDA.3010004@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