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: linkBe 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).