From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 6429 invoked by alias); 5 Oct 2006 22:02:54 -0000 Received: (qmail 6415 invoked by uid 9447); 5 Oct 2006 22:02:52 -0000 Date: Thu, 05 Oct 2006 22:02:00 -0000 Message-ID: <20061005220252.6413.qmail@sourceware.org> From: agk@sourceware.org To: lvm2-cvs@sourceware.org Subject: LVM2 ./WHATS_NEW lib/format_text/format-text.c ... Mailing-List: contact lvm2-cvs-help@sourceware.org; run by ezmlm Precedence: bulk List-Subscribe: List-Post: List-Help: , Sender: lvm2-cvs-owner@sourceware.org X-SW-Source: 2006-10/txt/msg00011.txt.bz2 List-Id: CVSROOT: /cvs/lvm2 Module name: LVM2 Changes by: agk@sourceware.org 2006-10-05 22:02:52 Modified files: . : WHATS_NEW lib/format_text: format-text.c lib/metadata : metadata.c Log message: Fix format_text mda_setup pv->size and pv_setup pe_count calculations. (This area of the code needs a lot more work.) Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.454&r2=1.455 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/format_text/format-text.c.diff?cvsroot=lvm2&r1=1.66&r2=1.67 http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/lib/metadata/metadata.c.diff?cvsroot=lvm2&r1=1.98&r2=1.99 --- LVM2/WHATS_NEW 2006/10/05 21:24:46 1.454 +++ LVM2/WHATS_NEW 2006/10/05 22:02:52 1.455 @@ -1,5 +1,6 @@ Version 2.02.11 - ===================================== + Fix format_text mda_setup pv->size and pv_setup pe_count calculations. Fix _for_each_pv() for mirror with core log. Add lvm_dump.sh script to create a tarball of debugging info from a system. Capture error messages in clvmd and pass them back to the user. --- LVM2/lib/format_text/format-text.c 2006/08/21 12:54:52 1.66 +++ LVM2/lib/format_text/format-text.c 2006/10/05 22:02:52 1.67 @@ -1007,11 +1007,8 @@ uint64_t wipe_size = 8 << SECTOR_SHIFT; size_t pagesize = lvm_getpagesize(); - if (!pvmetadatacopies) { - /* Space available for PEs */ - pv->size -= pe_align(); + if (!pvmetadatacopies) return 1; - } alignment = pe_align() << SECTOR_SHIFT; disk_size = pv->size << SECTOR_SHIFT; @@ -1027,9 +1024,6 @@ /* Requested metadatasize */ mda_size1 = pvmetadatasize << SECTOR_SHIFT; - /* Space available for PEs (before any mdas created) */ - pv->size -= LABEL_SCAN_SECTORS; - /* Place mda straight after label area at start of disk */ start1 = LABEL_SCAN_SIZE; @@ -1037,11 +1031,8 @@ if ((!pe_start && !pe_end) || ((pe_start > start1) && (pe_start - start1 >= MDA_SIZE_MIN))) { mda_adjustment = start1 % pagesize; - if (mda_adjustment) { + if (mda_adjustment) start1 += (pagesize - mda_adjustment); - pv->size -= ((pagesize - mda_adjustment) >> - SECTOR_SHIFT); - } } /* Ensure it's not going to be bigger than the disk! */ @@ -1071,7 +1062,8 @@ /* FIXME If creating new mdas, wipe them! */ if (mda_size1) { if (!add_mda(fmt, fmt->cmd->mem, mdas, pv->dev, start1, - mda_size1)) return 0; + mda_size1)) + return 0; if (!dev_set((struct device *) pv->dev, start1, (size_t) (mda_size1 > @@ -1080,7 +1072,6 @@ return 0; } - pv->size -= mda_size1 >> SECTOR_SHIFT; if (pvmetadatacopies == 1) return 1; } else @@ -1125,7 +1116,6 @@ log_error("Failed to wipe new metadata area"); return 0; } - pv->size -= mda_size2 >> SECTOR_SHIFT; } else return 0; @@ -1416,8 +1406,8 @@ struct lvmcache_info *info; int found; uint64_t pe_end = 0; - - /* FIXME if vg, adjust start/end of pe area to avoid mdas! */ + unsigned mda_count = 0; + uint64_t mda_size2 = 0; /* FIXME Cope with pvchange */ /* FIXME Merge code with _text_create_text_instance */ @@ -1428,11 +1418,16 @@ if ((info = info_from_pvid(pv->dev->pvid))) { pvmdas = &info->mdas; list_iterate_items(mda, pvmdas) { + mda_count++; mdac = (struct mda_context *) mda->metadata_locn; /* FIXME Check it isn't already in use */ + /* Reduce usable device size */ + if (mda_count > 1) + mda_size2 = mdac->area.size >> SECTOR_SHIFT; + /* Ensure it isn't already on list */ found = 0; list_iterate_items(mda2, mdas) { @@ -1470,6 +1465,9 @@ } } + /* Recalculate number of extents that will fit */ + pv->pe_count = (pv->size - pv->pe_start - mda_size2) / vg->extent_size; + /* Unlike LVM1, we don't store this outside a VG */ /* FIXME Default from config file? vgextend cmdline flag? */ pv->status |= ALLOCATABLE_PV; --- LVM2/lib/metadata/metadata.c 2006/09/21 20:25:54 1.98 +++ LVM2/lib/metadata/metadata.c 2006/10/05 22:02:52 1.99 @@ -734,6 +734,8 @@ char uuid[64]; int r = 1; + /* FIXME Also check there's no data/metadata overlap */ + list_iterate_items(pvl, &vg->pvs) { list_iterate_items(pvl2, &vg->pvs) { if (pvl == pvl2)