[linux-lvm] *** ANNOUNCEMENT *** LVM 0.9.1 beta1 available at www.sistina.com

Holger Grothe grothe at mathematik.tu-darmstadt.de
Sat Jan 13 18:08:10 UTC 2001


On Sat, Jan 13, 2001 at 05:04:08PM +0100, Jan Niehusmann wrote:
> On Sat, Jan 13, 2001 at 01:15:32AM +0000, Heinz J. Mauelshagen wrote:
> > We'ld appreciate a couple of days for test feedback before pushing a 2.4.0
> > patch to Linus.
> 
> It still has the problem I reported on Dec 22. On Dec 23 I wrote:
> 
> : Ok, I found the problem: The sort order of the pv's is wrong, and 0.9 is
> : missing the code that sorts them. 0.8final's pv_read_all_pv_of_vg.c contains
> : 
> :       for ( p = 0; pv_tmp[p] != NULL; p++) {
> :          if ( strcmp ( pv_tmp[p]->vg_name, vg_name) == 0) {
> :             pv_this[pv_tmp[p]->pv_number-1] = pv_tmp[p];
> :             np++;
> :          }
> :       }
> : 
> : and 0.9's doesn't.

You can see the problem Jan mentioned very easily.

# pvcreate /dev/hda2 /dev/hdc2
pvcreate -- physical volume "/dev/hda2" successfully created
pvcreate -- physical volume "/dev/hdc2" successfully created
# vgcreate vg00 /dev/hda2 /dev/hdc2
vgcreate -- INFO: using default physical extent size 4 MB
vgcreate -- INFO: maximum logical volume size is 255.99 Gigabyte
vgcreate -- doing automatic backup of volume group "vg00"
vgcreate -- volume group "vg00" successfully created and activated
# vgscan
vgscan -- reading all physical volumes (this may take a while...)
vgscan -- found active volume group "vg00"
vgscan -- "/etc/lvmtab" and "/etc/lvmtab.d" successfully created
vgscan -- WARNING: This program does not do a VGDA backup of your volume group

All is fine. But if vg00 is created with 

# vgcreate vg00 /dev/hdc2 /dev/hda2
vgcreate -- INFO: using default physical extent size 4 MB
vgcreate -- INFO: maximum logical volume size is 255.99 Gigabyte
vgcreate -- doing automatic backup of volume group "vg00"
vgcreate -- volume group "vg00" successfully created and activated
# vgscan
vgscan -- reading all physical volumes (this may take a while...)
vgscan -- found active volume group "vg00"
vgscan -- ERROR "pv_check_consistency_all_pv(): PE" volume group "vg00" is inconsistent
vgscan -- ERROR: unable to do a backup of volume group "vg00"
vgscan -- ERROR "lvm_tab_vg_remove(): unlink" removing volume group "vg00" from "/etc/lvmtab"
vgscan -- ERROR "lvm_tab_vg_remove(): unlink" creating "/etc/lvmtab" and "/etc/lvmtab.d

The following patch from Jan (with a minor correction "against" segfaults :-)
corrected the problem for me:
------------------------------------------------------------------------------
*** pv_read_all_pv_of_vg.c.orig	Mon Nov 20 03:47:20 2000
--- pv_read_all_pv_of_vg.c.patched	Sat Jan 13 18:31:00 2001
***************
*** 101,117 ****
        for ( p = 0; pv_tmp[p] != NULL; p++) {
           if ( strncmp ( pv_tmp[p]->vg_name, vg_name, NAME_LEN) == 0) {
              pv_this_sav = pv_this;
              if ( ( pv_this = realloc ( pv_this,
!                                        ( np + 2) * sizeof ( pv_t*))) == NULL) {
                 fprintf ( stderr, "realloc error in %s [line %d]\n",
                                   __FILE__, __LINE__);
                 ret = -LVM_EPV_READ_ALL_PV_OF_VG_MALLOC;
                 if ( pv_this_sav != NULL) free ( pv_this_sav);
                 goto pv_read_all_pv_of_vg_end;
              }
!             pv_this[np] = pv_tmp[p];
!             pv_this[np+1] = NULL;
!             np++;
           }
        }
  
--- 101,117 ----
        for ( p = 0; pv_tmp[p] != NULL; p++) {
           if ( strncmp ( pv_tmp[p]->vg_name, vg_name, NAME_LEN) == 0) {
              pv_this_sav = pv_this;
+ 	    if ( np < pv_tmp[p]->pv_number) np = pv_tmp[p]->pv_number;
              if ( ( pv_this = realloc ( pv_this,
!                                        ( np + 1) * sizeof ( pv_t*))) == NULL) {
                 fprintf ( stderr, "realloc error in %s [line %d]\n",
                                   __FILE__, __LINE__);
                 ret = -LVM_EPV_READ_ALL_PV_OF_VG_MALLOC;
                 if ( pv_this_sav != NULL) free ( pv_this_sav);
                 goto pv_read_all_pv_of_vg_end;
              }
! 	    pv_this[pv_tmp[p]->pv_number-1] = pv_tmp[p];
!             pv_this[np] = NULL;
           }
        }
  
------------------------------------------------------------------------------

HTH, Holger
-- 
Holger Grothe  (Email: grothe at mathematik.tu-darmstadt.de)
Fachbereich Mathematik, TU Darmstadt



More information about the linux-lvm mailing list