From: prajnoha@sourceware.org <prajnoha@sourceware.org>
To: lvm-devel@redhat.com
Subject: LVM2/lib format_text/archiver.c format_text/fo ...
Date: 25 Feb 2011 13:59:48 -0000 [thread overview]
Message-ID: <20110225135948.28606.qmail@sourceware.org> (raw)
CVSROOT: /cvs/lvm2
Module name: LVM2
Changes by: prajnoha at sourceware.org 2011-02-25 13:59:47
Modified files:
lib/format_text: archiver.c format-text.c
lib/metadata : metadata.c
Log message:
Read PV metadata information from cache if pv_setup called with pv->fid == vg->fid.
If the PV is already part of the VG (so the pv->fid == vg->fid), it makes no
sense to attach the mdas information from PV to a VG. Instead, we read new
PV metadata information from cache and attach it to the VG fid.
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/format_text/archiver.c.diff?cvsroot=lvm2&r1=1.41&r2=1.42
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/format_text/format-text.c.diff?cvsroot=lvm2&r1=1.167&r2=1.168
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/metadata.c.diff?cvsroot=lvm2&r1=1.433&r2=1.434
--- LVM2/lib/format_text/archiver.c 2011/02/21 12:24:16 1.41
+++ LVM2/lib/format_text/archiver.c 2011/02/25 13:59:47 1.42
@@ -294,8 +294,6 @@
int backup_restore_vg(struct cmd_context *cmd, struct volume_group *vg)
{
struct pv_list *pvl;
- struct physical_volume *pv;
- struct lvmcache_info *info;
struct format_instance *fid;
struct format_instance_ctx fic;
@@ -305,7 +303,7 @@
*/
/* Attempt to write out using currently active format */
- fic.type = FMT_INSTANCE_VG | FMT_INSTANCE_MDAS | FMT_INSTANCE_AUX_MDAS;
+ fic.type = FMT_INSTANCE_VG | FMT_INSTANCE_AUX_MDAS;
fic.context.vg_ref.vg_name = vg->name;
fic.context.vg_ref.vg_id = NULL;
if (!(fid = cmd->fmt->ops->create_instance(cmd->fmt, &fic))) {
@@ -322,20 +320,9 @@
/* Add any metadata areas on the PVs */
dm_list_iterate_items(pvl, &vg->pvs) {
- pv = pvl->pv;
- if (!(info = info_from_pvid(pv->dev->pvid, 0))) {
- log_error("PV %s missing from cache",
- pv_dev_name(pv));
- return 0;
- }
- if (cmd->fmt != info->fmt) {
- log_error("PV %s is a different format (seqno %s)",
- pv_dev_name(pv), info->fmt->name);
- return 0;
- }
- if (!vg->fid->fmt->ops->pv_setup(vg->fid->fmt, pv, vg)) {
+ if (!vg->fid->fmt->ops->pv_setup(vg->fid->fmt, pvl->pv, vg)) {
log_error("Format-specific setup for %s failed",
- pv_dev_name(pv));
+ pv_dev_name(pvl->pv));
return 0;
}
}
--- LVM2/lib/format_text/format-text.c 2011/02/25 13:50:02 1.167
+++ LVM2/lib/format_text/format-text.c 2011/02/25 13:59:47 1.168
@@ -1645,20 +1645,42 @@
{
struct format_instance *fid = pv->fid;
const char *pvid = (const char *) (*pv->old_id.uuid ? &pv->old_id : &pv->id);
+ struct lvmcache_info *info;
unsigned mda_index;
struct metadata_area *pv_mda;
struct mda_context *pv_mdac;
uint64_t pe_count;
uint64_t size_reduction = 0;
- /* Add any further mdas on this PV to VG's format instance. */
- for (mda_index = 0; mda_index < FMT_TEXT_MAX_MDAS_PER_PV; mda_index++) {
- if (!(pv_mda = fid_get_mda_indexed(fid, pvid, ID_LEN, mda_index)))
- continue;
-
- /* Be sure it's not already in VG's format instance! */
- if (!fid_get_mda_indexed(vg->fid, pvid, ID_LEN, mda_index))
- fid_add_mda(vg->fid, pv_mda, pvid, ID_LEN, mda_index);
+ /* If PV has its own format instance, add mdas from pv->fid to vg->fid. */
+ if (pv->fid != vg->fid) {
+ for (mda_index = 0; mda_index < FMT_TEXT_MAX_MDAS_PER_PV; mda_index++) {
+ if (!(pv_mda = fid_get_mda_indexed(fid, pvid, ID_LEN, mda_index)))
+ continue;
+
+ /* Be sure it's not already in VG's format instance! */
+ if (!fid_get_mda_indexed(vg->fid, pvid, ID_LEN, mda_index))
+ fid_add_mda(vg->fid, pv_mda, pvid, ID_LEN, mda_index);
+ }
+ }
+ /*
+ * Otherwise, if the PV is already a part of the VG (pv->fid == vg->fid),
+ * reread PV mda information from the cache and add it to vg->fid.
+ */
+ else {
+ if (!(info = info_from_pvid(pv->dev->pvid, 0))) {
+ log_error("PV %s missing from cache", pv_dev_name(pv));
+ return 0;
+ }
+
+ if (fmt != info->fmt) {
+ log_error("PV %s is a different format (seqno %s)",
+ pv_dev_name(pv), info->fmt->name);
+ return 0;
+ }
+
+ if (!fid_add_mdas(vg->fid, &info->mdas, pvid, ID_LEN))
+ return_0;
}
/* If there's the 2nd mda, we need to reduce
--- LVM2/lib/metadata/metadata.c 2011/02/21 12:29:21 1.433
+++ LVM2/lib/metadata/metadata.c 2011/02/25 13:59:47 1.434
@@ -4105,7 +4105,7 @@
mda_new = mda_copy(fid->fmt->cmd->mem, mda);
if (!mda_new)
return_0;
-
+ fid_remove_mda(fid, NULL, key, key_len, mda_index);
fid_add_mda(fid, mda_new, key, key_len, mda_index);
mda_index++;
}
reply other threads:[~2011-02-25 13:59 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
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=20110225135948.28606.qmail@sourceware.org \
--to=prajnoha@sourceware.org \
--cc=lvm-devel@redhat.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.