public inbox for lvm2-cvs@sourceware.org
help / color / mirror / Atom feed
From: snitzer@sourceware.org
To: lvm-devel@redhat.com, lvm2-cvs@sourceware.org
Subject: LVM2 ./WHATS_NEW lib/format_text/format-text.c
Date: Thu, 30 Jul 2009 21:15:00 -0000 [thread overview]
Message-ID: <20090730211519.2838.qmail@sourceware.org> (raw)
CVSROOT: /cvs/lvm2
Module name: LVM2
Changes by: snitzer@sourceware.org 2009-07-30 21:15:18
Modified files:
. : WHATS_NEW
lib/format_text: format-text.c
Log message:
Disable the "new pe_start policy"
Documented which use-cases force the reinstatement of the nuanced
handling of pe_start. As soon as orphan PVs are eliminated much of this
will no longer be a concern ('preserve_pe_start' can be reenabled in
.pv_setup).
Added defensive 'if (pv->pe_align)' check in _text_pv_write()'s pe_start
loop.
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.1217&r2=1.1218
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/format_text/format-text.c.diff?cvsroot=lvm2&r1=1.112&r2=1.113
--- LVM2/WHATS_NEW 2009/07/30 18:40:22 1.1217
+++ LVM2/WHATS_NEW 2009/07/30 21:15:17 1.1218
@@ -1,9 +1,7 @@
Version 2.02.51 -
================================
Add --dataalignmentoffset to pvcreate to shift start of aligned data area.
- Preserve pe_start in .pv_write if pe_start was supplied.
Fix _mda_setup() to not check first mda's size before pe_align rounding.
- Formalize pe_start policy as split between .pv_setup and .pv_write.
Document -I option of clvmd in the man page.
Fix configure script to handle multiple clvmd selections.
Fix lvm2app.pc installation filename.
--- LVM2/lib/format_text/format-text.c 2009/07/30 18:40:22 1.112
+++ LVM2/lib/format_text/format-text.c 2009/07/30 21:15:17 1.113
@@ -1337,6 +1337,7 @@
char buf[MDA_HEADER_SIZE] __attribute((aligned(8)));
struct mda_header *mdah = (struct mda_header *) buf;
uint64_t adjustment;
+ struct data_area_list *da;
/* FIXME Test mode don't update cache? */
@@ -1373,24 +1374,42 @@
dm_list_init(&info->mdas);
}
- if (info->das.n)
+ /*
+ * If no pe_start supplied but PV already exists,
+ * get existing value; use-cases include:
+ * - pvcreate on PV without prior pvremove
+ * - vgremove on VG with PV(s) that have pe_start=0 (hacked cfg)
+ */
+ if (info->das.n) {
+ if (!pv->pe_start)
+ dm_list_iterate_items(da, &info->das)
+ pv->pe_start = da->disk_locn.offset >> SECTOR_SHIFT;
del_das(&info->das);
- else
+ } else
dm_list_init(&info->das);
+#if 0
+ /*
+ * FIXME: ideally a pre-existing pe_start seen in .pv_write
+ * would always be preserved BUT 'pvcreate on PV without prior pvremove'
+ * could easily cause the pe_start to overlap with the first mda!
+ */
if (pv->pe_start) {
log_very_verbose("%s: preserving pe_start=%lu",
pv_dev_name(pv), pv->pe_start);
goto preserve_pe_start;
}
+#endif
/*
* If pe_start is still unset, set it to first aligned
* sector after any metadata areas that begin before pe_start.
*/
- pv->pe_start = pv->pe_align;
- if (pv->pe_align_offset)
- pv->pe_start += pv->pe_align_offset;
+ if (!pv->pe_start) {
+ pv->pe_start = pv->pe_align;
+ if (pv->pe_align_offset)
+ pv->pe_start += pv->pe_align_offset;
+ }
dm_list_iterate_items(mda, &info->mdas) {
mdac = (struct mda_context *) mda->metadata_locn;
if (pv->dev == mdac->area.dev &&
@@ -1402,11 +1421,14 @@
pv->pe_start = (mdac->area.start + mdac->area.size)
>> SECTOR_SHIFT;
/* Adjust pe_start to: (N * pe_align) + pe_align_offset */
- adjustment =
+ if (pv->pe_align) {
+ adjustment =
(pv->pe_start - pv->pe_align_offset) % pv->pe_align;
- if (adjustment)
- pv->pe_start += pv->pe_align - adjustment;
- log_very_verbose("%s: setting pe_start=%lu (orig_pe_start=%lu, "
+ if (adjustment)
+ pv->pe_start += pv->pe_align - adjustment;
+
+ log_very_verbose("%s: setting pe_start=%lu "
+ "(orig_pe_start=%lu, "
"pe_align=%lu, pe_align_offset=%lu, "
"adjustment=%" PRIu64 ")",
pv_dev_name(pv), pv->pe_start,
@@ -1414,6 +1436,7 @@
pv->pe_start -= pv->pe_align - adjustment :
pv->pe_start),
pv->pe_align, pv->pe_align_offset, adjustment);
+ }
}
}
if (pv->pe_start >= pv->size) {
@@ -1422,7 +1445,7 @@
return 0;
}
- preserve_pe_start:
+ /* FIXME: preserve_pe_start: */
if (!add_da
(NULL, &info->das, pv->pe_start << SECTOR_SHIFT, UINT64_C(0)))
return_0;
@@ -1635,7 +1658,7 @@
/* pvmetadatasize in sectors */
/*
- * pe_start policy:
+ * pe_start goal: FIXME -- reality of .pv_write complexity undermines this goal
* - In cases where a pre-existing pe_start is provided (pvcreate --restorefile
* and vgconvert): pe_start must not be changed (so pv->pe_start = pe_start).
* - In cases where pe_start is 0: leave pv->pe_start as 0 and defer the
@@ -1758,6 +1781,18 @@
return 0;
}
+ /*
+ * This initialization has a side-effect of allowing
+ * orphaned PVs to be created with the proper alignment.
+ * Setting pv->pe_start here circumvents .pv_write's
+ * "pvcreate on PV without prior pvremove" retreival of
+ * the PV's previous pe_start.
+ * - Without this you get actual != expected pe_start
+ * failures in the testsuite.
+ */
+ if (!pe_start && pv->pe_start < pv->pe_align)
+ pv->pe_start = pv->pe_align;
+
if (extent_count)
pe_end = pe_start + extent_count * extent_size - 1;
if (!_mda_setup(fmt, pe_start, pe_end, pvmetadatacopies,
next reply other threads:[~2009-07-30 21:15 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-07-30 21:15 snitzer [this message]
-- strict thread matches above, loose matches on Subject: below --
2012-02-13 11:09 zkabelac
2011-08-29 13:37 prajnoha
2011-02-03 1:41 zkabelac
2010-10-26 9:13 zkabelac
2010-09-30 14:12 prajnoha
2010-06-01 12:08 prajnoha
2009-07-30 18:40 snitzer
2009-07-30 17:42 snitzer
2009-07-30 17:19 snitzer
2009-07-30 17:18 snitzer
2009-03-23 21:13 taka
2009-03-03 16:35 mbroz
2008-10-17 0:55 agk
2008-09-30 20:37 agk
2008-08-16 9:46 mbroz
2008-07-31 10:50 agk
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=20090730211519.2838.qmail@sourceware.org \
--to=snitzer@sourceware.org \
--cc=lvm-devel@redhat.com \
--cc=lvm2-cvs@sourceware.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;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).