From: Philipp Reisner <philipp.reisner@linbit.com>
To: drbd-dev@lists.linbit.com
Cc: Lars Ellenberg <lars.ellenberg@linbit.com>,
Roland Kammerer <roland.kammerer@linbit.com>
Subject: Re: [Drbd-dev] [PATCH] drbdadm: Fix does not allocate bitmap for stacked res
Date: Fri, 26 Jan 2018 16:26:48 +0100 [thread overview]
Message-ID: <1621611.JSGMFM0nhf@fat-tyre> (raw)
In-Reply-To: <20180125062729.4142-1-nwang@suse.com>
Hi Nick,
regarding you proposed patch, instead of special casing
the code we should rather fix the data structure.
I will give it a bit more testing before I push it to the master.
Please let me know if that works for your test-cases.
best regards,
Phil
From b5eab810ded459792c24a4bc5db5ce272ea1ee15 Mon Sep 17 00:00:00 2001
From: Philipp Reisner <philipp.reisner@linbit.com>
Date: Fri, 26 Jan 2018 16:09:01 +0100
Subject: [PATCH] v9,drbdadm,stacking: Fix setting the disk in stacked host
sections
This got broken on the long way from drbd-8.4 to 9.
---
user/v9/drbdadm_postparse.c | 73 ++++++++++++++++++++++-----------------------
1 file changed, 36 insertions(+), 37 deletions(-)
diff --git a/user/v9/drbdadm_postparse.c b/user/v9/drbdadm_postparse.c
index dde0a5e..f223dbe 100644
--- a/user/v9/drbdadm_postparse.c
+++ b/user/v9/drbdadm_postparse.c
@@ -514,9 +514,9 @@ void set_peer_in_resource(struct d_resource* res, int peer_required)
add_no_bitmap_opt(res);
}
-void set_disk_in_res(struct d_resource *res)
+void set_stacked_disk_in_res(struct d_resource *res)
{
- struct d_host_info *host;
+ struct d_host_info *host, *lower_host;
struct d_volume *a, *b;
if (res->ignore)
@@ -526,41 +526,40 @@ void set_disk_in_res(struct d_resource *res)
if (!host->lower)
continue;
- if (host->lower->ignore)
- continue;
-
- check_volume_sets_equal(res, host, host->lower->me);
- if (!config_valid)
- /* don't even bother for broken config. */
- continue;
+ for_each_host(lower_host, &host->lower->all_hosts) {
+ check_volume_sets_equal(res, host, lower_host);
+ if (!config_valid)
+ /* don't even bother for broken config. */
+ continue;
- /* volume lists are sorted on vnr */
- a = STAILQ_FIRST(&host->volumes);
- b = STAILQ_FIRST(&host->lower->me->volumes);
- while (a) {
- while (b && a->vnr > b->vnr) {
- /* Lower resource has more volumes.
- * Probably unusual, but we decided
- * that it should be legal.
- * Skip those that do not match */
- b = STAILQ_NEXT(b, link);
- }
- if (a && b && a->vnr == b->vnr) {
- if (b->device)
- m_asprintf(&a->disk, "%s", b->device);
- else
- m_asprintf(&a->disk, "/dev/drbd%u", b->device_minor);
- /* stacked implicit volumes need internal meta data, too */
- if (!a->meta_disk)
- m_asprintf(&a->meta_disk, "internal");
- if (!a->meta_index)
- m_asprintf(&a->meta_index, "internal");
- a = STAILQ_NEXT(a, link);
- b = STAILQ_NEXT(b, link);
- } else {
- /* config_invalid should have been set
- * by check_volume_sets_equal */
- assert(0);
+ /* volume lists are sorted on vnr */
+ a = STAILQ_FIRST(&host->volumes);
+ b = STAILQ_FIRST(&lower_host->volumes);
+ while (a) {
+ while (b && a->vnr > b->vnr) {
+ /* Lower resource has more volumes.
+ * Probably unusual, but we decided
+ * that it should be legal.
+ * Skip those that do not match */
+ b = STAILQ_NEXT(b, link);
+ }
+ if (a && b && a->vnr == b->vnr) {
+ if (b->device)
+ m_asprintf(&a->disk, "%s", b->device);
+ else
+ m_asprintf(&a->disk, "/dev/drbd%u", b->device_minor);
+ /* stacked implicit volumes need internal meta data, too */
+ if (!a->meta_disk)
+ m_asprintf(&a->meta_disk, "internal");
+ if (!a->meta_index)
+ m_asprintf(&a->meta_index, "internal");
+ a = STAILQ_NEXT(a, link);
+ b = STAILQ_NEXT(b, link);
+ } else {
+ /* config_invalid should have been set
+ * by check_volume_sets_equal */
+ assert(0);
+ }
}
}
}
@@ -1161,7 +1160,7 @@ void post_parse(struct resources *resources, enum pp_flags flags)
// Needs "me" set already
for_each_resource(res, resources)
if (res->stacked_on_one)
- set_disk_in_res(res);
+ set_stacked_disk_in_res(res);
for_each_resource(res, resources)
fixup_peer_devices(res);
--
2.7.4
next prev parent reply other threads:[~2018-01-26 15:33 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-01-25 6:27 [Drbd-dev] [PATCH] drbdadm: Fix does not allocate bitmap for stacked res Nick Wang
2018-01-26 15:26 ` Philipp Reisner [this message]
2018-01-29 5:01 ` Nick Wang
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=1621611.JSGMFM0nhf@fat-tyre \
--to=philipp.reisner@linbit.com \
--cc=drbd-dev@lists.linbit.com \
--cc=lars.ellenberg@linbit.com \
--cc=roland.kammerer@linbit.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox