CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: agk@sourceware.org 2004-05-05 18:17:48 Modified files: lib/format_text: format-text.c Log message: lvm2 format sets unlimited_vols format flag. Patches: http://sources.redhat.com/cgi-bin/cvsweb.cgi/LVM2/lib/format_text/format-text.c.diff?cvsroot=lvm2&r1=1.32&r2=1.33
CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: agk@sourceware.org 2005-04-06 16:35:34 Modified files: lib/format_text: format-text.c Log message: _vg_posn -> _find_vg_rlocn Patches: http://sources.redhat.com/cgi-bin/cvsweb.cgi/LVM2/lib/format_text/format-text.c.diff?cvsroot=lvm2&r1=1.38&r2=1.39
CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: agk@sourceware.org 2005-10-31 02:37:29 Modified files: lib/format_text: format-text.c Log message: A pvresize implementation (Zak Kipling). Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/format_text/format-text.c.diff?cvsroot=lvm2&r1=1.46&r2=1.47
CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: agk@sourceware.org 2006-04-21 15:37:08 Modified files: lib/format_text: format-text.c Log message: terminate vgid in debug mesg Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/format_text/format-text.c.diff?cvsroot=lvm2&r1=1.56&r2=1.57
CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: snitzer@sourceware.org 2009-07-30 17:41:02 Modified files: lib/format_text: format-text.c Log message: Remove legacy support for preserving pe_start if a PV already has data areas. This preserved pe_start would quickly be readjusted to follow the first mda anyway. An example use-case that hit this code path is: running pvcreate on an already existing PV _without_ a preceeding pvremove. Signed-off-by: Mike Snitzer <snitzer@redhat.com> Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/format_text/format-text.c.diff?cvsroot=lvm2&r1=1.108&r2=1.109 --- LVM2/lib/format_text/format-text.c 2009/07/30 17:19:31 1.108 +++ LVM2/lib/format_text/format-text.c 2009/07/30 17:41:01 1.109 @@ -1327,7 +1327,6 @@ 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? */ @@ -1364,16 +1363,9 @@ dm_list_init(&info->mdas); } - /* - * If no pe_start supplied but PV already exists, - * preserve existing value. - */ - if (info->das.n) { - if (!pv->pe_start) - dm_list_iterate_items(da, &info->das) - pv->pe_start = da->disk_locn.offset >> SECTOR_SHIFT; + if (info->das.n) del_das(&info->das); - } else + else dm_list_init(&info->das); /*
CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: snitzer@sourceware.org 2009-07-31 14:23:07 Modified files: lib/format_text: format-text.c Log message: Fix compile warnings from recently added log_very_verbose() in _text_pv_write() Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/format_text/format-text.c.diff?cvsroot=lvm2&r1=1.113&r2=1.114 --- LVM2/lib/format_text/format-text.c 2009/07/30 21:15:17 1.113 +++ LVM2/lib/format_text/format-text.c 2009/07/31 14:23:06 1.114 @@ -1427,8 +1427,8 @@ if (adjustment) pv->pe_start += pv->pe_align - adjustment; - log_very_verbose("%s: setting pe_start=%lu " - "(orig_pe_start=%lu, " + log_very_verbose("%s: setting pe_start=%" PRIu64 + " (orig_pe_start=%" PRIu64 ", " "pe_align=%lu, pe_align_offset=%lu, " "adjustment=%" PRIu64 ")", pv_dev_name(pv), pv->pe_start,
CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: wysochanski@sourceware.org 2010-06-28 20:30:31 Modified files: lib/format_text: format-text.c Log message: Move dev_open / dev_close outside _vg_read_raw_area(). This refactoring moves the device open/close up one level to the caller of _vg_read_raw_area(). Should be no functional change and facilitate future changes related to metadata balancing. Signed-off-by: Dave Wysochanski <dwysocha@redhat.com> Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/format_text/format-text.c.diff?cvsroot=lvm2&r1=1.124&r2=1.125 --- LVM2/lib/format_text/format-text.c 2010/06/28 20:29:57 1.124 +++ LVM2/lib/format_text/format-text.c 2010/06/28 20:30:30 1.125 @@ -483,9 +483,6 @@ char *desc; uint32_t wrap = 0; - if (!dev_open(area->dev)) - return_NULL; - if (!(mdah = _raw_read_mda_header(fid->fmt, area))) goto_out; @@ -520,9 +517,6 @@ vg->status |= PRECOMMITTED; out: - if (!dev_close(area->dev)) - stack; - return vg; } @@ -531,8 +525,17 @@ struct metadata_area *mda) { struct mda_context *mdac = (struct mda_context *) mda->metadata_locn; + struct volume_group *vg; + + if (!dev_open(mdac->area.dev)) + return_NULL; + + vg = _vg_read_raw_area(fid, vgname, &mdac->area, 0); - return _vg_read_raw_area(fid, vgname, &mdac->area, 0); + if (!dev_close(mdac->area.dev)) + stack; + + return vg; } static struct volume_group *_vg_read_precommit_raw(struct format_instance *fid, @@ -540,8 +543,17 @@ struct metadata_area *mda) { struct mda_context *mdac = (struct mda_context *) mda->metadata_locn; + struct volume_group *vg; - return _vg_read_raw_area(fid, vgname, &mdac->area, 1); + if (!dev_open(mdac->area.dev)) + return_NULL; + + vg = _vg_read_raw_area(fid, vgname, &mdac->area, 1); + + if (!dev_close(mdac->area.dev)) + stack; + + return vg; } static int _vg_write_raw(struct format_instance *fid, struct volume_group *vg, @@ -1192,9 +1204,17 @@ /* FIXME We're reading mdah twice here... */ if ((vgname = vgname_from_mda(fmt, &rl->dev_area, &vgid, &vgstatus, NULL, NULL))) { - if ((vg = _vg_read_raw_area(&fid, vgname, - &rl->dev_area, 0))) + if (!dev_open(rl->dev_area.dev)) { + stack; + continue; + } + + vg = _vg_read_raw_area(&fid, vgname, &rl->dev_area, 0); + if (vg) lvmcache_update_vg(vg, 0); + + if (!dev_close(rl->dev_area.dev)) + stack; } }
CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: wysochanski@sourceware.org 2010-06-29 13:29:53 Modified files: lib/format_text: format-text.c Log message: Attempt to fix intermittent failure with non-debug configured vgcfgbackup. There's an intermittent failure with vgcfgbackup that seems to have been introduced with the metadataignore / vgmetadatacopies patchset. Intermittent failures are often the result of uninitialized data, so this patch calls zalloc in a few places it might matter. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/format_text/format-text.c.diff?cvsroot=lvm2&r1=1.133&r2=1.134 --- LVM2/lib/format_text/format-text.c 2010/06/28 20:35:17 1.133 +++ LVM2/lib/format_text/format-text.c 2010/06/29 13:29:53 1.134 @@ -1919,7 +1919,7 @@ dm_list_init(&fid->metadata_areas_ignored); if (!vgname) { - if (!(mda = dm_pool_alloc(fmt->cmd->mem, sizeof(*mda)))) + if (!(mda = dm_pool_zalloc(fmt->cmd->mem, sizeof(*mda)))) return_NULL; mda->ops = &_metadata_text_file_backup_ops; mda->metadata_locn = context; @@ -1936,7 +1936,7 @@ } context = create_text_context(fmt->cmd, path, NULL); - if (!(mda = dm_pool_alloc(fmt->cmd->mem, sizeof(*mda)))) + if (!(mda = dm_pool_zalloc(fmt->cmd->mem, sizeof(*mda)))) return_NULL; mda->ops = &_metadata_text_file_ops; mda->metadata_locn = context; @@ -1950,10 +1950,10 @@ if (!_raw_holds_vgname(fid, &rl->dev_area, vgname)) continue; - if (!(mda = dm_pool_alloc(fmt->cmd->mem, sizeof(*mda)))) + if (!(mda = dm_pool_zalloc(fmt->cmd->mem, sizeof(*mda)))) return_NULL; - if (!(mdac = dm_pool_alloc(fmt->cmd->mem, sizeof(*mdac)))) + if (!(mdac = dm_pool_zalloc(fmt->cmd->mem, sizeof(*mdac)))) return_NULL; mda->metadata_locn = mdac; /* FIXME Allow multiple dev_areas inside area */
CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: mbroz@sourceware.org 2010-08-26 12:22:05 Modified files: lib/format_text: format-text.c Log message: Fix previous const removal. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/format_text/format-text.c.diff?cvsroot=lvm2&r1=1.143&r2=1.144 --- LVM2/lib/format_text/format-text.c 2010/08/20 20:59:07 1.143 +++ LVM2/lib/format_text/format-text.c 2010/08/26 12:22:05 1.144 @@ -1649,7 +1649,7 @@ return dev_name(mdac->area.dev); } -static uint64_t const _metadata_locn_offset_raw(void *metadata_locn) +static uint64_t _metadata_locn_offset_raw(void *metadata_locn) { struct mda_context *mdac = (struct mda_context *) metadata_locn;
CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: zkabelac@sourceware.org 2010-11-29 11:16:58 Modified files: lib/format_text: format-text.c Log message: Remove unused 'i' in _pv_analyze_mda_raw 'i' is unused in the function - remove it. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/format_text/format-text.c.diff?cvsroot=lvm2&r1=1.148&r2=1.149 --- LVM2/lib/format_text/format-text.c 2010/10/26 09:13:13 1.148 +++ LVM2/lib/format_text/format-text.c 2010/11/29 11:16:58 1.149 @@ -173,7 +173,6 @@ uint64_t area_size; uint64_t prev_sector, prev_sector2; uint64_t latest_mrec_offset; - int i; uint64_t offset; uint64_t offset2; size_t size; @@ -214,7 +213,7 @@ offset = prev_sector; size = SECTOR_SIZE; offset2 = size2 = 0; - i = 0; + while (prev_sector != latest_mrec_offset) { prev_sector2 = prev_sector; prev_sector = _get_prev_sector_circular(area_start, area_size,
CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: prajnoha@sourceware.org 2011-02-21 12:25:16 Modified files: lib/format_text: format-text.c Log message: Remove unused _mda_setup fn. This functionality is covered by new pv_add_metadata_area fn. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/format_text/format-text.c.diff?cvsroot=lvm2&r1=1.162&r2=1.163 --- LVM2/lib/format_text/format-text.c 2011/02/21 12:24:17 1.162 +++ LVM2/lib/format_text/format-text.c 2011/02/21 12:25:16 1.163 @@ -1255,159 +1255,6 @@ return (_scan_file(fmt, vgname) & _scan_raw(fmt, vgname)); } -/* For orphan, creates new mdas according to policy. - Always have an mda between end-of-label and pe_align() boundary */ -static int _mda_setup(const struct format_type *fmt, - uint64_t pe_start, uint64_t pe_end, - int pvmetadatacopies, uint64_t pvmetadatasize, - unsigned metadataignore, struct dm_list *mdas, - struct physical_volume *pv, - struct volume_group *vg __attribute__((unused))) -{ - uint64_t mda_adjustment, disk_size, alignment, alignment_offset; - uint64_t start1, mda_size1; /* First area - start of disk */ - uint64_t start2, mda_size2; /* Second area - end of disk */ - uint64_t wipe_size = 8 << SECTOR_SHIFT; - size_t pagesize = lvm_getpagesize(); - - if (!pvmetadatacopies) - return 1; - - alignment = pv->pe_align << SECTOR_SHIFT; - alignment_offset = pv->pe_align_offset << SECTOR_SHIFT; - disk_size = pv->size << SECTOR_SHIFT; - pe_start <<= SECTOR_SHIFT; - pe_end <<= SECTOR_SHIFT; - - if (pe_end > disk_size) { - log_error("Physical extents end beyond end of device %s!", - pv_dev_name(pv)); - return 0; - } - - /* Requested metadatasize */ - mda_size1 = pvmetadatasize << SECTOR_SHIFT; - - /* Place mda straight after label area at start of disk */ - start1 = LABEL_SCAN_SIZE; - - /* Unless the space available is tiny, round to PAGE_SIZE boundary */ - if ((!pe_start && !pe_end) || - ((pe_start > start1) && (pe_start - start1 >= MDA_SIZE_MIN))) { - mda_adjustment = start1 % pagesize; - if (mda_adjustment) - start1 += (pagesize - mda_adjustment); - } - - /* Round up to pe_align boundary */ - mda_adjustment = (mda_size1 + start1) % alignment; - if (mda_adjustment) { - mda_size1 += (alignment - mda_adjustment); - /* Revert if it's now too large */ - if (start1 + mda_size1 > disk_size) - mda_size1 -= (alignment - mda_adjustment); - } - - /* Add pe_align_offset if on pe_align boundary */ - if (alignment_offset && - (((start1 + mda_size1) % alignment) == 0)) { - mda_size1 += alignment_offset; - /* Revert if it's now too large */ - if (start1 + mda_size1 > disk_size) - mda_size1 -= alignment_offset; - } - - /* Ensure it's not going to be bigger than the disk! */ - if (start1 + mda_size1 > disk_size) { - log_warn("WARNING: metadata area fills disk leaving no " - "space for data on %s.", pv_dev_name(pv)); - /* Leave some free space for rounding */ - /* Avoid empty data area as could cause tools problems */ - mda_size1 = disk_size - start1 - alignment * 2; - if (start1 + mda_size1 > disk_size) { - log_error("Insufficient space for first mda on %s", - pv_dev_name(pv)); - return 0; - } - /* Round up to pe_align boundary */ - mda_adjustment = (mda_size1 + start1) % alignment; - if (mda_adjustment) - mda_size1 += (alignment - mda_adjustment); - /* Only have 1 mda in this case */ - pvmetadatacopies = 1; - } - - /* If we already have PEs, avoid overlap */ - if (pe_start || pe_end) { - if (pe_start <= start1) - mda_size1 = 0; - else if (start1 + mda_size1 > pe_start) - mda_size1 = pe_start - start1; - } - - /* FIXME If creating new mdas, wipe them! */ - if (mda_size1) { - if (!add_mda(fmt, fmt->cmd->mem, mdas, pv->dev, start1, - mda_size1, metadataignore)) - return 0; - - if (!dev_set((struct device *) pv->dev, start1, - (size_t) ((mda_size1 > wipe_size) ? - wipe_size : mda_size1), 0)) { - log_error("Failed to wipe new metadata area"); - return 0; - } - - if (pvmetadatacopies == 1) - return 1; - } else - start1 = 0; - - /* A second copy at end of disk */ - mda_size2 = pvmetadatasize << SECTOR_SHIFT; - - /* Ensure it's not going to be bigger than the disk! */ - if (mda_size2 > disk_size) - mda_size2 = disk_size - start1 - mda_size1; - - mda_adjustment = (disk_size - mda_size2) % alignment; - if (mda_adjustment) - mda_size2 += mda_adjustment; - - start2 = disk_size - mda_size2; - - /* If we already have PEs, avoid overlap */ - if (pe_start || pe_end) { - if (start2 < pe_end) { - mda_size2 -= (pe_end - start2); - start2 = pe_end; - } - } - - /* If we already have a first mda, avoid overlap */ - if (mda_size1) { - if (start2 < start1 + mda_size1) { - mda_size2 -= (start1 + mda_size1 - start2); - start2 = start1 + mda_size1; - } - /* No room for any PEs here now! */ - } - - if (mda_size2) { - if (!add_mda(fmt, fmt->cmd->mem, mdas, pv->dev, start2, - mda_size2, metadataignore)) return 0; - if (!dev_set(pv->dev, start2, - (size_t) ((mda_size2 > wipe_size) ? - wipe_size : mda_size2), 0)) { - log_error("Failed to wipe new metadata area"); - return 0; - } - } else - return 0; - - return 1; -} - /* Only for orphans */ /* Set label_sector to -1 if rewriting existing label into same sector */ /* If mdas is supplied it overwrites existing mdas e.g. used with pvcreate */
CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: prajnoha@sourceware.org 2011-02-25 13:50:03 Modified files: lib/format_text: format-text.c Log message: Fix a bug in metadata location calculation, cleanup pv_add_metadata_area fn. This bug (a missing line) caused the 2nd MDA area location to be calculated incorrectly and it didn't fit the disk size properly. (https://www.redhat.com/archives/lvm-devel/2011-February/msg00127.html) Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/format_text/format-text.c.diff?cvsroot=lvm2&r1=1.166&r2=1.167 --- LVM2/lib/format_text/format-text.c 2011/02/21 12:31:28 1.166 +++ LVM2/lib/format_text/format-text.c 2011/02/25 13:50:02 1.167 @@ -1884,11 +1884,13 @@ uint64_t alignment, alignment_offset; uint64_t disk_size; uint64_t mda_start; - uint64_t adjustment, limit; + uint64_t adjustment, limit, tmp_mda_size; uint64_t wipe_size = 8 << SECTOR_SHIFT; size_t page_size = lvm_getpagesize(); struct metadata_area *mda; struct mda_context *mdac; + const char *limit_name; + int limit_applied = 0; if (mda_index >= FMT_TEXT_MAX_MDAS_PER_PV) { log_error(INTERNAL_ERROR "invalid index of value %u used " @@ -1917,13 +1919,19 @@ * is locked. If it's not locked, count with any existing MDA1. * If there's no MDA1, just use disk size as the limit. */ - if (pe_start_locked) + if (pe_start_locked) { limit = pe_start; + limit_name = "pe_start"; + } else if ((mda = fid_get_mda_indexed(fid, pvid, ID_LEN, 1)) && - (mdac = mda->metadata_locn)) + (mdac = mda->metadata_locn)) { limit = mdac->area.start; - else + limit_name = "MDA1 start"; + } + else { limit = disk_size; + limit_name = "disk size"; + } if (limit > disk_size) goto bad; @@ -1937,29 +1945,22 @@ } /* Align MDA0 end position with given alignment if possible. */ - if (alignment) { - if ((adjustment = (mda_start + mda_size) % alignment)) { - mda_size += (alignment - adjustment); - if (mda_start + mda_size > limit) - mda_size -= (alignment - adjustment); - } + if (alignment && + (adjustment = (mda_start + mda_size) % alignment)) { + tmp_mda_size = mda_size + alignment - adjustment; + if (mda_start + tmp_mda_size <= limit) + mda_size = tmp_mda_size; } /* Align MDA0 end position with given alignment offset if possible. */ if (alignment_offset && (((mda_start + mda_size) % alignment) == 0)) { - mda_size += alignment_offset; - if (mda_start + mda_size > limit) - mda_size -= alignment_offset; + tmp_mda_size = mda_size + alignment_offset; + if (mda_start + tmp_mda_size <= limit) + mda_size = tmp_mda_size; } if (mda_start + mda_size > limit) { - log_warn("WARNING: metadata area size outreaches " - "a limit on PV %s specified by its %s. " - "Trying to adjust metadata area size.", - pv_dev_name(pv), - pe_start_locked ? "PE start" : "disk size"); - /* * Try to decrease the MDA0 size with twice the * alignment and then align with given alignment. @@ -1982,6 +1983,8 @@ /* FIXME: We should probably check for some minimum MDA size here. */ else mda_size = limit - mda_start; + + limit_applied = 1; } /* @@ -1997,41 +2000,54 @@ else { /* * Try to fit MDA1 start within given pe_end or pe_start limit - * if it's locked. If pe_start and pe_end are not defined yet, - * count with any existing MDA0 and pe_start. If MDA0 does not - * exist, just use LABEL_SCAN_SIZE. + * if defined or locked. If pe_start is not defined yet, count + * with any existing MDA0. If MDA0 does not exist, just use + * LABEL_SCAN_SIZE. */ pe_end = pv->pe_count ? (pv->pe_start + pv->pe_count * pv->pe_size - 1) << SECTOR_SHIFT : 0; - if (pe_start_locked) + + if (pe_start || pe_start_locked) { limit = pe_end ? pe_end : pe_start; - else if (pe_start) - limit = pe_start; - /* - * Normally MDA0's start + size should be pe_start. - * The statemet here is probably useless since the - * situation is covered by previous statement. - */ + limit_name = pe_end ? "pe_end" : "pe_start"; + } else if ((mda = fid_get_mda_indexed(fid, pvid, ID_LEN, 0)) && - (mdac = mda->metadata_locn)) + (mdac = mda->metadata_locn)) { limit = mdac->area.start + mdac->area.size; - else + limit_name = "MDA0 end"; + } + else { limit = LABEL_SCAN_SIZE; + limit_name = "label scan size"; + } - if (limit > disk_size || mda_size > disk_size) + if (limit > disk_size) goto bad; - mda_start = disk_size - mda_size; - - if (alignment) { - adjustment = mda_start % alignment; - if (adjustment) - mda_size += adjustment; + if (mda_size > disk_size) { + mda_size = disk_size - limit; + limit_applied = 1; } - if (disk_size - mda_size < limit) + mda_start = disk_size - mda_size; + + /* If MDA1 size is too big, just take any usable space. */ + if (disk_size - mda_size < limit) { mda_size = disk_size - limit; + mda_start = disk_size - mda_size; + limit_applied = 1; + } + /* Otherwise, try to align MDA1 start if possible. */ + else if (alignment && + (adjustment = mda_start % alignment)) { + tmp_mda_size = mda_size + adjustment; + if (tmp_mda_size < disk_size && + disk_size - tmp_mda_size >= limit) { + mda_size = tmp_mda_size; + mda_start = disk_size - mda_size; + } + } /* * If PV's pe_end not set yet, set it to the end of the @@ -2044,6 +2060,12 @@ }*/ } + if (limit_applied) + log_very_verbose("Using limited metadata area size on %s " + "with value %" PRIu64 " (limited by %s of " + "%" PRIu64 ").", pv_dev_name(pv), + mda_size, limit_name, limit); + if (mda_size) { /* Wipe metadata area with zeroes. */ if (!dev_set((struct device *) pv->dev, mda_start,
CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: prajnoha@sourceware.org 2011-02-28 17:05:48 Modified files: lib/format_text: format-text.c Log message: Use pv->vg_name directly instead of pv->vg->name in _text_pv_write. This also prevents a possible segfault during an automatic repair when the PV does not belong to a VG anymore and we call pv_write_orphan. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/format_text/format-text.c.diff?cvsroot=lvm2&r1=1.170&r2=1.171 --- LVM2/lib/format_text/format-text.c 2011/02/28 13:19:02 1.170 +++ LVM2/lib/format_text/format-text.c 2011/02/28 17:05:48 1.171 @@ -1273,8 +1273,7 @@ /* Add a new cache entry with PV info or update existing one. */ if (!(info = lvmcache_add(fmt->labeller, (const char *) &pv->id, - pv->dev, pv->vg ? pv->vg->name : FMT_TEXT_ORPHAN_VG_NAME, - NULL, 0))) + pv->dev, pv->vg_name, NULL, 0))) return_0; label = info->label;
CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: prajnoha@sourceware.org 2011-03-02 10:23:29 Modified files: lib/format_text: format-text.c Log message: Use a copy if moving an mda from pv fid to vg fid. We'll destroy the pv fid (with all mdas in it) after merging all pv mdas to a vg in _text_pv_setup fn, hence we need to use a copy here! Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/format_text/format-text.c.diff?cvsroot=lvm2&r1=1.172&r2=1.173 --- LVM2/lib/format_text/format-text.c 2011/03/02 10:19:14 1.172 +++ LVM2/lib/format_text/format-text.c 2011/03/02 10:23:29 1.173 @@ -1647,7 +1647,7 @@ 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 metadata_area *pv_mda, *pv_mda_copy; struct mda_context *pv_mdac; uint64_t pe_count; uint64_t size_reduction = 0; @@ -1659,8 +1659,10 @@ 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 (!fid_get_mda_indexed(vg->fid, pvid, ID_LEN, mda_index)) { + pv_mda_copy = mda_copy(vg->fid->fmt->cmd->mem, pv_mda); + fid_add_mda(vg->fid, pv_mda_copy, pvid, ID_LEN, mda_index); + } } } /*
CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: zkabelac@sourceware.org 2012-02-27 09:54:25 Modified files: lib/format_text: format-text.c Log message: Remove test for pvid Since pvid is char buffer[] and not pointer, there is no point to check it for NULL. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/format_text/format-text.c.diff?cvsroot=lvm2&r1=1.195&r2=1.196 --- LVM2/lib/format_text/format-text.c 2012/02/23 17:59:33 1.195 +++ LVM2/lib/format_text/format-text.c 2012/02/27 09:54:25 1.196 @@ -1676,7 +1676,6 @@ */ else { if (!pv->dev || - !pv->dev->pvid || !(info = lvmcache_info_from_pvid(pv->dev->pvid, 0))) { log_error("PV %s missing from cache", pv_dev_name(pv)); return 0;